機械学習のハイパーパラメータのためのメモ

・そもそもハイパーパラメータとは
機械学習はいろんなデータに適用するために複雑化している
複雑化の要因となるのが 多次元(説明変数の数)・非線形(複雑な挙動のデータ)・汎化性能の向上(過学習防止)である
これらの3つについては機械学習でモデルの係数を決定するのとは別に、自身の設定する必要がありこれがハイパーパラメータだ。具体的には複雑化したどれくらい非線形にするかであったり、過学習と未学習データとのバランスを決定するものがあげられる(SVMのCやgamma)

・これらをどうやって調整するのかについて
決定するときの指標となるのがモデルの評価指標だ。分類であればご分類の少なさ、回帰であれば誤差の少なさを表す。出来上がったモデルをその指標をもとに比較判断し、パラメータのチューニングを行う。
ここが初心者にはかなり難しい点であり、どのように最初のハイパーパラメータの範囲を設定するのか判断するのが難しい。多いものであればハイパーパラメータが10個以上存在するものがあり、どれを調整するのかどの範囲で変化させてみるのか決める必要がある。

・調整するときに使われる手法の例
そもそも自動的にすべてのいろんな組み合わせを試して決定すればいいと思うかもしれないが、それはあまりに膨大な組み合わせとなるためパソコンであっても現実的ではない。そこで代表的に以下の三つのやり方がある

・グリッドサーチ
グリッド(格子)という名の通り、格子のようにあらゆる組み合わせについて試していくやり方である。メリットはモデルの解釈が容易となる点だが、デメリットは組合せが多すぎると時間がかかる点である。

・ランダムサーチ
検証する回数を設定しランダムに係数を選んで検証する方法である。全部の組み合わせをやらなくていい分早く検証可能だが、検証回数が少ないと最適なパラメータを選ぶことができない可能性がある。

・ベイズ最適化
前回の検証の結果からより良いパラメータを予測し精度を上げていくという方法です。厳密に理解しようとするにはガウス過程回帰など数学の知識を必要とするため今後調べてみたいと思う。ただし性能的に歯ランダムリサーチより優れており数字という根拠をもとに決定できる方法であるらしい。

今までハイパーパラメータについてうまく整理できていなかった部分が整理できたので書いてみました。今後もPythonを用いた分析でまとめてみたいものを載せてみたいと思います。

機械学習のパラメータチューニングを「これでもか!」というくらい丁寧に解説(Qiita)
の内容で自分なりに整理できたところをまとめたものです。

いいなと思ったら応援しよう!