今回はこの本の第七章の決定木です。
(クリックするとamazonに飛びます)
とうとう機械学習パートに入りました!
準備
import pandas as pd import numpy as np import Orange
結果の分岐を簡単に出力が可能なので、
Orangeで決定木を使ってみます。
(毎回Orangeを推している気がしてきた)
データの準備
cv = pd.read_csv("ch6_4_2.txt",sep=" ")
d21 d22 d23 d24 d25 d26 cv 0 1 0 1 1 0 1 1 1 0 1 0 1 1 0 0 2 1 0 1 0 1 1 1
前回使ったデータと同じ、
行動とコンバージョンのログデータですね。
sklearnで試してみる
from sklearn.tree import DecisionTreeClassifier clf = DecisionTreeClassifier() clf.fit(X=cv['d21,d22,d23,d24,d25,d26'.split(',')],y=cv['cv'])
一瞬ですね。
Orangeで試してみる
※以下はPython2環境です。
header = [Orange.feature.Discrete(h) for h in cv.columns] for h in header: h.add_value("1") h.add_value("0") domain = Orange.data.Domain(header) func = lambda x:map(str,x) cv2 = Orange.data.Table(domain,map(func,np.array(cv)))
こちらも前回と同じく、Orange用にデータを準備します。
Discreteのdomainを作り、
カテゴリーを用意しておきます。
学習と出力
learner = Orange.classification.tree.TreeLearner() learner.max_depth = 3#深さを3層目まで learner.simple_first = True#単一ノードから並べる tree_classifier = learner(cv2)
データを与えて、学習させるだけです。
結果をツリー状にして見てみます。
print tree_classifier
d21=1 | d22=1 | | d24=1: 1 (75.00%) | | d24=0: 0 (100.00%) | d22=0 | | d24=1: 1 (88.68%) | | d24=0: 1 (100.00%) d21=0 | d26=1 | | d22=1: 0 (90.00%) | | d22=0: 1 (100.00%) | d26=0 | | d25=1: 0 (100.00%) | | d25=0: 0 (80.00%)
こんな感じ。
今回は前回の知識で大分楽にできました。
Orangeの扱いにも慣れてきました。
前回記事はこちら。