この記事では、Pythonライブラリ「scikit-learn」を用いて、決定木分析で生成た学習ファイルを読み込んで使用する方法について解説します。
決定木分析とは
決定木分析 (Decision Tree Analysis)とは、決定木と呼ばれるデータ構造を用いて分類や回帰を行う学習手法です。
アルゴリズムがシンプルで、学習結果を可視化たり、事前にデータを正規化する手間を省けるといった利点があります。
決定木分析はCART法ともいいます。
【詳細】決定木分析のアルゴリズム(分類・回帰・木構造)
今回は、Python言語とscikit-learnモジュールで決定木分析で実装してきます。
sklearn.tree.DecisionTreeClassifier クラス
scikit-learnでは、sklearn.tree.DecisionTreeClassifierクラスを使うことで決定木分析を実装できます。
その使い方は下記の通りです。
書式
sklearn.tree.DecisionTreeClassifier(criterion='gini', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, class_weight=None, presort=False)
※各パラメータに設定されてる値(=の後)はデフォルト値
パラメータ | 内容 |
---|---|
criterion | ジニ係数「gini」か情報量「entropy」のどちらで分割するかを指定 |
splitter | 各ノードの分割を「best (最適)」と「random (ランダム最適)」のどちらで行うか選択 |
max_features | 最適な分割を探索する際に用いる特徴数の最大値 |
max_depth | 決定木の深さの最大値 |
min_samples_split | サンプルを枝に分割する数の最小値 |
min_samples_leaf | サンプル1つが属する葉の数の最小値 |
min_weight_fraction_leaf | 1つの葉に属する必要のあるサンプルの割合の最小値 |
max_leaf_nodes | 作成する葉の数の最大値(指定した場合max_depthは無効化) |
class_weight | 各説明変数の重み |
random_state | 乱数のシードを指定(指定しない場合はnp.randomを利用) |
presort | 高速化の目的で事前に入力データのソートを行うかどうか |
【参考文献】 http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html
今回は、学習ファイルを読み込んで使用してみました。
(sklearn.externals.joblib.dumpを使います)
ソースコード
サンプルプログラムのソースコードです。
学習
# -*- coding: utf-8 -*- import pandas as pd from sklearn import tree from sklearn.externals import joblib def main(): # CSVファイルを取得 data = pd.read_csv("data.csv", sep=",") # 決定木の分類器を生成 clf = tree.DecisionTreeClassifier() # 分類器にサンプルデータを入れて学習(説明変数はx1,x2, 目的変数はx3) clf.fit(data[['x1', 'x2']], data['x3']) # 学習した分類器で予測 pred = clf.predict(data[['x1', 'x2']]) # 予測結果を表示 print (pred) # 1.0 # 識別率を表示 joblib.dump(clf, 'tree.learn') if __name__ == "__main__": main()
data.csv
x1,x2,x3 45,17.5,30 38,17.0,25 41,18.5,20 34,18.5,30 59,16.0,45 47,19.0,35 35,19.5,25 43,16.0,35 54,18.0,35 52,19.0,40
学習済みファイル
学習済みファイルを読み込み
# -*- coding: utf-8 -*- import pandas as pd from sklearn import tree from sklearn.externals import joblib def main(): # CSVファイルを取得 data = pd.read_csv("data.csv", sep=",") # 学習済みファイルの読み込み clf = joblib.load('tree.learn') # 学習した分類器で予測 pred = clf.predict(data[['x1', 'x2']]) # 予測結果を表示 print (pred) # 1.0 if __name__ == "__main__": main()
– | 関連記事 |
---|---|
1 | ■Scikit-learn入門・使い方 |
2 | ■Scikit-learnをインストールする方法 |
3 | ■Python入門 基本文法 |
コメント
「【Scikit-learn】決定木分析の学習ファイルを読み込む」のプログラムが、
「【Scikit-learn】決定木分析で学習したモデルを出力・保存」と
完全に同一になっているのですが……。
※nozomu様
コメントありがとうございます。
ご指摘どおり読み込むコードを掲載し忘れておりましたので
修正いたしました。