LoginSignup
10

More than 5 years have passed since last update.

scikit-learnで決定木の作成

Last updated at Posted at 2014-06-30

Wekaを使って決定木を作っていたのですが,データをarffにするのがめんどくさくて
Pythonの機械学習ライブラリscikit-learnで決定木を作成してみました.
使ってみたかったし
scikit-learnのインストールは他のWebで丁寧に教えてくれます

決定木のオブジェクト自体は結構簡単にできます.
Graphvizはbrewでinstallしましょう(Mac)
pyparsing と呼ばれるライブラリが新しくなってしまっているので
描画したいときは

sudo pip install -U pydot pyparsing==1.5.7

で,ダウングレードしてください
Windowsはわからない(小声)

tree_ex.py
#-*-coding:utf-8 -*-

# Null値は使えない → どうしよう?
# yes,noは1,-1
# 文字は使えない
from sklearn import tree
from sklearn.externals.six import StringIO
import pydot

if __name__ == '__main__':

    X = [
        [0,1],
        [0,-1],
        [1,1]
        ]
    Y = [1,2,3] #上から順に対応している
    clf = tree.DecisionTreeClassifier()
    clf = clf.fit(X,Y) # これで決定木オブジェクト完成

    #描画のためのおまじない
    dot_data = StringIO()
    tree.export_graphviz(clf,out_file = dot_data)
    graph = pydot.graph_from_dot_data(dot_data.getvalue())
    graph.write_pdf("tree_ex.pdf")

    #pre = clf.predict([0,1])
    #print pre #結果は1

X がデータで,Yが各データのラベルになっています.
fit関数でXとYをマッスルドッキングしてます(多分)

fit関数を適用した時点で,clfが決定木オブジェクト兼分類器になっているので
コメントアウトしてあるpredict関数で新しいデータがどのクラスに属するか分類できます.

あとはpydotを呼び出して描画するおまじない,,,のはず

上の描画結果はこんな感じ

tree_ex.png

Wekaの決定木が見づらくてPythonで決定木を作ろうとしたらこうなりました.
決定木作成自体はとても簡単です.
見やすくはあるのですが

・分岐条件が出てない(実力不足で出せない)

・1項目に1,2,3種類の解答があるアンケートは振り分けられない(yes,noは[1,-1]で実現可)

・Null値・文字列を受け付けない

など,今のところWekaのほうが使いやすい気がします.
引数のオプションつければよくなるんでしょうか...

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10