ハイパーパラメータチューニング
ハイパーパラメータ
予測モデルのパラメータと学習にあるように、各モデルにはさまざまなパラメータがあり、これを学習データにもとづいて最適化する、というのが機械学習における「学習」の本質 ニューラルネットワークでは結合重み、線形モデルでは回帰係数、など
ノンパラメトリックモデルの場合はパラメータの最適化ではないが、データの基づいてなんらかの「調整」をしている
一方、モデルの複雑さにもあるように、こうしたパラメータの学習を行う前に、「あらかじめ設定しておかないといけない要素」がモデルごとにあり、これをハイパーパラメータという 学習しようとしているモデルの構造を決めるもの
決定木では深さ、ニューラルネットワークでは層の数やユニットの数、など
正則化のためのもの
ロジスティック回帰では正則化パラメータCなど
学習アルゴリズムの挙動を制御するもの
多層パーセプトロンの最適化アルゴリズムの学習率など
良い評価が得られるハイパーパラメータを探索する、というのハイパーパラメータチューニング
ハイパーパラメータの探索方法
手動でのハイパーパラメータ調整
対象の知識があれば、手動でハイパーパラメータを調整することもある
グリッドサーチ
ハイパーパラメータの候補を決めておき、それをすべて計算する方法
ハイパーパラメータが複数種類あると、その組合せすべてについて計算が必要
普通にコードを書いてもそこまで大変ではないが、sklearn.model_selection.GridSearchCVを使うとラク
ランダムサーチ
ハイパーパラメータの分布や範囲を指定し、そこからランダムに抽出したパラメータで計算する方法
sklearn.model_selection.RandomizedSearchCVなどが使える
ベイズ最適化
計算したパラメータの履歴にもとづいて、ベイズ確率の枠組みで、次に探索すべきパラメータを選択していく方法
hyperopt、optunaなどのライブラリがある
ハイパーパラメータの例
各アルゴリズムのライブラリのマニュアルをみると、設定できるパラメータを確認できる
これらのリンク先にある「Parameters」がハイパーパラメータ
すべてのパラメータが重要ではないが、以下のような重要パラメータはチューニングによって探索したほうが性能がよくなるだろう
max_depth:木の最大深さ
criterion:ノード分割のための指標(不純度の指標)(gini, entropy, log_lossから選択)
n_estimators:作成する決定木の数
max_depth:木の最大深さ
criterion:ノード分割のための指標(不純度の指標)(gini, entropy, log_lossから選択)
n_estimators:作成する決定木の数
max_depth:木の最大深さ
learning_rate:学習率パラメータ
C:正則化パラメータ
C:正則化パラメータ
kernel:使用するカーネル関数(rbf, poly, sigmoid, linearなどから選択)
gamma:カーネルが'rbf', 'poly','sigmoid'のときに使われる、カーネルの形状に関するパラメータ。決め方によっては過学習する
hidden_layer_sizes:中間層のサイズ
activation:中間層の活性化関数(relu, logistic, tanh, identityから選択)
solver:重みの学習の方法(lbfgs, sgd, adamから選択)
上記はあくまで例。モデルごとにチューニングすべきパラメータが大きく異なるので、詳細は随時調べるとよい
ほとんどの場合、パラメータはデフォルト値が決まっている
上のマニュアルでのパラメータの説明で、default=と書いてある部分