すべてをつなげよう
不整脈検出のスタートアップに参加し、不整脈データセット arrh でモデルを学習させたいとします。ランダムフォレストは Kaggle のコンペでよく上位に入ることに気づいたので、グリッドサーチで最大深さを 2、5、10 に変えて試してみましょう。データセットの次元がかなり高いこともわかっているので、特徴量選択の効果も検討したいと考えています。
誤って過学習しないよう、すでにデータは分割済みです。グリッドサーチには X_train と y_train を使い、特徴量選択が有効かどうかの判断には X_test と y_test を使います。4 つのデータ分割はすべて環境に読み込まれています。GridSearchCV()、train_test_split()、SelectKBest()、chi2()、そして RandomForestClassifier(rfc として利用可能)も使えます。
この演習はコースの一部です
Python で設計する Machine Learning ワークフロー
演習の手順
RandomForestClassifierの最大深さを 2、5、10 に設定してグリッドサーチを行い、最も性能の高いパラメータ設定を保存してください。- 次に、上で得られた最良の推定器を用いて、推定器を再学習(refit)してください。
chi2を評価関数にしたSelectKBestを適用し、変換後の特徴量で分類器を再学習してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Find the best value for max_depth among values 2, 5 and 10
grid_search = GridSearchCV(
____(random_state=1), param_grid=____)
best_value = grid_search.____(
____, ____).best_params_['max_depth']
# Using the best value from above, fit a random forest
clf = rfc(
random_state=1, ____=best_value).____(X_train, y_train)
# Apply SelectKBest with chi2 and pick top 100 features
vt = SelectKBest(____, k=____).____(X_train, y_train)
# Create a new dataset only containing the selected features
X_train_reduced = ____.transform(____)