我正在尝试优化具有 13 个参数的自定义模型(没有任何花哨的 ML),其中 12 个我知道是正态分布的。我使用该hyperopt
库获得了不错的结果:
space = {
'B1': hp.normal('B1', B1['mean'], B1['std']),
'B2': hp.normal('B2', B2['mean'], B2['std']),
'C1': hp.normal('C1', C1['mean'], C1['std']),
'C2': hp.normal('C2', C2['mean'], C2['std']),
'D1': hp.normal('D1', D1['mean'], D1['std']),
'D2': hp.normal('D2', D2['mean'], D2['std']),
'E1': hp.normal('E1', E1['mean'], E1['std']),
'E2': hp.normal('E2', E2['mean'], E2['std']),
'F1': hp.normal('F1', F1['mean'], F1['std']),
'F2': hp.normal('F2', F2['mean'], F2['std'])
}
我可以指定每个参数的搜索空间形状为正态分布。
我有 32 个内核,默认Trials()
对象只使用其中一个。 Hyperopt
建议了两种并行化搜索过程的方法,这两种方法我都无法在我的 Windows 机器上工作,所以我已经放弃并想尝试不同的框架。
尽管据我所知贝叶斯超参数优化是基于值根据分布分布的想法,并且正态分布非常普遍,以至于它实际上被称为正态分布。我找不到一种方法来指定Optuna
我的参数有 amean
和 a standard deviation
。
我如何告诉我Optuna
的参数mean
和standard deviation
?
我可以在文档中找到的唯一发行版是suggest_uniform()
:suggest_loguniform()
和suggest_discrete_uniform()
.
请告诉我我是否误解了对数均匀分布(看起来有点相似,但我不能指定标准偏差?)或修剪过程。
正如您可能从我的文字中看出的那样,我花了很多时间试图弄清楚这一点,但一无所获,任何帮助都将不胜感激!
特别感谢 dankal444 提供了这个优雅的解决方案(我将用我自己的值替换平均值和标准):
from scipy.special import erfinv
space = {
'B1': (erfinv(trial.suggest_float('B1', -1, 1))-mean)*std,
'B2': ...
}