- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- 機械学習/Pythonで学習パラメーターを最適化する へ行く。
はじめに †
前回、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%程度であると見込まれます。
今回学習されたモデルはこちら。