Naive Bayes Models
可能\な値T1,...Tmを持つcategoricalな目標フィールドと、(現在のレコードで)I1*,...In*の値を持つ、predictorフィールドI1,...Inを仮定した上で、predictorsの値を与えると、目標Tが値Tiをもつ確率は、次のように導出される。
P(Ti | I1*,...In*) = P(Ti ) P(I1*,...In* |Ti) / P(I1*,...In*), ベイズ定理によって
~ P(Ti ) ProductjP(Ij* |Ti) / P(I1*,...In*), 条件付き独立の仮定によって
= P(Ti ) ProductjP(Ij* | Ti) / Sumk ( P(Tk) Productj P(Ij*| Tk))
= Li / Sumk Lk, defining likelihood Lk = P(Tk) Productj P(Ij*| Tk)
Li = P(Ti ) Productj P(Ij* | Ti)
= (count[Ti] / Sumk count[Tk]) Productj (count[Ij*Ti] / Sumk count[Tk]) / (count[Ti] / Sumk count[Tk] )
~ count[Ti] Productj(count[Ij* Ti] / count[Ti]), removing factors of Sumkcount[Tk] common to all L
0のカウントは特に注意を要します。調節なしでは、0のカウントが、そのカウントが要因として現われる尤度(likelihood)に関して絶対的否定を与えることになるでしょう。したがって、Bayesモデルは、count[Ij*Ti]が0のとき、P(Ij*| Tk)の代わりに使うために、デフォルトの(たいていは非常に小さな)確率を指定するしきい値パラメータを組み込みます。
第二の適応は、トレーニング・データ中のmissing値に対するもので、条件確率(conditional-probability)項に、分母count[Ti]を含んでいるものです。 P(Ij*| Ti)の分母が和Sumk count[IjkTi]で置き換えれられることによって、正確さは向上します。すなわちアイテムIjの任意の(missingではない)値と目標値のco-occurrencesのカウントの和と置き換えるということだ。
素朴Bayesモデルは、各フィールド(ターゲットもしくはpredictor)が離散化されていることを要求する。そうすることで、そのモデルによって、限られた少数の値だけが考慮される。
和において、素朴Bayesモデルは次のパラメーターおよびカウントを要求します:
・属性しきい値(threshold)は、count[Ij*Ti]が0の時にP(Ij*| Tk)の代わりに使う確率を指定します。
・要素TargetValueCountsは、目標フィールドの各々の値Tiに対してトレーニングデータ中に目標値の出現回数、すなわちcount[Ti]をリストします。
・各predictorフィールドIiと、そのフィールドの各々の離散値Iijに対し、要素PairCountsは、目標フィールドの各々の値Tkに対して、その目標値と共にそのpredictor値の出現数、すなわちcount[IijTk]をリストします。
NaiveBayesModelは本質的にマトリックスの集合を定義します。各入力フィールドに対して、目標値に相対的な入力値の頻度カウント(frequency counts)を含むマトリックスがある。
Target value t1 t2 t3 ... count[t1] count[t2] count[t3] ... Input1 i11 count[i11,t1] count[i11,t2] count[i11,t3] ... i12 count[i12,t1] count[i12,t2] count[i12,t3] ... ... ... ... ... ... Input2 i21 count[i21,t1] count[i21,t2] count[i21,t3] ... i22 count[i22,t1] count[i22,t2] count[i22,t3] ... i23 count[i23,t1] count[i23,t2] count[i23,t3] ... ... ... ... ... ... Input3 ... ... ... ... ...
Scoring 手続き
(i12,i23,i31)のような入力ベクトルを仮定すると、クラスt1に対する確率は次のように計算される。
P(t1|i12,i23,i31) = L1 / (L1 + L2 + L3)
但し
L1 = count[t1] * count[i12,t1]/count[t1] * count[i23,t1]/count[t1] * count[i31,t1]/count[t1]
L2 = count[t2] * count[i12,t2]/count[t2] * count[i23,t2]/count[t2] * count[i31,t2]/count[t2]
L3 = count[t3] * count[i12,t3]/count[t3] * count[i23,t3]/count[t2] * count[i31,t3]/count[t3]
scoringのとき、欠損値は単純に無視されます。欠損したpredictorフィールドと関係する条件確率(conditional-probability)の要素は省略されます。例えば、欠損値を持つ入力ベクトル(-,i23,-)を仮定すると、クラスt1の確率は、次のように計算されます。
P(t1|-,i23,-) = L1 / (L1 + L2 + L3)
但し
L1 = count[t1] * count[i23,t1]/count[t1]
L2 = count[t2] * count[i23,t2]/count[t2]
L3 = count[t3] * count[i23,t3]/count[t2]
DTD
<!ELEMENT NaiveBayesModel (Extension*, MiningSchema, ModelStats?, BayesInputs, BayesOutput, Extension* )> <!ATTLIST NaiveBayesModel modelName CDATA #IMPLIED threshold %REAL-NUMBER; #REQUIRED functionName %MINING-FUNCTION; #REQUIRED algorithmName CDATA #IMPLIED > <!ELEMENT BayesInputs ( BayesInput+ )> |
Bayes入力
各BayesInputには、そのフィールドの離散値と目標フィールドの離散値とを対とするようなカウントも含まれます。連続(continous)フィールドに対する各BayesInputは、どのように連続値が離散的なbinsのようにエンコードされるかをも定義します。( 離散化(Discretization)はDerivedFieldを使用して、実行されます;DerivedFieldに対する離散(Discretize)写像だけがここで呼び出されることができる。)
<!ELEMENT BayesInput ( Extension*, DerivedField?, PairCounts+ ) > <!ATTLIST BayesInput fieldName CDATA #REQUIRED > |
Bayes出力
BayesOutputは、目標フィールドの値に関連したカウントを含んでいます。
<!ELEMENT BayesOutput ( Extension*, TargetValueCounts )> <!ATTLIST BayesOutput fieldName CDATA #REQUIRED > |
ペアカウント(Pair Counts)
PairCountsは、フィールドIiの離散値Iijに対して、目標フィールドの各々の値と値Iijを対にするTargetValueCountsをリストします。
<!ELEMENT PairCounts ( TargetValueCounts )> <!ATTLIST PairCounts value CDATA #REQUIRED > |
目標値カウント(Target Value Counts)
TargetValueCountsは、目標フィールドの各値に関連したカウントをリストします。しかしながら、そのカウントが0であるTargetValueCountは省略することが出来ます。
BayesOutputの中では、TargetValueCountsは、各々の目標値の出現の合計カウントをリストします。
PairCountsの中では、TargetValueCountsは、各々の目標値に対して、その目標値と特定の入力離散値の同時発生(joint occurrences)のカウントをリストします。
<!ELEMENT TargetValueCounts ( TargetValueCount+ )> <!ELEMENT TargetValueCount EMPTY > <!ATTLIST TargetValueCount value CDATA #REQUIRED count %REAL-NUMBER; #REQUIRED > |
モデル例
<?xml version="1.0" ?> <PMML version="2.0"> <Header copyright="Copyright (c) 2001, DMG.org"/> <DataDictionary numberOfFields="5"> <DataField name="gender" optype="categorical"> <Value value="female"/> <Value value= "male"/> </DataField> <DataField name="no of claims" optype="categorical"> <Value value= "0"/> <Value value= "1"/> <Value value= "2"/> <Value value=">2"/> </DataField> <DataField name="domicile" optype="categorical"> <Value value="suburban"/> <Value value= "urban"/> <Value value= "rural"/> </DataField> <DataField name="age of car" optype="continuous"/> <DataField name="amount of claims" optype="categorical"> <Value value= "100"/> <Value value= "500"/> <Value value= "1000"/> <Value value= "5000"/> <Value value="10000"/> </DataField> </DataDictionary> <NaiveBayesModel modelName="NaiveBayes Insurance" functionName="classification" threshold="0.001"> <MiningSchema> <MiningField name="gender"/> <MiningField name="no of claims"/> <MiningField name="domicile"/> <MiningField name="age of car"/> <MiningField name="amount of claims" usageType="predicted"/> </MiningSchema> <BayesInputs> <BayesInput fieldName="gender"> <PairCounts value="male"> <TargetValueCounts> <TargetValueCount value= "100" count="4273"/> <TargetValueCount value= "500" count="1321"/> <TargetValueCount value= "1000" count= "780"/> <TargetValueCount value= "5000" count= "405"/> <TargetValueCount value="10000" count= "42"/> </TargetValueCounts> </PairCounts> <PairCounts value="female"> <TargetValueCounts> <TargetValueCount value= "100" count="4325"/> <TargetValueCount value= "500" count="1212"/> <TargetValueCount value= "1000" count= "742"/> <TargetValueCount value= "5000" count= "292"/> <TargetValueCount value="10000" count= "48"/> </TargetValueCounts> </PairCounts> </BayesInput> <BayesInput fieldName="no of claims"> <PairCounts value="0"> <TargetValueCounts> <TargetValueCount value= "100" count="4698"/> <TargetValueCount value= "500" count= "623"/> <TargetValueCount value= "1000" count="1259"/> <TargetValueCount value= "5000" count= "550"/> <TargetValueCount value="10000" count= "40"/> </TargetValueCounts> </PairCounts> <PairCounts value="1"> <TargetValueCounts> <TargetValueCount value= "100" count="3526"/> <TargetValueCount value= "500" count="1798"/> <TargetValueCount value= "1000" count= "227"/> <TargetValueCount value= "5000" count= "152"/> <TargetValueCount value="10000" count= "40"/> </TargetValueCounts> </PairCounts> <PairCounts value="2"> <TargetValueCounts> <TargetValueCount value= "100" count="225"/> <TargetValueCount value= "500" count= "10"/> <TargetValueCount value= "1000" count= "9"/> <TargetValueCount value= "5000" count= "0"/> <TargetValueCount value="10000" count= "10"/> </TargetValueCounts> </PairCounts> <PairCounts value=">2"> <TargetValueCounts> <TargetValueCount value= "100" count="112"/> <TargetValueCount value= "500" count= "5"/> <TargetValueCount value= "1000" count= "1"/> <TargetValueCount value= "5000" count= "1"/> <TargetValueCount value="10000" count= "8"/> </TargetValueCounts> </PairCounts> </BayesInput> <BayesInput fieldName="domicile"> <PairCounts value="suburban"> <TargetValueCounts> <TargetValueCount value= "100" count="2536"/> <TargetValueCount value= "500" count= "165"/> <TargetValueCount value= "1000" count= "516"/> <TargetValueCount value= "5000" count= "290"/> <TargetValueCount value="10000" count= "42"/> </TargetValueCounts> </PairCounts> <PairCounts value="urban"> <TargetValueCounts> <TargetValueCount value= "100" count="1679"/> <TargetValueCount value= "500" count= "792"/> <TargetValueCount value= "1000" count= "511"/> <TargetValueCount value= "5000" count= "259"/> <TargetValueCount value="10000" count= "30"/> </TargetValueCounts> </PairCounts> <PairCounts value="rural"> <TargetValueCounts> <TargetValueCount value= "100" count="2512"/> <TargetValueCount value= "500" count="1013"/> <TargetValueCount value= "1000" count= "442"/> <TargetValueCount value= "5000" count= "137"/> <TargetValueCount value="10000" count= "21"/> </TargetValueCounts> </PairCounts> </BayesInput> <BayesInput fieldName="age of car"> <DerivedField> <Discretize field="age of car"> <DiscretizeBin binValue="0"> <Interval closure="closedOpen" leftMargin="0" rightMargin="1"/> </DiscretizeBin> <DiscretizeBin binValue="1"> <Interval closure="closedOpen" leftMargin="1" rightMargin="5"/> </DiscretizeBin> <DiscretizeBin binValue="2"> <Interval closure="closedOpen" leftMargin="5"/> </DiscretizeBin> </Discretize> </DerivedField> <PairCounts value="0"> <TargetValueCounts> <TargetValueCount value= "100" count="927"/> <TargetValueCount value= "500" count="183"/> <TargetValueCount value= "1000" count="221"/> <TargetValueCount value= "5000" count= "50"/> <TargetValueCount value="10000" count= "10"/> </TargetValueCounts> </PairCounts> <PairCounts value="1"> <TargetValueCounts> <TargetValueCount value= "100" count="830"/> <TargetValueCount value= "500" count="182"/> <TargetValueCount value= "1000" count= "51"/> <TargetValueCount value= "5000" count= "26"/> <TargetValueCount value="10000" count= "6"/> </TargetValueCounts> </PairCounts> <PairCounts value="2"> <TargetValueCounts> <TargetValueCount value= "100" count="6251"/> <TargetValueCount value= "500" count="1901"/> <TargetValueCount value= "1000" count= "919"/> <TargetValueCount value= "5000" count= "623"/> <TargetValueCount value="10000" count= "71"/> </TargetValueCounts> </PairCounts> </BayesInput> </BayesInputs> <BayesOutput fieldName="amount of claims"> <TargetValueCounts> <TargetValueCount value= "100" count="8723"/> <TargetValueCount value= "500" count="2557"/> <TargetValueCount value= "1000" count="1530"/> <TargetValueCount value= "5000" count= "709"/> <TargetValueCount value="10000" count= "100"/> </TargetValueCounts> </BayesOutput> </NaiveBayesModel> </PMML> |
Scoring手続きの例
入力ベクトル(gender="male", no of claims = "2", domicile= (missing), age of car = "1")を仮定すると、クラス「1000」に対する確率は次のように計算される。
P("1000"| "male", "2", -,"1" ) = L2 / (L0 + L1 + L2 + L3 + L4)
但し
L0 = 8723 * 4273/8723 * 225/8723 * 830/8723
L1 = 2557 * 1321/2557 * 10/2557 * 182/2557
L2 = 1530 * 780/1530 * 9/1530 * 51/1530
L3 = 709 * 405/709 * .001 * 26/709
L4 = 100 * 42/100 * 10/100 * 6/100