scikit-optimize中model_queue_size作用及ask-tell模式设置kappa的问题
scikit-optimize 使用问题解答
1. model_queue_size参数的作用
你的测试结论符合该参数的设计逻辑,model_queue_size的核心作用就是限制opt.tell()调用时用来训练代理模型的样本数量。
默认该参数为None,表示调用tell()时会加载所有历史观测样本重新训练代理模型,样本量越大训练耗时就越高。当你设置为固定正整数N后,tell()执行时仅会选取最近N个已提交的观测样本训练模型,不需要处理全量历史数据,因此参数设置越小,tell()的运行速度越快。
需要注意的是如果该参数设置过小,代理模型会丢失早期迭代的样本信息,可能导致优化收敛效果下降,需要根据你的业务场景在运行性能和优化精度之间做权衡。
2. ask-tell模式下设置kappa参数的方法
kappa是贝叶斯优化获取函数中控制探索与利用权重的参数,数值越高算法探索未知搜索空间的倾向性越强。
在ask-tell模式下有两种设置方式:
- 全局固定kappa:在初始化
Optimizer实例时,通过acq_func_kwargs传入配置即可,后续所有ask()调用默认使用该数值,示例代码:
from skopt import Optimizer opt = Optimizer( dimensions=你的搜索空间定义, acq_func="EI", # 对应使用kappa的获取函数 acq_func_kwargs={"kappa": 2.5} )
- 单次调用动态调整:在调用
ask()时直接传入kappa参数,优先级高于初始化时的全局配置,适合需要根据迭代阶段调整探索力度的场景,示例代码:
# 前20轮迭代侧重探索,kappa设为3.0 if len(opt.Xi) < 20: next_eval_point = opt.ask(kappa=3.0) # 后续迭代侧重利用已有最优结果,kappa设为1.2 else: next_eval_point = opt.ask(kappa=1.2)
内容的提问来源于stack exchange,提问作者Mark Sale
相关产品推荐
相关产品推荐

