TransformationDictionary & DerivedValue
PMMLは、様々な種類の単純なデータの変換を定義します:
・Normalization(正規化):値を数へと写像する。その入力値は連続値も離散値も取り得る。
・Discretization(離散化):連続値を離散値に写像する。
・Value mapping(値写像):離散値を離散値に写像する。
・Aggregation(集合?):値を要約したり集めたりする。例えば、平均の計算。
対応するXML要素は、様々な写像に共通の要素を与えるsurroundingなマークアップDerivedFieldの内容として現われます。さらに、それらは、いくつかの場面では、ニューラル・ネットかNaive Bayesモデルのような特定のモデルの定義の中に現われることがあります。変換されたフィールドは、統計やモデルがこれらのフィールドを参照できるように名前を持っています、
PMMLの中のtransformationsは、マイニングのためのデータを集めて準備するために必要な予\備処理をする関数の全集合をカバーしません。あまりにも多くの予\備処理の表\記が存在します。その代わりに、PMMLtransformationsは、マイニングシステムによって自動的に作成される表\現を持ちます。典型的な例はニューラル・ネット中の入力値の正規化です。同様に、離散化は、偏りのあるデータを変換するために四分位範囲を計算するマイニングシステムシステムによって構\成されうる。
<!ELEMENT TransformationDictionary ( Extension*, DerivedField* ) > <!ENTITY % EXPRESSION "( Constant | FieldRef | NormContinuous | NormDiscrete | Discretize | MapValues | Aggregate)" > <!ELEMENT DerivedField (Extension*, %EXPRESSION; )> <!ATTLIST DerivedField name %FIELD-NAME; #IMPLIED displayName CDATA #IMPLIED > |
DataDictionaryの中のDataFieldに加えTransformationDictionaryの中のDerivedFieldは、一意な名前を持っていなければなりません。
定数値および他のフィールドへの参照は、多数の議論(arguments)を行っている表\現の中で使用することができます。フィールドの参照は、正規化されないフィールドに対する中心座標を定義するために、クラスタリングモデルで使用されます。DerivedFieldがTransformationDictionaryに含まれている場合、名前属性が要求されます。モデル中にinlineに含まれるDerivedFieldsに対して、名前はオプションとなります。
<!ELEMENT Constant ( Value ) > <!ELEMENT FieldRef > <!ATTLIST FieldRef field %FIELD-NAME; #REQUIRED > |
正規化 (Normalization)
正規化のための要素は入力値を、特定の値(たいていは数値幅[0 .. 1]の)へと写像するための基礎的なフレームワークを与えます。正規化はニューラル・ネットの中で使用されます。同様の事例は回帰(regression)モデルの中でも使用されます。
<!ENTITY % NORM-INPUT "( NormContinuous | NormDiscrete )" > <!ELEMENT NormContinuous ( Extension*, LinearNorm* ) > <!ATTLIST NormContinuous field %FIELD-NAME; #REQUIRED > |
NormContinuous: piecewise linear interpolation(部分化線形補間)よって入力フィールドを正規化する方法を定義します。
field:データ・ディクショナリー中のフィールドを参照しなければなりません。LinearNormが欠損なら、入力フィールドは正規化されません。
<!ELEMENT LinearNorm EMPTY > <!ATTLIST LinearNorm orig %NUMBER; #REQUIRED norm %NUMBER; #REQUIRED > |
LinearNorm*: stepwise linear interpolation(飛び石線形補間)関数に対する点の列を定義する。列は少なくとも2つの要素を含んでいなければならない。処理を単純化するために、列は、origの値を昇順にする(acending)ことによって、ソ\ートされなければなりません。NormContinous内に、要素LinearNormを元々の値を昇順にすることにより厳密にソ\ートしなければなりません。a1<a3<a2を満たす点(a3、b3)が存在しないような2点(a1,b1)、および(a2,b2)を与えると、正規化された値は以下のようになる。
b1+ ( x-a1)/(a2-a1)*(b2-b1) ただし a1 <= x <= a2.
欠損している入力値は、欠損した出力へと写像される。 入力値が範囲[a1..an]内に存在しない場合、それはoutlierとして扱われ、outlierを扱う特定の手法は、callerによって与えられなければならない。例えば、outlierは 欠損値へと写像することも、あるいは最小値もしくは最大値としてそれを写像することができるかもしれません。
<!ELEMENT NormDiscrete ( Extension* ) > <!ATTLIST NormDiscrete field %FIELD-NAME; #REQUIRED method ( indicator | thermometer ) #FIXED "indicator" value CDATA #REQUIRED > |
indicator methodで、要素(f,v)は、入力フィールドfの値がvならユニットは値1.0をもち、fの値がvではないならそのユニットは値0を持つという事を定義する。
ある入力フィールドを参照するNormDiscrete事例(instances)の集合は、単一の入力フィールドを正規化したフィールドの集合へと写像するfan-out関数を定義します。欠損している入力値は欠損した出力へと写像されます。
PMML 2.0は、1つの種類の離散値の正規化だけをサポートします。将来のバージョンは、thermometer encodingのような他の技術をサポートすることになるだろう。thermometer encodingは順序値に対し使用することができます。入力フィールドfの値がvより大きいか等しい場合、出力は1.0で、そうでなければ、それは0.0です。
離散化(Discretization)
数の入力フィールドの離散化はintervalから文字列への写像です。
<!ELEMENT Discretize (DiscretizeBin+) > <!ATTLIST Discretize field %FIELD-NAME; #REQUIRED > <!ELEMENT DiscretizeBin (Interval) > <!ATTLIST DiscretizeBin binValue CDATA #REQUIRED > |
2つのintervalは同じcategoricalな値へと写像されるが、個々の数の入力値の写像は一意でなければならない。つまり、intervalは離れていなければならないということだ。intervalは、入力値の全範囲をカバーするべきです。intervalがカバーしないある値が見出されたなら、それは、欠損値へと写像される。入力が欠損値であれば、結果も欠損値です。
以下のように定義すると:
<Discretize field="Profit"> <DiscretizeBin binValue="negative"> <Interval closure="openOpen" rightMargin="0" /> <!-- left margin is -infinity by default --> </DiscretizeBin> <DiscretizeBin binValue="positive"> <Interval closure="closedOpen" leftMargin="0" /> <!-- right margin is +infinity by default --> </DiscretizeBin> </Discretize> |
入力としてフィールド「Profit」として、0未満の値を「negative」へと写像し、それ以外の値を「positive」へと写像する。
SQLでは、この定義が以下のCASE表\現に相当します。
CASE When "Profit" <0 THEN \'negative\' WHEN "Profit">=0 Then \'positive\' End
写像値(Map values)
任意の離散値は、値の対をリストすることによって、異なる任意の可能\な離散値へと写像されうる。このリストはテーブルによってインプリメントされます、したがって、それは、XMLマークアップのシーケンスによって、あるいは外部テーブルへの言及によって、inlineに与えらえれることができます。テーブルがquite largeになることができるので、同じ技術は階層に対して使われます。
<!ELEMENT MapValues (FieldColumnPair+, %TABLE; ) > <!ATTLIST MapValues outputColumn CDATA #REQUIRED defaultValue CDATA #IMPLIED > <!ELEMENT FieldColumnPair () > <!ATTLIST FieldColumnPair field %FIELD-NAME; #REQUIRED column CDATA #REQUIRED > |
それぞれの文字列値は1つの値へと写像される事が出来ます。しかし、マッチングに使用されたテーブル・エントリーが一意でない場合、それはエラーになります。値写像は部分的かもしれません。つまり、入力値が写像テーブルの中で値と一致しないばあい、結果は欠損値です。もし、defaultValueがそのとき与えられているなら、テーブルの中に一致するエントリーをもたない入力価はデフォルト値に写像されます。入力が欠損値である場合、同じことになります。
以下のように定義すると:
<MapValues outputColumn="longForm"> <FieldColumnPair field="gender" column="shortForm"/> <InlineTable><Extension> <row><shortForm>m</shortForm><longForm>male</longForm> </row> <row><shortForm>f</shortForm><longForm>female</longForm> </row> </Extension></InlineTable> </MapValues> |
フィールド「gender」から対応する完全な語句へと短縮的な写像をします。すなわち、「m」は「male」に、「f」は「female」に写像されます。
SQLでは、この定義が以下のCASE表\現に相当します。
CASE "gender" When \'m\' Then \'male\' When \'f\' Then \'female\' End
属性「defaultValue」は、Else SomeDefaultを加えることで含意されるでしょう。
集合(Aggregations)
Association rulesおよびシーケンスは、アイテムの集合を参照します。入力レコードの集合上のaggregationによって、これらの集合は定義されうる。 そのレコードはフィールドのうちの1つによって一まとめにされます。また、このグループ化したフィールドの値は、aggregationに対するレコードの集合を分割します。これは、「GROUP BY」節を使ったSQLの従来のaggregationに対応します。
<!ELEMENT Aggregate ( ) > <!ATTLIST Aggregate field %FIELD-NAME; #REQUIRED function "count | sum | average | min | max| multiset " #REQUIRED groupField %FIELD-NAME; #IMPLIED sqlWhere CDATA #IMPLIED > |
以下のように定義すると:
<Aggregate field="item" function="multiset" groupField="transaction"/> |
アイテム値の集合を構\築。各トランザクションに対して、つまり、フィールド「transaction」での各々の値について、アイテムの一つの集合が存在する。
適合
PMML利用者は、transformation dictionariesをサポートすることは要求されません。しかしながら、ニューラル・ネット・モデルおよびクラスタリングモデルは、タイプNormContinuousおよびタイプNormDiscreteの正規化要素を含んでいるだろう。Bayesモデルは、タイプDiscretizeの離散化要素を含んでいるだろう。もし、それらが、それぞれNeuralNetwork、ClusteringModel、あるいは、NaiveBayesModelの中に含まれているなら、利用者がそれらをサポートしなければならない。