optuna.samplers
The samplers 模块定义了参数采样的基类,这在 BaseSampler 中有详尽的描述。该模块中的其他类代表子类,它们继承自 BaseSampler,实现了不同的采样策略。
另请参阅
高效优化算法 教程解释了采样器类的概述。
另请参阅
用户自定义采样器 教程在您想实现自己的采样器类时可能会有所帮助。
另请参阅
如果您不确定使用哪个采样器,请考虑使用 AutoSampler,它在优化过程中自动选择采样器。更多详情,请参阅 关于 AutoSampler 的文章。
浮点数参数 |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
\(\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\) |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
\(\blacktriangle\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
\(\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\) |
\(\blacktriangle\) |
\(\blacktriangle\) |
\(\color{green}\checkmark\) |
剪枝 |
\(\blacktriangle\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
\(\blacktriangle\) |
\(\color{red}\times\) (\(\blacktriangle\) 对于单目标) |
\(\color{red}\times\) (\(\blacktriangle\) 对于单目标) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
\(\color{green}\checkmark\) |
多变量优化 |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
\(\blacktriangle\) |
\(\blacktriangle\) |
\(\blacktriangle\) |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
条件搜索空间 |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\blacktriangle\) |
\(\blacktriangle\) |
\(\blacktriangle\) |
\(\blacktriangle\) |
\(\blacktriangle\) |
\(\blacktriangle\) |
\(\blacktriangle\) |
\(\color{green}\checkmark\) |
多目标优化 |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{red}\times\) |
\(\color{green}\checkmark\) (\(\blacktriangle\) 对于单目标) |
\(\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\) |
\(\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\) |
\(\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\) |
\(\color{red}\times\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{red}\times\) |
\(\color{green}\checkmark\) |
\(\color{green}\checkmark\) |
\(\color{red}\times\) |
\(\color{red}\times\) |
\(\color{green}\checkmark\) |
\(\color{red}\times\) |
时间复杂度 (每次试验) (*) |
不适用 |
\(O(d)\) |
\(O(dn \log n)\) |
\(O(n^3)\) |
\(O(d^3)\) |
\(O(mp^2)\) (***) |
\(O(mp^2)\) (***) |
\(O(dn)\) |
\(O(dn)\) |
\(O(n^3)\) |
\(O(d)\) |
推荐预算 (#试验) (**) |
任意数量 |
任意数量 |
100–1000 |
–500 |
1000–10000 |
100–10000 |
100–10000 |
组合数量 |
任意数量 |
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和NSGAIIISampler之外,所有时间复杂度都是为单目标优化而编写的。(**): (1) 预算取决于参数的数量和目标的数量。(2) 如果采样器有一个
n_startup_trials作为其参数之一,则此预算包括n_startup_trials。(***): 此时间复杂度假设种群大小 \(p\) 的数量和并行化数量是常规的。这意味着并行化数量不应超过种群大小 \(p\)。
注意
采样器通过在初始化时指定 seed 参数来初始化其随机数生成器。但是,当 optuna.study.Study.optimize() 的 n_jobs!=1 时,采样器会重新设置它们,以避免使用相同的生成器采样重复的参数。因此,在使用 n_jobs!=1 时,很难重现优化结果。出于相同的原因,请确保在分布式优化(在 轻松并行化 教程中解释)中使用 seed=None 或在进程之间使用不同的 seed 值。
注意
关于浮点数、整数或类别参数,请参阅 Pythonic 搜索空间 教程。
关于剪枝,请参阅 高效优化算法 教程。
关于多变量优化,请参阅 BaseSampler。多变量优化在 Optuna 中实现为 sample_relative()。请查看采样器的具体文档以获取更多详细信息。
关于条件搜索空间,请参阅 Pythonic 搜索空间 教程和 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 使用的交叉操作。