*はじめに [#p849067f]

前回、Pythonのデータ分析ライブラリーであるpandas、機械学習ライブラリーであるscikit-learn、実行環境であるJupyter Notebookを用いて、決定木による分類を行いました。
-[[pandasとscikit-learnとJupyter Notebookで決定木を使う>/機械学習/pandasとscikit-learnとJupyter Notebookで決定木を使う]] - とうごろうぃき

しかしながら、実際のデータに対する分析では、訓練データからモデルを学習して、テストデータに対して予測をして終わり、ということにはなりません。

ここでは、決定木を用いて、もう少しまともな分析を行います。

環境やデータは前回と同じです。


*学習したモデルの評価 [#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);
トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS