1. ホーム
  2. のらマネージャーのブログ
  3. PMML日本語化

PMML日本語化

PMML日本語化はこちらに移行しました。

2011年12月30日 11:27

データマイニング用のXMLであるPMMLの日本語化をフナハシドットコムで行っていましたが、こちらに移行しました。
ご利用の方、またご利用中でつながらなくて困っている方は、こちらのURLをご利用ください。

旧URL:
http://funahasi.com/pmml/

新URL:
http://www.ailink-web.co.jp/managerblog/pmml/

以上、よろしくお願い申し上げます。

PMML対応製品

2003年7月 7日 14:42

2004.2.21現在

公表\資料ベースでの確認です。PMMLの学習にお役立て下さい。他の対応製品情報や、実製品での確認情報等もメールでお寄せ下さい。

DB2 Intelligent Miner (日本語)
DB2に統合されているデータマイニング製品。関連製品群と組み合わせて利用も出来る。また、PMMLを活用した導入時例も紹介されている。

SPSS Clementine 7.1 (日本語)
実績あるClementineの最新版。今まで数値データの取り扱いが主だったClementineに加え、テキストデータを扱うText Mining for Clementineが加わっている。

CART 5.0 Pro (日本語)
決定木モデルによる解析ツールとして、多くのユーザーから指示されているCARTシリーズ。様々な拡張を桑江、より力強い解析が可能\になっている。

OLE DB for Data Mining(英語)
英語版という表\記をしているが、資料が英語版しか見当たらなかっただけ。OLEでの拡張ということで、事実上、MS SQL Serverのマイニング関連製品すべてでPMMLに対応しているといえる。

SAS Enterprise Miner(英語)
IBMとの提携というところでPMML対応をしているそうである。ただ、同名製品の日本語版の公表\資料では、PMML対応の記述がないが、おそらく対応していると思われる。

Oracle9i Data Mining (英語)
最大のDBMSベンダー、オラクルの9iのパーツの一個。これも、英語サイトではPMML対応とされている、日本語サイトでは同名製品は紹介されていないが、ドキュメントを見る限りでは素朴ベイズもで以外に関して、利用が可能\。

musashi-1.0.3 (日本語)
オープンソ\ースのデータマイニングツール。決定木に関するPMMLに対応。LinuxやBSD等のユーザーは注目。

Sequence Rules

2003年7月 5日 14:40

基礎的なデータ・モデルは、シーケンス・オブジェクトから成ります。シーケンス・オブジェクトは、それによって引き起こされる事象の数をもつ「プライマリー・キー(主キー)」によって識別され、「セカンダリー・キー」によって定義される。各々の事象は、順序付けられたアイテムの集合からなります。「順序フィールド(Order Field)」は、属性名の形式においてオプションのqualifierで、事象内のアイテムの順序を定義する。

SequenceModel

シーケンスマイニングモデルはいくつかの大きなパーツから成ります:


<!ELEMENT SequenceModel (Extension*, MiningSchema, Item*, Itemset*, 
			SetPredicate*, Sequence+, 
			SequenceRule*, Extension*)>
<!ATTLIST SequenceModel
  modelName 				CDATA 		#IMPLIED
  functionName 				%MINING-FUNCTION; #REQUIRED
  algorithmName 			CDATA 		#IMPLIED
  numberOfTransactions 			%INT-NUMBER; 	#REQUIRED
  maxNumberOfItemsPerTransaction 	%INT-NUMBER; 	#IMPLIED
  avgNumberOfItemsPerTransaction 	%REAL-NUMBER; 	#IMPLIED
  minimumSupport 			%REAL-NUMBER; 	#REQUIRED
  minimumConfidence 			%REAL-NUMBER; 	#REQUIRED
  lengthLimit 				%INT-NUMBER; 	#IMPLIED
  numberOfItems 			%INT-NUMBER; 	#REQUIRED
  numberOfSets 				%INT-NUMBER; 	#REQUIRED
  numberOfSequences 			%INT-NUMBER; 	#REQUIRED
  numberOfRules 			%INT-NUMBER; 	#REQUIRED
  timeWindowWidth 			%INT-NUMBER; 	#IMPLIED
  minimumTime 				%INT-NUMBER; 	#IMPLIED
  maximumTime 				%INT-NUMBER; 	#IMPLIED
>

Extension(拡張)は、モデルの内容を拡張する能\力を提供します。

MiningSchemaは、このモデルの中で使用されるフィールドをリストします。これは、データ・ディクショナリーおよびtransformation dictionaryに定義されるようなフィールドの部分集合です。transformation dictionary中のtransformationは、モデルで使う新しいフィールドを与えて、データ・ディクショナリー中のDataField値の一つに対して実行される。

ItemはAssociationモデルに定義されます。

ItemsetはAssociationモデルに定義されます。

SetPredicateは単純なブール表\現(simple boolean expressions)で述語の集合です。

Sequence(シーケンス)SetPredicatesかItemsetsの順序づけられたコレクションです。少なくとも1つのシーケンスがあるでしょう。

SequenceRuleは、2つのシーケンスの関係を記述します。

属性記述(Attribute description):

numberOfTransactions:データ中のオブジェクトの数。 (例えば一意の顧客あるいはビジターの数)

maxNumberOfItemsPerTransaction:オブジェクト当たり事象(events)(例えば訪問)の最大の数。

avgNumberOfItemsPerTransaction:オブジェクトを構\築する事象の平均数。

minimumSupport:シーケンスの発見に対する最小のサポート。

minimumConfidence:規則の発見に対する最小の確信(confidence)。

lengthLimit:発見されるシーケンスの最大の長さ。

numberOfItems:一意なアイテム(例えばサイト上のページ)の総数。

numberOfSets:集合の総数。

numberOfSequences:発見されたシーケンスの総数。

numberOfRules:発見された規則の総数。

timeWindowWidth:これはオブジェクトと関係するアイテムを離散事象へと分けるのに使われるでしょう。しかし、それは、分ける事象に対する明確なキーが存在しない場合のみである。二つの連続したアイテムは、同じ事象の一部と見なされるこの値より小さな、時間のギャップを持つべきである。

minimumTime:上に定義されるようなアイテム間の最小の時間。

maximumTime:上に定義されるようなアイテム間の最大の時間。

SetPredicate


<!ENTITY % ELEMENT-ID 	"CDATA">

<!ELEMENT SetPredicate ( %STRING-ARRAY; )>
<!ATTLIST SetPredicate
	id 		%ELEMENT-ID; 		#IMPLIED
	field 		%FIELD-NAME; 		#REQUIRED
	operator 	CDATA 			#FIXED "supersetOf"
>

<!ELEMENT ItemSetReference EMPTY>
<!ATTLIST ItemSetReference 
	itemSetId 	%ELEMENT-ID; 		#REQUIRED
>

SetPredicate要素はブール表\現から成ります。これは、フィールド、比較オペレーターおよび値から構\成されます。値(s)は、配列の形をして書かれるでしょう。

属性記述(Attribute description)

id:一意に述語集合を識別する要素ID。(setIdによってシーケンス中で参照される。)

field:述語ステートメントのsubject。通常、この名前は、TransformationDictionaryの中のDerivedField要素のうちの1つを参照します。

operator:述語ステートメントのsubjectと値の配列の間のassociation。

SetPredicateは2つの集合を比較し、一方で、SimpleSetPredicte(決定木モデルで定義されたように)が、一つの集合の中の単一の値のmembershipをチェックすることに注意しましょう。


デリミッター&タイム(Delimiter & Time)


<!ENTITY % DELIMITER   "( sameTimeWindow | acrossTimeWindows )">
<!ENTITY % GAP         "( true | false | unknown )">

<!ELEMENT Delimiter EMPTY>
<!ATTLIST Delimiter
  delimiter   		%DELIMITER; 	#REQUIRED
  gap         		%GAP;        	#REQUIRED
>

