はじめに

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

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

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

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

学習したモデルの評価

前回は、訓練データを用いて、学習したモデルのスコア(ここでは、平均正解率)を求めました。

実際の分析では、予測する対象は訓練データ以外のデータであるため、いくら訓練データに対して優れたモデルが学習できたとしても、それ以外のデータに対してうまく予測ができないと意味がありません。

そこで、訓練データを全て学習に使わずに、学習用データと検証用データに分割し、学習用データから学習したモデルの性能を検証用データで検証します。

sklearn.model_selectionクラスのtrain_test_split関数を用いて、訓練データを学習用データと検証用データに分割します。

clf.fit(X, y)
clf.score(X, y)

ここでは、検証用データのサイズ (test_size) を20% (0.2) としています。 random_stateは、乱数生成器のシードを表します。

次のようにすると、学習用データと検証用データに分割されたことを確認できます。

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)

学習用データを用いて学習 (fit) し、検証用データを用いて評価 (score) します。

print(X_train.shape)
print(X_valid.shape)

学習したモデルは、学習用データに対するスコアは 1.0 ですが、検証用データに対するスコアは 0.867 となりました。 つまり、実際の平均正解率は86.7%程度であると見込まれます。

今回学習されたモデルはこちら。

nolink

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS