decision_tree decision_tree.ipynb
決定木を使ってアイリスデータを分類してみます。
基本手順
基本手順はsklearnや他の機械学習モジュールであるtensor flowなども全く一緒です。
- データの読み込み
- 訓練用データと検証用データに分割
- 機械学習モデルの定義とハイパーパラメータの設定
- 訓練
- 予測
- 性能評価
必要なモジュール
インストールしておきましょう。
$ pip install pydotplus
graphvizもインストールしておきましょう。
graphviz もインストールしておきます。別ページにしておきますので、予めやっておく必要があります。当ページの最後の方にも同じ内容を記載しておきます。
スクリプト
データの読み込み~訓練 までです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
# DecisionTreeClassifier # モジュール:サンプルデータ>訓練検証分割>モデル from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier # データのインスタンスを作成 iris = load_iris() # キーを確認 iris.keys() #dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename']) # input dataとtarget data として抽出する X, y = iris.data, iris.target # 訓練・検証データに分割する X_train, X_test, y_train, y_test = train_test_split(X, y ,test_size=0.3, random_state=0) # 決定木モデルのインスタンスを作成する tree = DecisionTreeClassifier(max_depth=10) # 訓練する tree.fit(X_train, y_train) ''' DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=3, max_features=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, presort=False, random_state=None, splitter='best') ''''' |
予測して、性能を評価します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
#予測する y_predicted = tree.predict(X_test) y_predicted # 正解率を算出する import pandas as pd df = pd.DataFrame(y_test,y_predicted)#, y_test, y_predicted) result = df.index == df[0] ''' array([ True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, True, True, True, True, True, True, True]) ''' score = sum(result)/len(result) ''' 0.9777777777777777 ''' score |
では、決定木を可視化してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
# 決定木の可視化 # $ pip install pydotplus from pydotplus import graph_from_dot_data from sklearn.tree import export_graphviz import os # dot形式データの抽出 dot_data = export_graphviz(tree, filled=True, rounded=True, class_names=['Setosa', 'Versicolor', 'Virginica'], feature_names=['Sepal Length', 'Sepal Width', 'Petal Length', 'Petal Width'], out_file=None) # 決定木のプロット # グラフのインスタンスを作成 graph = graph_from_dot_data(dot_data) '''graphvizのインストール https://graphviz.gitlab.io/_pages/Download/Download_windows.html graphviz-2.38.zip 展開して、C:\\Program Files (x86)\\graphviz-2.38\\release\\bin\\dot.exeになるようにgraphviz-2.38フォルダを移動する ''' #パスを通す graph.progs = {'dot': u'C:\\Program Files (x86)\\graphviz-2.38\\release\\bin\\dot.exe'} # treeグラフを保存する graph.write_png('tree.png') # treeグラフを描画する from IPython.display import Image Image(graph.create_png()) |
graph.write_png(‘tree.png’) で決定木のグラフはホームディレクトリに出力されていますので、眺めてみましょう。
graphvizのインストール
さて、これでうまく行かない人もいるのでしょうか。
上記スクリプトの中にも注意書きを書いていたのですが、graphvizを予めインストールしておく必要があります。
しかし、pip install graphvizしても
&pip install graphviz だけでは graph.write_png(‘tree.png’) の部分が実行されません。
|
<span class="ansi-red-intense-fg ansi-bold">InvocationException</span>: GraphViz's executable "C:\Program Files (x86)\graphviz-2.38\release\bin\dot.exe" is not a file or doesn't exist |
どうやらdot.exe にパスを通しなさいと警告がでるのですが、そもそもpip install された 先がわかりませんでした。作戦変更です。
graphviz 公式サイトからのインストール
graphvizの公式webサイト
https://graphviz.gitlab.io/_pages/Download/Download_windows.html
からgraphvizのインストール graphviz-2.38.zip をダウンロードして展開するとreleaseというフォルダが作成されます。
C:\\Program Files (x86)\\ の下に 新規でgraphviz-2.38フォルダを作成して、そのさらに下にreleaseフォルダを移動します。
結果、dot.exeが
C:\\Program Files (x86)\\graphviz-2.38\\release\\bin\\dot.exe
の位置になります。(インストーラーがなさそうなので、フォルダ移動だけです。)
システム環境変数の追加
ではパスを通しましょう。
windowsボタンをおして検索に「システム環境変数」と入れます。システムのプロパティが開くので、環境変数ボタンを押して、システム環境変数のpathを編集します。
新規ボタンを押して、さっきのdot.exeのパスである
C:\\Program Files (x86)\\graphviz-2.38\\release\\bin\\dot.exe
をコピペします。
これでgraphvizが使えるようになったと思います。
補足:graphviz のpipインストール ではだめです
|
(base) C:\Users\omoiy>pip install graphviz Collecting graphviz Downloading https://files.pythonhosted.org/packages/17/51/d6de512dbbbab95f0adb53fb2a4396b79722f7c3fbe8ecc2d8c6ab7de00a/graphviz-0.12-py2.py3-none-any.whl Installing collected packages: graphviz Successfully installed graphviz-0.12 |
なにやら graphviz-0.12 というバージョンがおかしなことになっているものが入ってきました・・・。
ということで、前述した公式サイトからダウンロードしてファイルを移動してパスを通して・・・という方法が良いのです。以上