Delimiter(デリミッター)はシーケンスの2つの集合間の、あるいはSequenceRuleの中の2つのシーケンス間の分離です。

属性記述(Attribute description):

delimiter(デリミッター):このSetPredicateが、同じ事象もしくは時間間隔(time period)内で起こったかどうかを述べる。時間ウィンドウ(TimeWindow)(例えばセッション)によって前の(previous)ものと同じように定義される。

gap(ギャップ):現時点(this)と前の(previous)集合もしくはシーケンスとの間のSetPredicatesの可能\存在(possible existence)。Trueは、シーケンスの間のギャップを許す(未知のやり方で)、開いたシーケンスをあらわす。閉じたシーケンスにおいて、記述されている二つの集合もしくはシーケンスがデータ中の連続集合であることを示すことで、gapにはfalseがセットされる。


<!ELEMENT Time EMPTY>
<!ATTLIST Time
  min       %NUMBER;  #REQUIRED
  max       %NUMBER;  #REQUIRED
  mean      %NUMBER;  #IMPLIED
>

属性記述(Attribute description):

min:シーケンス中の集合の間(あるいは、規則中の前件(antecedent)シーケンスと後件(consequent)シーケンスの間)の最小の時間。

max:シーケンス中の集合の間(あるいは、規則中の前件(antecedent)シーケンスと後件(consequent)シーケンスの間)の最大の時間。

mean:シーケンス中の集合の間(あるいは、規則中の前件(antecedent)シーケンスと後件(consequent)シーケンスの間)の平均の時間。


Sequence(シーケンス)


<!ENTITY % FOLLOW_SET "(Delimiter, SetReference )" >

<!ELEMENT Sequence ( SetReference, (%FOLLOW_SET;)* )>
<!ATTLIST Sequence
  id               	%ELEMENT-ID;  	#REQUIRED
  numberOfSets      	%INT-NUMBER; 	#IMPLIED
  occurrence       	%INT-NUMBER; 	#IMPLIED
  support          	%REAL-NUMBER; 	#IMPLIED
>

各シーケンスはSetReferenceおよびオプションのFOLLOW_SET(s)から成ります。FOLLOW_SETはデリミッターによって先に来る別のSetReferenceです。

属性記述(Attribute description):

id:このシーケンスの一意なID。(seqIdによってSequenceRulesの中で参照される)。

numberOfSets:このシーケンス中のSetPredicatesおよび(または)ItemSetsの数。

occurrence:このシーケンスが真であるデータ中のオブジェクトの数。

support:このシーケンスが真であるデータ中のオブジェクトの数と、データ中の全オブジェクト数の比率。


<!ELEMENT SetReference EMPTY >
<!ATTLIST SetReference
	setId    	%ELEMENT-ID; 	#REQUIRED
>

SetReferenceは前に定義した集合を参照(もしくは指示)する。その集合は、SetPredicateあるいはItemset(それはItemRef要素を含むだろう)のいずれかになるだろう。

属性記述(Attribute description)

setId:SetPredicateかItemsetのid属性へのポインター。


シーケンス規則(Sequence Rules)


<!ELEMENT SequenceRule ( Extension*, AntecedentSequence, Delimiter, 
Time*, ConsequentSequence )>
<!ATTLIST SequenceRule
  id               %ELEMENT-ID;  #REQUIRED
  numberOfSets     %INT-NUMBER;  #REQUIRED
  occurrence       %INT-NUMBER;  #REQUIRED
  support          %REAL-NUMBER; #REQUIRED
  confidence       %REAL-NUMBER; #REQUIRED
>

SequenceRule(シーケンス規則)は、delimiter(デリミッター)とおそらくtime(時間)によって分けられる、前件シーケンスと後件シーケンスからなります。

属性記述(Attribute description):

id:このシーケンス規則の一意なID。

numberOfSets:前件および後件のシーケンスの両方の中の集合の総数。

occurrence:前提および必然のシーケンスが真であるデータ中のオブジェクトの数。

support:前提および必然のシーケンスが真であるデータ中のオブジェクトの数と、データ中のオブジェクトの総数の比率。

