optuna.samplers
samplers
モジュールでは、BaseSampler
クラスで詳細に説明されているパラメータサンプリングの基本クラスを定義しています。このモジュールに含まれるその他のクラスは、BaseSampler
を継承したサブクラスであり、それぞれ異なるサンプリング戦略を実装しています。
See also
効率的な最適化アルゴリズム チュートリアルでは、サンプラークラスの概要について解説しています。
See also
独自のサンプラークラスを実装したい場合には、ユーザー定義サンプラー チュートリアルが参考になります。
See also
どのサンプラーを使用するべきか判断に迷う場合は、AutoSampler の使用をご検討ください。AutoSampler は最適化処理中に自動的に適切なサンプラーを選択します。より詳細な情報については、AutoSampler に関する記事 をご覧ください。
RandomSampler |
GridSampler |
TPESampler |
CmaEsSampler |
NSGAIISampler |
QMCSampler |
GPSampler |
BoTorchSampler |
BruteForceSampler |
|
---|---|---|---|---|---|---|---|---|---|
浮動小数点数パラメータ |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) (\(\color{red}\times\) for infinite domain) |
整数パラメータ |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
\(\color{green}\checkmark\) |
カテゴリカルパラメータ |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
\(\color{green}\checkmark\) |
プルーニング処理 |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
\(\color{red}\times\) (\(\blacktriangle\) for single-objective) |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
\(\blacktriangle\) |
\(\color{green}\checkmark\) |
多変量最適化 |
\(\blacktriangle\) |
\(\blacktriangle\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
\(\blacktriangle\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
条件付き探索空間 |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
\(\blacktriangle\) |
\(\blacktriangle\) |
\(\blacktriangle\) |
\(\blacktriangle\) |
\(\color{green}\checkmark\) |
多目的最適化 |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{red}\times\) |
\(\color{green}\checkmark\) (\(\blacktriangle\) for single-objective) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
バッチ最適化 |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
分散最適化 |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
制約付き最適化 |
\(\color{red}\times\) |
\(\color{red}\times\) |
\(\color{green}\checkmark\) |
\(\color{red}\times\) |
\(\color{green}\checkmark\) |
\(\color{red}\times\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{red}\times\) |
時間計算量 (1試行あたり) (*) |
\(O(d)\) |
\(O(dn)\) |
\(O(dn \log n)\) |
\(O(d^3)\) |
\(O(mp^2)\) (***) |
\(O(dn)\) |
\(O(n^3)\) |
\(O(n^3)\) |
\(O(d)\) |
推奨予算 (試行回数) (**) |
as many as one likes |
number of combinations |
100 – 1000 |
1000 – 10000 |
100 – 10000 |
as many as one likes |
– 500 |
10 – 100 |
number of combinations |
Note
\(\color{green}\checkmark\): この機能をサポートしています。 \(\blacktriangle\): 動作しますが、効率が悪いです。 \(\color{red}\times\): エラーが発生するか、インターフェースが存在しません。
(*): \(d\) は探索空間の次元、\(n\) は完了したトライアル数、\(m\) は目的数、\(p\) は集団サイズ(アルゴリズム固有のパラメータ)を表します。 この表はサンプリングアルゴリズムの時間計算量を示しています。実装に依存する項(サンプリングメソッドの呼び出しにかかる \(O(d)\) や完了したトライアルの収集にかかる \(O(n)\) など)は省略している場合があります。 例えば、
RandomSampler
の実際の時間計算量は \(O(d+n+d) = O(d+n)\) となります。 別の見方として、NSGAIISampler
を除き、すべての時間計算量は単一目的最適化の場合のものです。(**): (1) 予算はパラメータ数と目的数に依存します。(2) この予算には、サンプラーの引数として
n_startup_trials
が含まれている場合、その値も含まれます。(***): この時間計算量は、集団サイズ \(p\) と並列化数が一定であることを前提としています。 つまり、並列化数は集団サイズ \(p\) を超えてはならないということです。
Note
サンプラーは初期化時に seed
引数を指定することで乱数生成器を初期化します。
ただし、optuna.study.Study.optimize()
の n_jobs!=1
の場合、同じ生成器を使用して重複したパラメータをサンプリングしないように、サンプラーは乱数生成器を再シードします。
このため、n_jobs!=1
では最適化結果を再現することが困難です。
同じ理由から、分散最適化の説明(並列化の容易さ チュートリアル)で述べたように、seed=None
を使用するか、プロセス間で異なる seed
値を使用するようにしてください。
Note
浮動小数点数、整数、カテゴリカルパラメータについては、Pythonic な探索空間 チュートリアルを参照してください。
プルーニングについては、効率的な最適化アルゴリズム チュートリアルを参照してください。
多変量最適化については、BaseSampler
を参照してください。多変量最適化は Optuna では sample_relative()
として実装されています。サンプラーの詳細については、各サンプラーのドキュメントを参照してください。
条件付き探索空間については、Pythonic な探索空間 チュートリアルと TPESampler
を参照してください。TPESampler
の group
オプションにより、TPESampler
は条件付き探索空間を扱うことができます。
多目的最適化については、Optuna による多目的最適化 チュートリアルを参照してください。
バッチ最適化については、バッチ最適化 チュートリアルを参照してください。TPESampler
の constant_liar
オプションにより、TPESampler
はバッチ最適化を扱うことができます。
分散最適化については、並列化の容易さ チュートリアルを参照してください。TPESampler
の constant_liar
オプションにより、TPESampler
は分散最適化を扱うことができます。
制約付き最適化については、例 を参照してください。
Base class for samplers. |
|
Sampler using grid search. |
|
Sampler using random sampling. |
|
Sampler using TPE (Tree-structured Parzen Estimator) algorithm. |
|
A sampler using cmaes as the backend. |
|
Sampler using Gaussian process-based Bayesian optimization. |
|
Sampler with partially fixed parameters. |
|
Multi-objective sampler using the NSGA-II algorithm. |
|
Multi-objective sampler using the NSGA-III algorithm. |
|
A Quasi Monte Carlo Sampler that generates low-discrepancy sequences. |
|
Sampler using brute force. |
Note
以下の optuna.samplers.nsgaii
モジュールは、NSGAIISampler
で使用される交叉操作を定義しています。