HyperOpt-quniform 范围问题

在HyperOpt使用quniform分布时,可能会遇到实际值超出预设范围的问题。这是因为quniform并不像预期那样简单地限制在指定区间内。官方文档表明,它适合于需要平滑变化且有限制的离散值。错误可能源于`round(uniform(low, high) / q) * q`的计算方式。当优化时,变量受限于(low, high)区间。通过这个公式,我们可以解释为何会出现超出范围的报错,尤其是在处理小于21q的值时。" 8626423,950461,使用kettle从SQLServer2008导入Oracle数据,"['数据迁移', 'kettle工具', '数据库', 'Oracle', 'SQLServer']
摘要由CSDN通过智能技术生成

在使用 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值