跳转到主要内容

超参数优化框架

项目描述

Optuna: 一个超参数优化框架

Python pypi conda GitHub license Read the Docs Codecov

:链接: 网站 | :页码: 文档 | :齿轮: 安装指南 | :笔: 教程 | :灯泡: 示例 | 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 具有以下现代功能

基本概念

我们使用 研究试验 术语如下

  • 研究:基于目标函数的优化
  • 试验:目标函数的单次执行

请参考下面的示例代码。一个 研究 的目标是通过对多个 试验(例如,n_trials=100)进行多次尝试,找出最优的超参数值集(例如,regressorsvr_c)。Optuna 是一个旨在自动化和加速优化 研究 的框架。

使用 scikit-learn 的示例代码

Open in Colab

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

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 教程

沟通

贡献

欢迎对 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)。

项目详情


发布历史 发布通知 | RSS 源

下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

optuna-4.0.0.tar.gz (280.2 kB 查看散列值)

上传时间 源代码

构建分发

optuna-4.0.0-py3-none-any.whl (362.8 kB 查看散列值)

上传时间 Python 3

支持者:

AWSAWS 云计算和安全赞助商 DatadogDatadog 监控 FastlyFastly CDN GoogleGoogle 下载分析 MicrosoftMicrosoft PSF 赞助商 PingdomPingdom 监控 SentrySentry 错误记录 StatusPageStatusPage 状态页面