optuna.samplers(采样器)
samplers
模块定义了参数采样的基类,如 BaseSampler
中详细描述的。此模块中的其余类是派生自 BaseSampler
的子类,它们实现了不同的采样策略。
另请参阅
高效优化算法 教程概述了采样器类。
另请参阅
如果您想实现自己的采样器类,用户自定义采样器 教程可能会有所帮助。
另请参阅
如果您不确定使用哪种采样器,请考虑使用 AutoSampler,它会在优化过程中自动选择采样器。更多详情请参见 关于 AutoSampler 的文章。
随机采样器 (RandomSampler) |
网格采样器 (GridSampler) |
TPE 采样器 (TPESampler) |
CMA-ES 采样器 (CmaEsSampler) |
NSGA-II 采样器 (NSGAIISampler) |
准蒙特卡罗采样器 (QMCSampler) |
高斯过程采样器 (GPSampler) |
BoTorch 采样器 (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\) 对于无限域) |
整数参数 |
\(\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\) 对于单目标) |
\(\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\) 对于单目标) |
\(\color{green}\checkmark\) |
\(\color{red}\times\) |
\(\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{red}\times\) |
\(\color{green}\checkmark\) |
\(\color{red}\times\) |
时间复杂度 (每次试验) (*) |
\(O(d)\) |
\(O(dn)\) |
\(O(dn \log n)\) |
\(O(d^3)\) |
\(O(mp^2)\) (***) |
\(O(dn)\) |
\(O(n^3)\) |
\(O(n^3)\) |
\(O(d)\) |
推荐预算 (试验次数) (**) |
任意数量 |
组合数量 |
100 – 1000 |
1000 – 10000 |
100 – 10000 |
任意数量 |
– 500 |
10 – 100 |
组合数量 |
注意
\(\color{green}\checkmark\): 支持此功能。 \(\blacktriangle\): 可用,但效率低下。 \(\color{red}\times\): 导致错误,或无接口。
(*): 我们假设 \(d\) 是搜索空间的维度,\(n\) 是已完成试验的数量,\(m\) 是目标数量,\(p\) 是种群大小(算法特定参数)。此表显示了采样算法的时间复杂度。我们可能省略了 Optuna 实现中依赖于其他项的复杂度,包括调用采样方法的 \(O(d)\) 和收集已完成试验的 \(O(n)\)。这意味着,例如,
RandomSampler
的实际时间复杂度是 \(O(d+n+d) = O(d+n)\)。从另一个角度来看,除了NSGAIISampler
,所有时间复杂度都是针对单目标优化编写的。(**): (1) 预算取决于参数数量和目标数量。(2) 如果采样器有
n_startup_trials
作为其参数之一,则此预算包含n_startup_trials
。(***): 此时间复杂度假设种群大小 \(p\) 和并行化数量是规则的。这意味着并行化数量不应超过种群大小 \(p\)。
注意
采样器在初始化时通过指定 seed
参数来初始化其随机数生成器。然而,当 optuna.study.Study.optimize()
的 n_jobs!=1
时,采样器会重新播种它们,以避免使用同一个生成器采样重复的参数。因此,在使用 n_jobs!=1
时,我们很难重现优化结果。出于同样的原因,请确保在 轻松并行化 教程中解释的分布式优化中,要么使用 seed=None
,要么在不同进程中使用不同的 seed
值。
注意
有关浮点、整数或类别参数的信息,请参见 Python 式搜索空间 教程。
有关剪枝的信息,请参见 高效优化算法 教程。
有关多变量优化的信息,请参见 BaseSampler
。多变量优化在 Optuna 中实现为 sample_relative()
。请查看采样器的具体文档以获取更多详情。
有关条件搜索空间的信息,请参见 Python 式搜索空间 教程和 TPESampler
。TPESampler
的 group
选项允许 TPESampler
处理条件搜索空间。
有关多目标优化的信息,请参见 使用 Optuna 进行多目标优化 教程。
有关批量优化的信息,请参见 批量优化 教程。TPESampler
的 constant_liar
选项允许 TPESampler
处理批量优化。
有关分布式优化的信息,请参见 轻松并行化 教程。TPESampler
的 constant_liar
选项允许 TPESampler
处理分布式优化。
有关约束优化的信息,请参见示例。
采样器的基类。 |
|
使用网格搜索的采样器。 |
|
使用随机采样的采样器。 |
|
使用 TPE(Tree-structured Parzen Estimator)算法的采样器。 |
|
使用 cmaes 作为后端的采样器。 |
|
使用基于高斯过程的贝叶斯优化的采样器。 |
|
具有部分固定参数的采样器。 |
|
使用 NSGA-II 算法的多目标采样器。 |
|
使用 NSGA-III 算法的多目标采样器。 |
|
生成低差异序列的准蒙特卡罗采样器。 |
|
使用暴力方法的采样器。 |
注意
以下 optuna.samplers.nsgaii
模块定义了 NSGAIISampler
使用的交叉操作。