5. こんなデータが取れました
ユーザーの行動と購入サービス (学習データ)
リファラー 住所 FAQ読? 見たページ数 購入サービス
Slashdot USA Yes 18 None
Google France Yes 23 Premium
Slashdot UK No 21 None
Digg USA Yes 24 Basic
Kiwitobes France Yes 23 Basic
???その他9件のユーザーのデータ
6. そこに新規無料ユーザー来たる!
リファラー 住所 FAQ読? 見たページ数 購入サービス
Slashdot USA Yes 18 None
Google France Yes 23 Premium
Slashdot UK No 21 None
Digg USA Yes 24 Basic
Kiwitobes France Yes 23 Basic
???その他9件のユーザーのデータ
リファラー 住所 FAQ読? 見たページ数 購入サービス
(直接) USA Yes 5 ???
ユーザーの行動と購入サービス (学習データ)
購入サービスのわからない新規無料ユーザーの行動(評価データ)
7. そこに新規無料ユーザー来たる!
リファラー 住所 FAQ読? 見たページ数 購入サービス
Slashdot USA Yes 18 None
Google France Yes 23 Premium
Slashdot UK No 21 None
Digg USA Yes 24 Basic
Kiwitobes France Yes 23 Basic
???その9件のユーザーのデータ
リファラー 住所 FAQ読? 見たページ数 購入サービス
(直接) USA Yes 5 ???
ユーザーの行動と購入サービス (学習データ)
購入サービスのわからない新規無料ユーザーの行動(評価データ)
サービスを購入するのか?
生データからは判断困難。
20. そもそも有効な分類条件とは?
リファラー 住所 FAQ読? 見たページ数 購入サービス
Slashdot USA Yes 18 None
Google France Yes 23 Basic
Slashdot UK No 21 None
Digg USA Yes 24 Basic
Kiwitobes France Yes 23 Basic
21. そもそも有効な分類条件とは?
リファラー 住所 FAQ読? 見たページ数 購入サービス
Slashdot USA Yes 18 None
Google France Yes 23 Basic
Slashdot UK No 21 None
Digg USA Yes 24 Basic
Kiwitobes France Yes 23 Basic
address = USA ? page >= 23 ?
None : 2 Basic : 3None : 1
Basic : 2
None : 1
Basic : 1
no yes no yesどっち?
22. そもそも有効な分類条件とは?
リファラー 住所 FAQ読? 見たページ数 購入サービス
Slashdot USA Yes 18 None
Google France Yes 23 Basic
Slashdot UK No 21 None
Digg USA Yes 24 Basic
Kiwitobes France Yes 23 Basic
page >= 23 ?
None : 2 Basic : 3
no yes
こっち!
address = USA ?
None : 1
Basic : 2
None : 1
Basic : 1
no yes
購入サービスがよりきれいに
分類される条件の方が良い
40. 決定木の構築プログラム
def buildtree(rows,scoref=entropy):
if len(rows)==0: return decisionnode()
current_score=scoref(rows)
best_gain=0.0
best_criteria=None
best_sets=None
column_count=len(rows[0])-1
for col in range(0,column_count):
column_values={}
for row in rows:
column_values[row[col]]=1
###(続く)
分類前のエントロピー
( or ジニ不純度)
各説明変数に対するループ
41. 決定木の構築プログラム
###(続き)
for value in column_values.keys():
(set1,set2)=divideset(rows,col,value)
# Information gain
p=?oat(len(set1))/len(rows)
gain=current_score-p*scoref(set1)-(1-p)*scoref(set2)
if gain>best_gain and len(set1)>0 and len(set2)>0:
best_gain=gain
best_criteria=(col,value)
best_sets=(set1,set2)
if best_gain>0:
trueBranch=buildtree(best_sets[0])
falseBranch=buildtree(best_sets[1])
return decisionnode(col=best_criteria[0],value=best_criteria[1],
tb=trueBranch,fb=falseBranch)
else:
return decisionnode(results=uniquecounts(rows))
情報ゲイン
現ループの説明変数
が取り得る各値に対す
るループ
分類した真集合と偽集合に対
して再帰的に木を構築
部分木のルートノー
ド返却
帰結を返却
42. 構築した決定木による予測プログラム
def classify(observation,tree):
if tree.results!=None:
return tree.results
else:
v=observation[tree.col]
branch=None
if isinstance(v,int) or isinstance(v,?oat):
if v>=tree.value: branch=tree.tb
else: branch=tree.fb
else:
if v==tree.value: branch=tree.tb
else: branch=tree.fb
return classify(observation,branch)
葉に り着いたら、
帰結を返却する
再帰的に木を る