あれもPython,これもPython

Pythonメモ※本サイトはアフィリエイトを利用しています

データサイエンスをPythonで試す(5_決定木)

今回はこの本の第七章の決定木です。
(クリックすると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の扱いにも慣れてきました。

前回記事はこちら。

esu-ko.hatenablog.com