在使用 quniform 的时候,可能会出现超出指定范围的值,例如对于 GBDT 设置参数空间为 'learning_rate':hp.quniform('learning_rate',0.05,2.05,0.2)
,但是仍然会报错 ValueError: learning_rate must be greater than 0 but was 0.0
,但我们并没有把 0 设置在范围内。
实际上,Hyperopt 对于 quniform 的处理并不是类似于 range(起始,终止,步长)
,而是另一种处理方式,这里可以查看官方文档
hp.quniform(label, low, high, q)
Returns a value like round (uniform (low, high) / q) * q
返回像 round (uniform (low, high) / q) * q
的值
Suitable for a discrete value with respect to which the objective is still somewhat “smooth”, but which should be bounded both above and below.
适用于相对取值仍然有点“平滑”,但应有上下限限制的离散值。
进一步,我们需要看一下 uniform 的定义
hp.uniform(label, low, high)
Returns a value uniformly between low and high.
返回值介于在 low 和 hight 之间
When optimizing, this variable is constrained to a two-sided interval.
在优化的时候,这个变量被限制在最大值和最小值中间
因此对于上面的报错我们就可以找到原因了。根据给出的公式
r o u n d ( u n i f o r m ( l o w , h i g h ) / q ) ∗ q round (uniform (low, high) / q) * q round(unifor