すべてを組み合わせる
不整脈検出スタートアップで使っているパイプラインについて、次の2点が気になっています。
- 学習は全年代の患者で行いましたが、実際の利用者は若いフィットネスユーザーが中心です。これはドメインシフトの可能性があるため、50歳超の例をすべて除外したいと考えています。
- まだ過学習が心配なので、ランダムフォレスト分類器の複雑さを下げ、特徴量選択を行うことで改善できるか確認したいです。
この演習では、特徴量選択の SelectKBest() ステップと RandomForestClassifier を含むパイプラインを作成します。これらはすでにインポート済みです。さらに GridSearchCV(), Pipeline, numpy は np、pickle が使用できます。データは arrh として与えられています。
この演習はコースの一部です
Python で設計する Machine Learning ワークフロー
演習の手順
- ステップ名を
ftとするSelectKBest()、ステップ名をclfとするRandomForestClassifier()を用いてパイプラインを作成します。 SelectKBest()のkとRandomForestClassifier()のmax_depthをチューニングするためのパラメータグリッドを作成します。- 50歳未満のみを含むデータに対して、そのグリッドでパイプラインを最適化するために
GridSearchCV()を使用します。 - 本番用に、最適化したパイプラインを pickle に保存します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Create a pipeline
pipe = Pipeline([
('ft', ____), ('clf', ____(random_state=2))])
# Create a parameter grid
grid = {'ft__k':[5, 10], '____':[10, 20]}
# Execute grid search CV on a dataset containing under 50s
grid_search = ____(pipe, param_grid=grid)
arrh = arrh.____[____(arrh['age'] < 50)]
____.____(arrh.drop('class', 1), arrh['class'])
# Push the fitted pipeline to production
with ____('pipe.pkl', ____) as file:
pickle.dump(____, file)