confidence:前件に続いて後件が起こる確率。シーケンスのoccurrenceの数を前件のoccurrenceの数で割ることで計算される。


前件&後件シーケンス(Antecedent & Consequent Sequences)


<!ENTITY % SEQUENCE "( SequenceReference, Time* )" >

<!ELEMENT SequenceReference EMPTY >
<!ATTLIST SequenceReference
  seqId    %ELEMENT-ID; #REQUIRED
>

<!ELEMENT AntecedentSequence (%SEQUENCE;) >
<!ELEMENT ConsequentSequence (%SEQUENCE;) >

属性記述(Attribute description):

seqId:前に定義されたシーケンスのid属性へのポインター。


下記の例は次のシナリオを表\わします:

{ index.html }から来る訪問者(Visitors)は(0.25のconfidenceで)次に行くでしょう:

同じ訪問中に{ offer.html, kdnuggets.com }を訪問し、他のサイトは訪れない;

二日以内に、彼らは、その間に他のサイトに立ち寄ることなく、{products.html}に戻ってくる;

前もって、少なくとも一つのサイトを訪れて、{ basket.html }を訪問する;

最後に、直接{ checkout.html }にいく。


<?xml version="1.0" ?>
<PMML version="2.0">
 <Header copyright="DMG.org" description="example model for sequences"/>
 <DataDictionary numberOfFields="4">
	<DataField name="visitor" optype="categorical"/>
	<DataField name="visit" optype="categorical"/>
	<DataField name="time" optype="categorical"/>
	<DataField name="page" optype="categorical"/>
 </DataDictionary>

 <TransformationDictionary>
	<DerivedField name="transaction"/>
	 <Aggregate field="page" function="multiset" groupField="visit"/>
	</DerivedField>
 </TransformationDictionary>

 <SequenceModel functionName="sequences"
	numberOfTransactions="100" minimumSupport="0.20"
	     minimumConfidence="0.25" numberOfItems="6"
	     numberOfSets="5" numberOfSequences="3" numberOfRules="1">

 <MiningSchema>
	<MiningField name="visitor" usageType="supplementary"/>
	<MiningField name="visit" usageType="active"/>
	<MiningField name="time" usageType="active">
	 <Extension name="unit" value="days"/>
	</MiningField>
	<MiningField name="page" usageType="active"/>
 </MiningSchema>

<!-- ========== Predicates ========== -->
<SetPredicate id="sp001" field="transaction" operator="supersetOf">
	<Array n="1" type="string"> index.html </Array>
</SetPredicate>

<SetPredicate id="sp002" field="transaction" operator="supersetOf">
	<Array n="2" type="string"> offer.html kdnuggets.com </Array>
</SetPredicate>

<SetPredicate id="sp003" field="transaction" operator="supersetOf">
	<Array n="1" type="string"> products.html </Array>
</SetPredicate>

<SetPredicate id="sp004" field="transaction" operator="supersetOf">
	<Array n="1" type="string"> basket.html </Array>
</SetPredicate>

<SetPredicate id="sp005" field="transaction" operator="supersetOf">
	<Array n="1" type="string"> checkout.html </Array>
</SetPredicate>

<!-- ========== Sequences ========== -->
<Sequence id="seq001" numberOfSets="1" occurrence="80" support="0.80">
	<SetReference setId="sp001"/>
</Sequence>

<Sequence id="seq002" numberOfSets="4" occurrence="40" support="0.40">
	<SetReference setId="sp002"/>
	<Delimiter delimiter="acrossTimeWindows" gap="false"/>
	<SetReference setId="sp003"/>
	<Delimiter delimiter="sameTimeWindow" gap="true"/>
	<SetReference setId="sp004"/>
	<Delimiter delimiter="sameTimeWindow" gap="false"/>
	<SetReference setId="sp005"/>
</Sequence>

