機械学習のアルゴリズムを実行する際に、データから直接決めることのできずユーザがあらかじめ決めておく必要があるハイパーパラメータがあります。ハイパーパラメータは最終的な精度に影響するため、ある程度良い値を設定しておく必要があります。
このハイパーパラメータを探索する方法はいくつかあります。
- グリッドサーチ
昔からある手法で、格子状の空間で最適なパラメータを探索する方法です。 格子の範囲を総当りするため、膨大な計算時間がかかるという課題があります。
- ランダムサーチ
無作為にパラメータを抽出して探索します。 グリッドサーチよりも計算時間が短くて済むというメリットがあります。
- ベイズ最適化 (Bayesian Optimization)
最初は無作為にパラメータを抽出して探索しますが、その結果を使って次に探索する点を確率的に選ぶ方法です。 ディープラーニングを含む機械学習の手法で、比較的良いハイパーパラメータを探索できることが知られています。
特に、低次元のデータで大域的な解を求めたい場合や、グリッドサーチなどで時間がかかっている場合に有効な手法です。
ハイパーパラメータを自動的に探索する方法は R2016b から Statistics and Machine Learning Toolbox に導入されています。
2通りの方法があり、機械学習の関数によってどちらかを使用します。
1. 関数オプションを使用する方法
"fit" から始まる分類/回帰の関数のいくつかでは、'OptimizeHyperparameters' オプションを 'auto' に設定することで、ベイズ最適化を使ったハイパーパラメータ探索が行われます。デフォルトの探索方法はベイズ最適化に設定されていますが、グリッドサーチやランダムサーチに変更することも可能です。
例えば、二項サポートベクターマシンの fitcsvm 関数でグリッドサーチを使ってハイパーパラメータサーチをしたい場合、以下のようにオプション 'HyperparameterOptimizationOptions' に対して struct として 'Optimizer' オプションを 'gridsearch' と設定します。
Mdl = fitcsvm(X, Y, 'OptimizeHyperparameters','auto',...
'HyperparameterOptimizationOptions', struct('Optimizer', 'gridsearch'))
2. bayesopt 関数を使用する方法
ベイズ最適化についてより詳細が知りたいという場合は、以下のワークフローをまとめたドキュメントをご覧ください。
- ベイズ最適化のワークフロー