パイプラインのチューニング
CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 48/58。
パイプラインは、前処理のステップも含め、あらゆるモデルと同様に調整できます。各設定は、そのステップ名、アンダースコア2つ、続いてパラメーター名で指定します:
pipe = make_pipeline(SimpleImputer(), DecisionTreeClassifier(random_state=0))
grid = {"simpleimputer__strategy": ["mean", "median", "most_frequent"],
"decisiontreeclassifier__max_depth": [2, 4, 6, 8]}
search = GridSearchCV(pipe, grid, cv=5)
search.fit(X_train, y_train)make_pipeline は各ステップにクラス名を小文字にして名前を付けます。高度が 300 m に達したかどうかを判定するモデルロケットの打ち上げ 200 回について、12 通りの設定のスコアは次のとおりです。
各フォールドでパイプライン全体(補完器も含む)を再適合するため、どのフォールドも自分をテストする行を先読みしません。
チャレンジ
中級ある音楽学校は、どのバイオリンの生徒が級位試験に合格するかを知りたいと考えています。スターターコードは k の値を3つ読み込みますが、パイプラインに対するグリッドサーチがエラーで停止します。
- グリッドの2つのキーを修正し、サーチで補完器の戦略と k-NN の近傍数を調整できるようにしてください。
- 以下のように、最適な設定、交差検証の精度、テスト精度を出力してください。
2、4、6を使った別の学校の例:
Best: mean fills, 6 neighbors
Cross-validated accuracy: 0.720
Test accuracy: 0.820自分で試してみよう
import pandas as pd
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import make_pipeline
# バイオリンの生徒:級の試験に合格した (1) か、不合格だった (0) か。一部の練習
# 記録と初見演奏のスコアが欠けている
students = pd.read_csv("violins.csv")
X = students.drop(columns="passed")
y = students["passed"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
ks = [int(input()), int(input()), int(input())]
# この探索はエラーで停止する:グリッドを修正する
pipe = make_pipeline(SimpleImputer(), StandardScaler(), KNeighborsClassifier())
grid = {
"strategy": ["mean", "median"],
"n_neighbors": ks,
}
search = GridSearchCV(pipe, grid, cv=5)
search.fit(X_train, y_train)
# 以下にコードを書く
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師あり学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