Menu
CoddyTech

パイプラインのチューニング

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 通りの設定のスコアは次のとおりです。

平均 CV 精度を示すグリッド:行は平均値、中央値、most_frequent による補完、列は木の深さ 2、4、6、8。スコアは 0.733 から 0.820 の範囲で、深さ 6 で中央値による補完を行ったセルが最良の 0.820 として示されている

各フォールドでパイプライン全体(補完器も含む)を再適合するため、どのフォールドも自分をテストする行を先読みしません。

challenge icon

チャレンジ

中級

ある音楽学校は、どのバイオリンの生徒が級位試験に合格するかを知りたいと考えています。スターターコードは k の値を3つ読み込みますが、パイプラインに対するグリッドサーチがエラーで停止します。

  1. グリッドの2つのキーを修正し、サーチで補完器の戦略と k-NN の近傍数を調整できるようにしてください。
  2. 以下のように、最適な設定、交差検証の精度、テスト精度を出力してください。

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)

# 以下にコードを書く
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

教師あり学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