ハイパーパラメータ調整

scikit-learn による教師あり学習

George Boorman

Core Curriculum Manager

ハイパーパラメータ調整

  • リッジ/ラッソ回帰: alphaを選択

  • KNN: n_neighborsを選択

  • ハイパーパラメータ: モデルを適合させる前に指定するパラメータ

    • 例:alphan_neighbors
scikit-learn による教師あり学習

適切なハイパーパラメータの選択

  1. さまざまなハイパーパラメータ値を試す

  2. それぞれ別々に合わせる

  3. パフォーマンスを確認する

  4. パフォーマンスの最も高い値を選択

  • ハイパーパラメータ調整と呼ばれる

  • 交差検証を使用してテストセットの過学習を避けることが重要

  • データを分割し、学習セットで交差検証を実行することもできる

  • 最終評価のためにテストセットを保留する

scikit-learn による教師あり学習

グリッドサーチ交差検証

n の近傍数の候補値のグリッド(2 から 11 まで 3 刻み)、およびユークリッドまたはマンハッタンの指標オプション

scikit-learn による教師あり学習

グリッドサーチ交差検証

グリッド内の各ハイパーパラメータの組み合わせに対するk分割交差検証スコア

scikit-learn による教師あり学習

グリッドサーチ交差検証

5近傍とユークリッド距離のハイライト、スコア0.8748

scikit-learn による教師あり学習

scikit-learn の GridSearchCV

from sklearn.model_selection import GridSearchCV

kf = KFold(n_splits=5, shuffle=True, random_state=42)
param_grid = {"alpha": np.arange(0.0001, 1, 10), "solver": ["sag", "lsqr"]}
ridge = Ridge()
ridge_cv = GridSearchCV(ridge, param_grid, cv=kf)
ridge_cv.fit(X_train, y_train)
print(ridge_cv.best_params_, ridge_cv.best_score_)
{'alpha': 0.0001, 'solver': 'sag'}
0.7529912278705785
scikit-learn による教師あり学習

制約と代替アプローチ

  • 3分割交差検証、ハイパーパラメーター1つ、合計10個の値 =学習30回
  • 10分割交差検証、ハイパーパラメータ3つ、合計30個の値 =学習900回
scikit-learn による教師あり学習

RandomizedSearchCV

from sklearn.model_selection import RandomizedSearchCV

kf = KFold(n_splits=5, shuffle=True, random_state=42) param_grid = {'alpha': np.arange(0.0001, 1, 10), "solver": ['sag', 'lsqr']} ridge = Ridge()
ridge_cv = RandomizedSearchCV(ridge, param_grid, cv=kf, n_iter=2) ridge_cv.fit(X_train, y_train)
print(ridge_cv.best_params_, ridge_cv.best_score_)
{'solver': 'sag', 'alpha': 0.0001}
0.7529912278705785
scikit-learn による教師あり学習

テストセットでの評価

test_score = ridge_cv.score(X_test, y_test)

print(test_score)
0.7564731534089224
scikit-learn による教師あり学習

練習しましょう!

scikit-learn による教師あり学習

Preparing Video For Download...