修行の場

知人が言っていました。これは修行だと。

Hyperoptを使ってみた

使い方

中身がわからない関数の最適化をするためのライブラリです。 使い方は簡単で、最適化対象の関数、探索空間、最適点の探索アルゴリズムを指定するだけで使えます。

サポートされている探索アルゴリズムは、ランダムサーチとTPEというアルゴリズムで、 beyesian optimizationは現時点では実装されていないようです。

実装

ドキュメントのサンプルコードを参考にすれば良いです。 sklearnの学習用のコードも書きました。 下記で説明しますが、パラメータの組み合わせによってはハングしたりクラッシュしたりします。 他のカーネルやパラメータの組み合わせでも正しく動く保証はなく、 何らかの対策が必要になりそうですが、ありえない範囲を指定しないといった暫定対策で対応刷ると良いと思います。

Hyperoptがハングする問題

irisデータセットsvm+poly kernelを探索範囲に入れたらhangしました。 多項式カーネルに関して似たような問題は報告されており、 おそらく、どこかで値が無限になってしまったり無効値になってしまったりしているのだと想像しています。 他にもcross_val_score関数がハング刷る問題もレポートされています。 どうも、ドキュメントによると、forkのあとにexecしない場合、生成したプロセスのスレッドプールが壊れて、 タイムアウトによりhangするようです。 この2つの問題を解決して初めて並列実行できます。