<Sequence id="seq003" numberOfSets="5" occurrence="20" support="0.20">
	<SetReference setId="sp001"/>
	<Delimiter delimiter="sameTimeWindow" gap="unknown"/>
	<SetReference setId="sp002"/>
	<Delimiter delimiter="acrossTimeWindows" gap="false"/>
	<SetReference setId="sp003"/>
	<Delimiter delimiter="sameTimeWindow" gap="true"/>
	<SetReference setId="sp004"/>
	<Delimiter delimiter="sameTimeWindow" gap="false"/>
	<SetReference setId="sp005"/>
</Sequence>

<!-- ========== SequenceRules ========== -->
<SequenceRule id="rule001" numberOfSets="5" occurrence="20" 
		support="0.20" confidence="0.25">
	<Extension name="qWeight" value="0.5"/>
	<Extension name="attrWeight" value="0.5"/>
	<Extension name="seqWeight" value="0.5"/>

	<AntecedentSequence>
		<SequenceReference seqId="seq001"/>
	</AntecedentSequence>

	<Delimiter delimiter="sameTimeWindow" gap="unknown"/>
	<Time min="0" max="0"/>

	<ConsequentSequence>
		<SequenceReference seqId="seq002"/>
		<Time min="0" max="2"/> 
	<!-- time between "sp002" and "sp003" in sequence "seq002" -->
		<Time min="0" max="0"/>
	<!-- time between "sp003" and "sp004" in sequence "seq002" -->
		<Time min="0" max="0"/>
	<!-- time between "sp004" and "sp005" in sequence "seq002" -->
	</ConsequentSequence>

  </SequenceRule>

 </SequenceModel>
</PMML>

Naive Bayes Models

2003年7月 5日 14:37

素朴ベイズ は、一つ以上のpredictor(入力)フィールドによって与えられる証拠から、目標(出力)独立(independence)の値を予\測するために、条件付き独立(independence)の(「素朴な」)仮定と結び付けてベイズの定理を使います。

可能\な値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
t1t2t3...
count[t1]count[t2]count[t3]...
Input1 i11count[i11,t1]count[i11,t2]count[i11,t3]...
i12count[i12,t1]count[i12,t2]count[i12,t3]...
...............
Input2 i21count[i21,t1]count[i21,t2]count[i21,t3]...
i22count[i22,t1]count[i22,t2]count[i22,t3]...
i23count[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

Neural Network

2003年7月 5日 14:32

バックプロバゲーション(逆伝播)ニューラル・ネット・モデル

ニューラル・ネット・モデルの記述は、読み手が人工ニューラル・ネット技術についての一般的な知識を持っていると仮定します。ニューラル・ネットは1つ以上の入力ノードおよび1つ以上のニューロンを持っています。あるニューロンの出力はネットワークの出力です。ネットワークは、ニューロンおよびそれらの接続、aka weightsによって定義されます。すべてのニューロンは層(layers)へ組織(organized)されます;層のシーケンスは、活性化(activation)が計算される順序を定義します。計算が次の層L+1に移る前に、ある層Lの中のニューロンのためのすべての出力活性(output activation)が評価されます。このことは、層L+iの中のニューロンの出力がL+i>Lとなる層Lにおける入力として使われるところの現在のネットワーク(recurrent networks)を許すことに気を付けなければならない。層中のニューロンに対する特定の評価順序(evaluation order)を定義しない。

各々のニューロンは1つ以上の入力値(それらの値はネットワークの繋がり(connection)を通じてやってくる。)を受け取り、ただ一つの出力値を送ります。あるニューロンに対して、すべての入って来る接続(incoming connections)は対応するNeuron(ニューロン)要素に含まれています。各接続Conは、それが来るノードのIDおよび重量を格納します。バイアス重量係数(bias weight coefficient)はNeuron(ニューロン)要素の属性として格納されるでしょう。

ネットワーク中のすべてのニューロンは同じ(デフォルトの)活性化関数(activation function)を持つと仮定されるが、それにもかかわらず、個々のニューロンはそれ自身の活性化とデフォルトに関係ないしきい値(threshold)をもつだろう。固定ニューロンjおよびWiがニューロンiからの接続についての重み付けをあらわすと仮定すると、下のように計算されます。

Z = Sum( Wi * output(i) ) + bias
output(j) = activation( Z )

活性化関数は次のとおりです:

threshold(しきい値):

activation(Z) = (Zがしきい値(threshold)より大きければ1、そうでなければ0)

logistic:

activation(Z) = 1 / (1 + exp(-Z))

tanh:

activation(Z) = (1-exp(-2Z)/(1+exp(-2Z))

identity(同一性):

activation(Z) = Z

softmax:

output(j) = exp ( Z_j )/(SUM_k exp(Z_k)) ただし、sumは同じcategorical出力フィールドに対応する出力ユニットすべてに対して取られる。

softmax活性化関数は出力層の中のニューロンのためだけに使用することができます。softmax活性化関数上の更なる背景(background)の理解のために、ニューラルネットのFAQやチュートリアルを参照してください。

DTD


<!ELEMENT NeuralNetwork (Extension*, MiningSchema, ModelStats?, 
			NeuralInputs, (NeuralLayer+), NeuralOutputs?,
			Extension*) >
<!ATTLIST NeuralNetwork
	modelName 		CDATA 			#IMPLIED
	functionName 		%MINING-FUNCTION; 	#REQUIRED
	algorithmName 		CDATA 			#IMPLIED
	activationFunction 	%ACTIVATION-FUNCTION 	#REQUIRED
	threshold 		%REAL-NUMBER; 		#IMPLIED
>

<!ELEMENT NeuralInputs ( Extension*, NeuralInput+ ) >
<!ELEMENT NeuralLayer ( Extension*, Neuron+ ) >
<!ATTLIST NeuralLayer
	numberOfNeurons 	%INT-NUMBER; 		#IMPLIED
	activationFunction 	%ACTIVATION-FUNCTION; 	#IMPLIED
>
<!ELEMENT NeuralOutputs ( Extension*, 
NeuralOutput+ ) >

NeuralInputは、ニューラル・ネットの中で値を処理することができるように入力フィールドがどのように正規化されるかを定義します。例えば、文字列値は数値としてコード化されなければなりません。

NeuralOutputは、ニューラル・ネットの出力がどのように解釈されるべきかを定義します。


<!ENTITY % ACTIVATION-FUNCTION "(threshold | logistic | tanh 
	| identity | softmax)" >

<!ENTITY % NN-NEURON-ID "CDATA" >
<!ENTITY % NN-NEURON-IDREF "CDATA" >

NN-NEURON-IDはニューロンを識別する単なる文字列です。その文字列はXML-IDである必要はありません。なぜなら、PMMLドキュメントは、違ったモデル中のニューロンが同じidentifierを持ちうる複数のネットワークモデルを持ちうるからです。しかしながら、一つのモデルの範囲内で、すべてのニューロンは一意のidentifierを持たなければなりません。

ニューラル・ネット入力ニューロン

入力ニューロンは、入力フィールドに対して正規化された値を表\わします。数の入力フィールドは通常、一つの入力ニューロンに写像されます。他方、categoricalな入力フィールドは通常、いくつかのfan-out関数を用いて、入力ニューロンの集合へと写像されます。要素NormContinuosおよびNormDiscreteは、正規化に対する個別のDTDサブセットで、定義されます。要素DerivedFieldはこれらのtransformation用の一般的コンテナーです。


<!ELEMENT NeuralInput (Extension*, DerivedField) >

<!ATTLIST NeuralInput
	id 		%NN-NEURON-ID; 			#REQUIRED
>

Restrictions(制限):数の入力フィールドは、入力層に二度以上現われてはなりません。同様に、入力値を共に持つ対のcategoricalな入力フィールドは、入力層に二度以上現われてはなりません。

ニューラル・ネット・ニューロン


<!ELEMENT Neuron (Extension*, Con+) >

<!ATTLIST Neuron
	id 			%NN-NEURON-ID; 		#REQUIRED
	bias 			%REAL-NUMBER; 		#IMPLIED
	activationFunction	%ACTIVATION-FUNCTION; 	#IMPLIED
	threshold 		%REAL-NUMBER; 		#IMPLIED
>

ニューロンは、すべての層において一意であるべきidentifierを含んでいます、その属性thresholdはデフォルト値0を持っています。activationFunctionが与えられない場合、NeuralNetwork要素のデフォルトのactivationFunctionが適用されます。属性「bias」は、暗黙的にユニットの値が1.0で、重さが「bias」の値であるバイアスユニットとの接続を定義しています。

ニューラルネット・ノード間の重み付けされた接続は、Con要素によって表\わされます。


<!ELEMENT Con (Extension*) >
<!ATTLIST Con
	from 			%NN-NEURON-IDREF; 	#REQUIRED
	weight 			%REAL-NUMBER; 		#REQUIRED
>

Con要素は常にニューロンの一部です。それらは、その親元素に入る接続を定義します。「from」によって識別されたニューロンは、任意の層の一部でしょう。

すべてのノードのNN-NEURON-IDは、NeuralInput と Neuron nodesの和集合を通じて(across)、一意でなければならない。 接続の「from」属性とNeuralOutputsはこれらのidentifiersを参照します。

ニューラル・ネット出力ニューロン

入力ニューロンと平行して、正規化することで入力フィールドと接続される出力ニューロンが存在します。入力ニューロンの活性化が、対応する入力フィールドの値によって定義されている一方、出力ニューロンの活性化は活性化関数によって計算されます。したがって、出力ニューロンは「Neuron」によって、定義されます。監督された学習(supervised learning)をもつネットワークでは、出力ニューロンの計算による活性が、対応する目標フィールドの正規化された値と比較されます;これらの値はしばしば「教師値(teach values)」呼ばれます。ニューロンの活性化と正規化された目標フィールドの間の差は、予\測エラー(prediction error)を決定します。目標フィールドのための正規化のscoringのために、出力ニューロン中の予\測された値を非正規化(正規化を元に戻すこと:舟)するために使用されます。したがって、出力ニューロンを表\現する「Neuron」のそれぞれの実例は正規化されたフィールドに対して付加的に接続されています。ニューロン活性化を元々の領域の値へと写像するために、scoringの手続きに正規化の逆を適応しなければならないことに注意して下さい。

ネットワークの出力にニューロンの出力を接続しなさい。


<!ELEMENT NeuralOutput ( Extension*, DerivedField) >

<!ATTLIST NeuralOutput
	outputNeuron 		%NN-NEURON-IDREF; 	#REQUIRED
>

逆伝播(back propagation)をもつニューラルの値予\測については、出力層が単一のニューロンを含んでいます。これは予\測された値を与えて、逆正規化されます。

逆伝播をもつニューラルの分類については、出力層が1つ以上のニューロンを含んでいます。最大の活性化をもつニューロンが予\測されるクラス・ラベルを決定します。最大の活性化をもつ一意のニューロンがない場合は、予\測値は未定義です。

適合

・レベルNからレベルM(M<=N)への逆方向の接続や隣接していない(non-adjacent)層間の接続は、コアなものではない。

・ニューロン毎のactivationFunctionに対する変数値は、コアなものではない。

モデル例


<?xml version="1.0" ?>
<PMML version="2.0">
	<Header copyright="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=" 3"/>
			<Value value=" > 3"/>
			<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="continuous"/>
	</DataDictionary>
	<NeuralNetwork modelName="Neural Insurance"
		functionName="regression"
		activationFunction="logistic">
	<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>
	<NeuralInputs>
		<NeuralInput id="0">
			<DerivedField>
				<NormContinuous field="age of car">
					<LinearNorm orig="0.01" norm="0"/>
					<LinearNorm orig="3.07897" norm="0.5"/>
					<LinearNorm orig="11.44" norm="1"/>
				</NormContinuous>
			</DerivedField>
		</NeuralInput>
		<NeuralInput id="1">
			<DerivedField>
				<NormDiscrete field="gender" value="male"/>
			</DerivedField>
		</NeuralInput>
		<NeuralInput id="2">
			<DerivedField>
				<NormDiscrete field="no of claims" value="0"/>
			</DerivedField>
		</NeuralInput>
		<NeuralInput id="3">
			<DerivedField>
				<NormDiscrete field="no of claims" value="1"/>
			</DerivedField>
		</NeuralInput>
		<NeuralInput id="4">
			<DerivedField>
				<NormDiscrete field="no of claims" value="3"/>
			</DerivedField>
		</NeuralInput>
		<NeuralInput id="5">
			<DerivedField>
				<NormDiscrete field="no of claims" value="3"/>
			</DerivedField>
		</NeuralInput>
		<NeuralInput id="6">
			<DerivedField>
				<NormDiscrete field="no of claims" value="2"/>
			</DerivedField>
		</NeuralInput>
		<NeuralInput id="7">
			<DerivedField>
				<NormDiscrete field="domicile" value="suburban"/>
			</DerivedField>
		</NeuralInput>
		<NeuralInput id="8">
			<DerivedField>
				<NormDiscrete field="domicile" value="urban"/>
			</DerivedField>
		</NeuralInput>
		<NeuralInput id="9">
			<DerivedField>
				<NormDiscrete field="domicile" value="rural"/>
			</DerivedField>
		</NeuralInput>
	</NeuralInputs>
	<NeuralLayer>
		<Neuron id="10">
			<Con from="0" weight="-2.08148"/>
			<Con from="1" weight="3.69657"/>
			<Con from="2" weight="-1.89986"/>
			<Con from="3" weight="5.61779"/>
			<Con from="4" weight="0.427558"/>
			<Con from="5" weight="-1.25971"/>
			<Con from="6" weight="-6.55549"/>
			<Con from="7" weight="-4.62773"/>
			<Con from="8" weight="1.97525"/>
			<Con from="9" weight="-1.0962"/>
		</Neuron>
		<Neuron id="11">
			<Con from="0" weight="-0.698997"/>
			<Con from="1" weight="-3.54943"/>
			<Con from="2" weight="-3.29632"/>
			<Con from="3" weight="-1.20931"/>
			<Con from="4" weight="1.00497"/>
			<Con from="5" weight="0.033502"/>
			<Con from="6" weight="1.12016"/>
			<Con from="7" weight="0.523197"/>
			<Con from="8" weight="-2.96135"/>
			<Con from="9" weight="-0.398626"/>
		</Neuron>
		<Neuron id="12">
			<Con from="0" weight="0.904057"/>
			<Con from="1" weight="1.75084"/>
			<Con from="2" weight="2.51658"/>
			<Con from="3" weight="-0.151895"/>
			<Con from="4" weight="-2.88008"/>
			<Con from="5" weight="0.920063"/>
			<Con from="6" weight="-3.30742"/>
			<Con from="7" weight="-1.72251"/>
			<Con from="8" weight="-1.13156"/>
			<Con from="9" weight="-0.758563"/>
		</Neuron>
	</NeuralLayer>
	<NeuralLayer>
		<Neuron id="13">
			<Con from="10" weight="0.76617"/>
			<Con from="11" weight="-1.5065"/>
			<Con from="12" weight="0.999797"/>
		</Neuron>
	</NeuralLayer>
	<NeuralOutputs>
		<NeuralOutput outputNeuron="13">
			<DerivedField>
				<NormContinuous field="amount of claims">
				<LinearNorm orig="0" norm="0.1"/>
				<LinearNorm orig="1291.68" norm="0.5"/>
				<LinearNorm orig="5327.26" norm="0.9"/>
				</NormContinuous>
			</DerivedField>
		</NeuralOutput>
		</NeuralOutputs>
	</NeuralNetwork>
</PMML>

アイリンクへのお問い合わせ

お問い合わせメールフォームはこちら

2016年12月移転 北海道旭川市神楽1条7丁目4−8 お問合わせはメール・SNSアカウントで mail
  • twitter
  • facebook
  • google
  • noimage
  • noimage
  • noimage