トレーニングデータでは完璧のスコアで学習をしたモデルで正解データで検証すると良くないスコアとなることを過学習(overfitting)と言います。通常トレーニングデータセットを更にバリデーション用に細分化してそれぞれでaccuracyのバラツキを見ることをクロスバリデーション(CV: cross-validation)といいます。簡単に計算できます。
RFCのPermutation_Feature_ImportanceについてのRFC(ランダムフォーレスト分類器)の問題で、クロスバリデーションを行います。
大元のデータは、ロジスティック回帰分析のブログで利用したKaggle よりHRデータ です。kaggleよりダウンロードして、確かめてみてください。
チートシート
やりたいこと | 方法 |
---|---|
クロスバリデーションでスコアの 平均、標準偏差(scores)を確認する |
1. from sklearn.ensemble import RandomForestClassifier as RFC 2. rf = RFC() 3. scores = cross_val_score(rf, x, y, cv=5) |
今回使うデータのポイント
1) 退職状況(attrition)に関する人事データ「ロジスティック回帰分析_その1」 で選択した12個の説明変数でRandom Forest Classifer(RFC)で機械学習するところまでは同じです。
2) テストデータを更に5等分して、バリデーション用データとトレーニング用を1:4の組み合わせを5通り作ります
3) 5通り各々の組み合わせでaccuracy スコアを計算して、トレーニングデータでの学習における的中率の平均と標準偏差をみます
サンプルオペレーション
1) データセットをトレーニング用(X_train, y_train)と検証用(X_test, y_test)にまず分けます。
2) トレーニング用データセットを更に5等分(cv=5)にしてクロスバリデーションし、それぞれのaccuracy scoreを出します
1
2
3
4
5
6
7
from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(df_test,
target_df['attrition_yes'], test_size=0.5,
random_state=200)
scores = cross_val_score(rf, X_train, y_train.values.ravel(), cv=5)
scores
accuracy score が5つ出てきます
平均を標準偏差をプリントします。 各々のクロスバリデーションのスコアが戻り値です。scores
に配列の形式で格納されていますので、平均と標準偏差を計算してプリントします。
1
print('Accuracy : %0.2f (+/- %0.2f)' % (scores.mean(), scores.std() *2))
クロスバリデーションはトレーニングデータに適用する
クロスバリデーションの目的は、トレーニングデータでの学習でどの程度のモデルの性能にバラツキがあるかを知るために行います。今回の場合、下が81.6%, 上が85.0%でした。平均は84%です。 的中率が85%としたトレーニング結果のモデルで、正解データで検証すると的中率が81%の場合もありうるということです。トレーニングデータによって、学習したモデルの的中率もこの程度のバラツキが生じうることがわかります。
パラメータの最適化はGridSearchで行う
トレーニングデータでのクロスバリデーションで的中率のバラツキの程度を把握できました。 ベストのパラメータはグリッドサーチテクニックと呼ばれるパラメータの総当り(Exhasutive)で決定します。 それは、次回のブログで説明いたします。
参照 Cross-validation:_evaluating_estimator_performance
参照 Parameter estimation using grid search with cross-validation
ひとこと
ランダムフォーレストはアンサンブル学習の代表的なアルゴリズムです。クロスバリデーションはトレーニングデータで生成されるモデルのパラメータのバラツキを可視化してくれます。次回説明するグリッドサーチのようにモデルの性能を上げるための様々な方策が提供されています。グリッドサーチにしてもトレーニングデータでモデルを最適化します。 クロスバリデーションによって、同じ最適化でも結果に差が出ることを把握しておくことは、分析結果の議論でとても大切な準備だと思います。