はじめに
Grid Searchについてまとめました。
Grid Search
Grid Searchは複数ハイパーパラメータの各組み合わせでモデルを学習、検証する手法です。
複雑なモデルになるほど複数のハイパーパラメータが必要になり、モデル精度を向上させるためにこのような手法が使われます。
また、Cross Validationと組み合わせて使われます。
sklearnではGridSearchCVという関数が用意されています。
GridSearchCVを使うことで、指定したパラメータの全組合せの中からCross Validationで最適なパラメータを求めることができます。
GridSearchCVの主なプロパティとしては以下のものがあります。
- estimator: チューニングを行うモデル
- param_grid: パラメータ候補
パラメータ名: [候補リスト]
- scoring: 評価指標
- cv: Cross Validationの分割数(default: 3)
- verbose: ログ出力レベル
- n_jobs: 同時実行数(-1: コア数で並列実行)
- refit: trueのとき最良のパラメータで再学習
実践
Elastic Net回帰モデル(よろしければ以下の記事をご覧ください)にGridSearchCVを適用してみます。
以下の場合、alpha
の候補が6個、l1_ratio
の候補が7個あるため、42個の組み合わせから最適なパラメータを選ぶことになります。
また、Cross Validationで5分割するため、210(42☓5)回計算を行います。
from sklearn.linear_model import ElasticNet
from sklearn.model_selection import GridSearchCV
# モデルの定義
base_elastic_model = ElasticNet()
# パラメータ候補の定義
param_grid = {'alpha':[0.1,1,5,10,50,100],
'l1_ratio':[.1, .5, .7, .9, .95, .99, 1]}
# パラメータチューニング
grid_model = GridSearchCV(estimator=base_elastic_model,
param_grid=param_grid,
scoring='neg_mean_squared_error',
cv=5,
verbose=2)
grid_model.fit(X_train,y_train)
best_perams_
メソッドで、{'alpha': 0.1, 'l1_ratio': 1}
が最適なパラメータとして選択されたことを確認できます。

そして、テストデータの予測を以下のように行います。
y_pred = grid_model.predict(X_test)
mean_squared_error(y_test,y_pred)
参考資料