基于模型的序列优化工具箱。
项目描述
Scikit-Optimize
Scikit-Optimize,或skopt,是一个简单高效的库,用于优化(非常)昂贵且噪声大的黑盒函数。它实现了基于序列模型优化的几种方法。skopt旨在在许多环境中易于访问和使用。
该库建立在NumPy、SciPy和Scikit-Learn之上。
我们不执行基于梯度的优化。有关基于梯度的优化算法,请参阅此处的scipy.optimize。
经过50次迭代后的gp_minimize近似目标函数。使用skopt.plots.plot_objective创建的图表。
维护代码库
这个仓库是原始仓库的副本,原始仓库位于 https://github.com/scikit-optimize/scikit-optimize/。由于原始仓库现在是只读模式,我决定自行继续开发。我仍然拥有pypi的凭据,因此我将新版本发布在 https://pypi.ac.cn/project/scikit-optimize/。我尽力将2021年以来的所有开放PR包含在scikit-optimize 0.10的新版本中。
https://scikit-optimize.github.io/ 已经迁移到 http://scikit-optimize.readthedocs.io/。
重要链接
安装
scikit-optimize 需要
Python >= 3.8
NumPy (>= 1.20.3)
SciPy (>= 0.19.1)
joblib (>= 0.11)
scikit-learn >= 1.0.0
matplotlib >= 2.0.0
您可以使用以下命令安装最新版本
pip install scikit-optimize
这会安装基本组件。要安装绘图功能,您可以执行以下操作
pip install 'scikit-optimize[plots]'
这将额外安装Matplotlib。
如果您使用Anaconda平台,有scikit-optimize的conda-forge包
conda install -c conda-forge scikit-optimize
使用conda-forge可能是安装scikit-optimize到Windows上最简单的方法。
入门
使用skopt找到范围 -2 < x < 2 上有噪声的函数 f(x) 的最小值
import numpy as np
from skopt import gp_minimize
def f(x):
return (np.sin(5 * x[0]) * (1 - np.tanh(x[0] ** 2)) +
np.random.randn() * 0.1)
res = gp_minimize(f, [(-2.0, 2.0)])
为了更好地控制优化循环,您可以使用 skopt.Optimizer 类
from skopt import Optimizer
opt = Optimizer([(-2.0, 2.0)])
for i in range(20):
suggested = opt.ask()
y = f(suggested)
opt.tell(suggested, y)
print('iteration:', i, suggested, y)
开发
这个库仍然是实验性的,并且处于开发中。查看 下一个里程碑 以了解下一个版本的计划或查看一些 简单的任务 以开始贡献。
可以通过以下方式安装开发版本
git clone https://github.com/holgern/scikit-optimize.git cd scikit-optimize pip install -e .
在顶级目录中执行 pytest 以运行所有测试。
要仅运行运行时间较短的测试子集,您可以使用 pytest -m 'fast_test' (pytest -m 'slow_test' 也是可能的)。要排除所有运行时间较长的测试,请尝试 pytest -m 'not slow_test'。
这是使用pytest 属性 实现的。如果一个测试运行时间超过1秒,则标记为慢速,否则为快速。
所有贡献者都欢迎!
pre-commit配置
安装
pip install pre-commit
使用homebrew
brew install pre-commit pre-commit --version pre-commit 2.10.0
安装git钩子脚本
pre-commit install
对所有文件运行
pre-commit run --all-files pre-commit run --show-diff-on-failure --color=always --all-files
更新pre-commit yaml中的包版本
pre-commit autoupdate pre-commit run --show-diff-on-failure --color=always --all-files
发布
发布流程几乎完全自动化。通过标记新版本,CI将构建所有必需的包并将它们推送到PyPI。要发布,创建一个新的问题并按以下清单操作
[ ] 检查 setup.py 中的依赖项是否有效或需要取消锁定,
[ ] 检查 doc/whats_new/v0.X.rst 是否是最新的,
[ ] 最后一次构建master是否成功?
[ ] 创建一个[新版本](https://github.com/holgern/scikit-optimize/releases),
[ ] 向[conda-forge](https://github.com/conda-forge/scikit-optimize-feedstock)发送消息。
在发布版本之前,我们通常先创建一个候选版本。如果下一个版本是v0.X,那么候选版本应该标记为v0.Xrc1。在标记候选版本时,在GitHub上将其标记为“预发布”。
由以下因素促成
scikit-optimize项目得以实施得益于
如果您的雇主允许您在白天工作于scikit-optimize项目,并希望得到认可,请自由地将他们添加到“由以下因素促成”列表中。
scikit_optimize-0.10.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 00a3d91bf9015e292b6e7aaefe7e6cb95e8d25ce19adafd2cd88849e1a0b0da0 |
|
MD5 | b1f0f2000b6a98b3365f0ffa4547627f |
|
BLAKE2b-256 | b3951b433b9eb9eb653fb97fd525552fd027886e3812d7d20d843994263340aa |
scikit_optimize-0.10.2-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 45bc7e879b086133984721f2f6735a86c085073f6c481c2ec665b5c67b44d723 |
|
MD5 | 421085da4a979e4fec5e8990c86f0450 |
|
BLAKE2b-256 | 65cd15c9ebea645cc9860aa71fe0474f4be981f10ed8e19e1fb0ef1027d4966e |