超参数优化框架
项目描述
Optuna: 一个超参数优化框架
:链接: 网站 | :页码: 文档 | :齿轮: 安装指南 | :笔: 教程 | :灯泡: 示例 | Twitter | LinkedIn | Medium
Optuna 是一个自动超参数优化软件框架,特别设计用于机器学习。它提供了一个命令式、运行时定义的用户 API。得益于我们的 运行时定义 API,使用 Optuna 编写的代码具有高模块性,Optuna 的用户可以动态构建超参数的搜索空间。
:扩音器: 新闻
- 2024 年 8 月 28 日:我们发布了一篇关于 隐式自然梯度优化(INGO) 的文章,这是 OptunaHub 中新支持的采样器。
- 2024 年 8 月 20 日:我们发布了一篇关于 ArtifactStore 的文章,这是从 Optuna 4.0 开始官方支持的。
- 2024 年 8 月 15 日:我们发布了一篇关于 CatCMA 的文章,这是在 OptunaHub 中新支持的采样器。
- 2024 年 8 月 7 日:我们发布了一篇关于 Optuna 4.0 中多目标
TPESampler
速度显著(300 倍)提高的文章。 - 2024 年 7 月 16 日:Optuna 的功能共享平台 OptunaHub 的测试版现已提供!请查看我们文章中的详细信息 。
- 2024 年 7 月 12 日:Optuna 4.0 的测试版现已提供!您可以通过
pip install -U --pre optuna
安装测试版。最新版本在此 处 可以找到。
:火焰: 关键功能
Optuna 具有以下现代功能
- 轻量级、多功能且平台无关的架构
- 通过简单的安装和少量要求处理各种任务。
- Python 风格的搜索空间
- 使用熟悉的 Python 语法定义搜索空间,包括条件语句和循环。
- 高效的优化算法
- 采用最先进的算法进行超参数采样和高效地剪枝无望的试验。
- 易于并行化
- 通过少量或没有代码更改即可将研究扩展到数十或数百个工作者。
- 快速可视化
- 从各种绘图函数中检查优化历史。
基本概念
我们使用 研究 和 试验 术语如下
- 研究:基于目标函数的优化
- 试验:目标函数的单次执行
请参考下面的示例代码。一个 研究 的目标是通过对多个 试验(例如,n_trials=100
)进行多次尝试,找出最优的超参数值集(例如,regressor
和 svr_c
)。Optuna 是一个旨在自动化和加速优化 研究 的框架。
使用 scikit-learn 的示例代码
import ...
# Define an objective function to be minimized.
def objective(trial):
# Invoke suggest methods of a Trial object to generate hyperparameters.
regressor_name = trial.suggest_categorical('regressor', ['SVR', 'RandomForest'])
if regressor_name == 'SVR':
svr_c = trial.suggest_float('svr_c', 1e-10, 1e10, log=True)
regressor_obj = sklearn.svm.SVR(C=svr_c)
else:
rf_max_depth = trial.suggest_int('rf_max_depth', 2, 32)
regressor_obj = sklearn.ensemble.RandomForestRegressor(max_depth=rf_max_depth)
X, y = sklearn.datasets.fetch_california_housing(return_X_y=True)
X_train, X_val, y_train, y_val = sklearn.model_selection.train_test_split(X, y, random_state=0)
regressor_obj.fit(X_train, y_train)
y_pred = regressor_obj.predict(X_val)
error = sklearn.metrics.mean_squared_error(y_val, y_pred)
return error # An objective value linked with the Trial object.
study = optuna.create_study() # Create a new study.
study.optimize(objective, n_trials=100) # Invoke optimization of the objective function.
[!注意] 更多示例可以在 optuna/optuna-examples 中找到。
这些示例涵盖了多种问题设置,如多目标优化、约束优化、剪枝和分布式优化。
安装
Optuna 可在 Python 包索引 和 Anaconda Cloud 上找到。
# PyPI
$ pip install optuna
# Anaconda Cloud
$ conda install -c conda-forge optuna
[!IMPORTANT] Optuna 支持 Python 3.7 或更高版本。
此外,我们在 DockerHub 上提供了 Optuna Docker 镜像。
集成
Optuna 与各种第三方库具有集成功能。集成功能可在 optuna/optuna-integration 找到,文档可在 此处 查看。
支持的集成库
Web Dashboard
Optuna Dashboard 是 Optuna 的实时网络仪表板。您可以在图表和表格中检查优化历史、超参数重要性等。您无需创建 Python 脚本来调用 Optuna 的可视化 函数。欢迎提出功能请求和错误报告!
optuna-dashboard
可通过 pip 安装
$ pip install optuna-dashboard
[!TIP] 请使用以下示例代码检查 Optuna Dashboard 的便利性。
启动 Optuna Dashboard 的示例代码
将以下代码保存为 optimize_toy.py
。
import optuna
def objective(trial):
x1 = trial.suggest_float("x1", -100, 100)
x2 = trial.suggest_float("x2", -100, 100)
return x1 ** 2 + 0.01 * x2 ** 2
study = optuna.create_study(storage="sqlite:///db.sqlite3") # Create a new study with database.
study.optimize(objective, n_trials=100)
然后尝试以下命令
# Run the study specified above
$ python optimize_toy.py
# Launch the dashboard based on the storage `sqlite:///db.sqlite3`
$ optuna-dashboard sqlite:///db.sqlite3
...
Listening on http://localhost:8080/
Hit Ctrl-C to quit.
OptunaHub
OptunaHub 是 Optuna 的功能共享平台。您可以使用已注册的功能并发布您的包。
使用已注册功能
optunahub
可通过 pip 安装
$ pip install optunahub
您可以使用 optunahub.load_module
加载已注册模块。
import optuna
import optunahub
def objective(trial: optuna.Trial) -> float:
x = trial.suggest_float("x", 0, 1)
return x
mod = optunahub.load_module("samplers/simulated_annealing")
study = optuna.create_study(sampler=mod.SimulatedAnnealingSampler())
study.optimize(objective, n_trials=20)
print(study.best_trial.value, study.best_trial.params)
有关更多详细信息,请参阅 optunahub 文档。
发布您的包
您可以通过 optunahub-registry 发布您的包。查看 OptunaHub 教程。
沟通
- GitHub 讨论区 用于提问。
- GitHub 问题 用于错误报告和功能请求。
贡献
欢迎对 Optuna 的任何贡献!
如果您是 Optuna 的新用户,请查看 良好的首次问题。它们相对简单,定义明确,通常是您熟悉贡献工作流程和与其他开发人员交流的好起点。
如果您已经为 Optuna 做出过贡献,我们建议您查看其他 欢迎贡献的问题。
有关如何为项目做出贡献的一般指南,请参阅 CONTRIBUTING.md。
参考
如果您在您的研究项目中使用了 Optuna,请引用我们的 KDD 论文 "Optuna:下一代超参数优化框架"。
BibTeX
@inproceedings{akiba2019optuna,
title={{O}ptuna: A Next-Generation Hyperparameter Optimization Framework},
author={Akiba, Takuya and Sano, Shotaro and Yanase, Toshihiko and Ohta, Takeru and Koyama, Masanori},
booktitle={The 25th ACM SIGKDD International Conference on Knowledge Discovery \& Data Mining},
pages={2623--2631},
year={2019}
}
许可证
MIT 许可证(见 LICENSE)。
Optuna 使用来自 SciPy 和 fdlibm 项目的代码(见 LICENSE_THIRD_PARTY)。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源代码分发
构建分发
optuna-4.0.0.tar.gz的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 844949f09e2a7353ab414e9cfd783cf0a647a65fc32a7236212ed6a37fe08973 |
|
MD5 | f322bea157b394b2f5d9b71d15fbdf35 |
|
BLAKE2b-256 | dc0b425040287cd9411db6708cfa5baf36acd9374f52caaca9f90da1f3f3b46b |
optuna-4.0.0-py3-none-any.whl的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | a825c32d13f6085bcb2229b2724a5078f2e0f61a7533e800e580ce41a8c6c10d |
|
MD5 | 4e280bf850a36457356b8282253d8859 |
|
BLAKE2b-256 | 4e412a2f5ed6c997367ab7055185cf66d536c228b15a12b8e112a274808f48b5 |