はじめに
Optunaはベイズ最適化により、ハイパーパラメータの最適化を行うライブラリである。本記事は、Optunaを使って同じパラメータに異なる分布を指定しようとした時に遭遇したエラーのメモである。
なぜ、このようなことをしたいと思ったかというと、scikit-learnのRandomForest (https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html) のmax_featuresのように、int型、float型、カテゴリーの3種類の指定方法が用意されているパラメータについて、どの方法で指定するかも含めて、まとめてOptunaに最適化してもらえば、何も考えず楽できると思ったからである。
当初考えたやり方
https://optuna.readthedocs.io/en/latest/tutorial/configurations.html の「Branches and Loops」を参考に、2段階でsuggestさせればよいと考えた。
まず、最初にfloat、int, カテゴリの3つのどれかsuggest_categoricalにより提案してもらう。
次にその提案結果により、以下のように呼び出すsuggestを変えてみる。
- float の場合は suggest_uniformやsuggenst_loguniform等
- int の場合は suggest_int
- カテゴリの場合は suggest_categorical
やってみた。
Trial中に以下のエラーが出て終了~。
cannot set different distribution kind to the same parameter name.
考察
ベイズ最適化では、パラメータの分布というものを前提としているわけで、同じパラメータに別の分布を与えると都合が悪いのだろう。
というわけで、結論としては、指定方法の種類の数だけパラメータチューニングの処理を実行するしかないようだ。