跳转到主要内容

基于模型的序列优化工具箱。

项目描述

Logo

pypi conda CI Status binder codecov Zenodo DOI

Scikit-Optimize

Scikit-Optimize,或skopt,是一个简单高效的库,用于优化(非常)昂贵且噪声大的黑盒函数。它实现了基于序列模型优化的几种方法。skopt旨在在许多环境中易于访问和使用。

该库建立在NumPy、SciPy和Scikit-Learn之上。

我们不执行基于梯度的优化。有关基于梯度的优化算法,请参阅此处scipy.optimize

Approximated objective

经过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。要发布,创建一个新的问题并按以下清单操作

在发布版本之前,我们通常先创建一个候选版本。如果下一个版本是v0.X,那么候选版本应该标记为v0.Xrc1。在标记候选版本时,在GitHub上将其标记为“预发布”。

由以下因素促成

scikit-optimize项目得以实施得益于

Wild Tree Tech NYU Center for Data Science NSF Northrop Grumman

如果您的雇主允许您在白天工作于scikit-optimize项目,并希望得到认可,请自由地将他们添加到“由以下因素促成”列表中。

支持者