如何在scikit-optimize中为Real维度设置离散步长?
skopt中Real搜索空间设置固定步长的实现方法
skopt的space.Real类本身不支持step参数,要实现按0.25这类固定步长的离散搜索,有两种实用方案:
方案一:通过Integer空间转换
将原Real范围转换为Integer空间,在目标函数中再缩放回实际需要的步长数值。以1到10、步长0.25为例,总共有(10-1)/0.25 + 1 = 37个离散点,对应Integer空间的0到36:
from skopt import space search_space = [ space.Integer(0, 36, name="my_scale_int") ] # 在目标函数中完成数值转换 def objective(params): my_scale = 1 + params[0] * 0.25 # 这里写你的计算逻辑 return ...
这种方式代码简洁,尤其适合数值范围较大的场景,无需预先生成所有离散值。
方案二:使用Categorical枚举所有离散值
直接生成所有符合步长要求的数值,用space.Categorical定义搜索空间:
from skopt import space import numpy as np # 生成1到10之间步长为0.25的所有数值 scale_values = np.arange(1, 10.01, 0.25).tolist() search_space = [ space.Categorical(scale_values, name="my_scale") ]
这种方式更直观,能直接看到所有可搜索的候选值,适合数值范围较小的场景,也能完美匹配你缓存离散结果的需求。
内容的提问来源于stack exchange,提问作者Mikko Ohtamaa
相关产品推荐
相关产品推荐

