贝叶斯优化¶
使用高斯过程进行贝叶斯全局优化的纯Python实现。
这是一个基于贝叶斯推理和高斯过程的约束全局优化包,旨在尽可能少的迭代次数内找到未知函数的最大值。该技术特别适用于高成本函数的优化以及在探索和利用之间平衡至关重要的情况。
安装¶
pip (通过 PyPI)¶
$ pip install bayesian-optimization
Conda (通过 conda-forge)¶
$ conda install -c conda-forge bayesian-optimization
它是如何工作的?¶
贝叶斯优化通过构建一个最能描述你想要优化的函数的后验分布(高斯过程)来工作。随着观测数量的增加,后验分布会改进,算法对参数空间中哪些区域值得探索、哪些不值得探索的确定性也会提高,如下图所示。
当你反复迭代时,算法会根据其对目标函数的了解,平衡探索和利用的需求。在每一步中,高斯过程被拟合到已知样本(之前探索过的点),并结合探索策略(如UCB(上置信界)或EI(期望改进))的后验分布,用于确定下一个应该探索的点(见下面的gif)。
此过程旨在最小化找到接近最佳组合的参数组合所需的步骤数。为此,该方法使用了一个代理优化问题(寻找获取函数的最大值),尽管这仍然是一个难题,但在计算意义上更便宜,并且可以使用常用工具。因此,贝叶斯优化最适合于采样待优化函数非常昂贵的情况。有关此方法的详细讨论,请参阅参考文献。
该项目正在积极开发中,如果您发现错误或需要更正的内容,请通过提交GitHub上的问题告知我们。
快速索引¶
请参阅以下内容,快速了解贝叶斯优化包的基础知识。更多详细信息、其他高级功能以及使用/实现技巧可以在示例部分找到。我们建议您:
按照基础教程笔记本来学习如何使用该包的最重要功能。
查看高级教程笔记本,了解如何使包更加灵活,如何处理分类参数,如何使用观察者等。
要了解更多关于获取函数的信息,这是贝叶斯优化的核心构建模块,请参阅获取函数笔记本
查看这个 notebook ,它逐步展示了这个方法的工作原理。
要了解在存在额外约束时如何使用贝叶斯优化,请参阅约束优化笔记本。
探索领域缩减笔记本,了解更多关于如何通过动态改变参数边界来加速搜索的信息。
探索这个 notebook 展示探索与利用之间的平衡以及如何控制它。
查看此 脚本 以了解如何使用交叉验证和贝叶斯优化来调整机器学习模型的参数。
最后,看看这个 脚本 以获取关于如何使用此包以分布式方式实现贝叶斯优化的想法。
引用¶
如果您在研究中使用了这个包,请引用它:
@Misc{,
author={Fernando Nogueira},
title={{Bayesian Optimization}: Open source constrained global optimization tool for {Python}},
year={2014--},
url="https://github.com/bayesian-optimization/BayesianOptimization"
}
如果您使用了任何高级功能,请另外引用相应的出版物:
对于SequentialDomainTransformer
:
@article{
author={Stander, Nielen and Craig, Kenneth},
year={2002},
month={06},
pages={},
title={On the robustness of a simple domain reduction scheme for simulation-based optimization},
volume={19},
journal={International Journal for Computer-Aided Engineering and Software (Eng. Comput.)},
doi={10.1108/02644400210430190}
}
对于约束优化:
@inproceedings{gardner2014bayesian,
title={Bayesian optimization with inequality constraints.},
author={Gardner, Jacob R and Kusner, Matt J and Xu, Zhixiang Eddie and Weinberger, Kilian Q and Cunningham, John P},
booktitle={ICML},
volume={2014},
pages={937--945},
year={2014}
}