- 追加された行はこの色です。
- 削除された行はこの色です。
*はじめに [#p849067f]
前回、Pythonのデータ分析ライブラリーであるpandas、機械学習ライブラリーであるscikit-learn、実行環境であるJupyter Notebookを用いて、決定木による分類を行いました。
-[[pandasとscikit-learnとJupyter Notebookで決定木を使う>/機械学習/pandasとscikit-learnとJupyter Notebookで決定木を使う]] - とうごろうぃき
しかしながら、実際のデータに対する分析では、訓練データからモデルを学習して、テストデータに対して予測をして終わり、ということにはなりません。
ここでは、決定木を用いて、もう少しまともな分析を行います。
環境やデータは前回と同じです。
* [#p2da3752]
*学習したモデルの評価 [#b48b97d6]
前回は、訓練データを用いて、学習したモデルのスコア(ここでは、平均正解率)を求めました。
実際の分析では、予測する対象は訓練データ以外のデータであるため、いくら訓練データに対して優れたモデルが学習できたとしても、それ以外のデータに対してうまく予測ができないと意味がありません。
そこで、訓練データを全て学習に使わずに、学習用データと検証用データに分割し、学習用データから学習したモデルの性能を検証用データで検証します。
sklearn.model_selectionクラスのtrain_test_split関数を用いて、訓練データを学習用データと検証用データに分割します。
#geshi(python){{
from sklearn.model_selection import train_test_split
X_train, X_valid, y_train, y_valid = \
train_test_split(X, y, test_size=0.2, random_state=0)
}}
ここでは、検証用データのサイズ (test_size) を20% (0.2) としています。
random_stateは、乱数生成器のシードを表します。
次のようにすると、学習用データと検証用データに分割されたことを確認できます。
#geshi(python){{
print(X_train.shape)
print(X_valid.shape)
}}
学習用データを用いて学習 (fit) し、検証用データを用いて評価 (score) します。
#geshi(python){{
clf = clf.fit(X_train, y_train)
clf.score(X_valid, y_valid)
}}
学習したモデルは、学習用データに対するスコアは 1.0 ですが、検証用データに対するスコアは 0.867 となりました。
つまり、実際の平均正解率は86.7%程度であると見込まれます。
今回学習されたモデルはこちら。
&ref(./decision_tree_3.png,75%,nolink);