Optuna: 一个超参数优化框架¶
Optuna 是一个特别为机器学习设计的自动超参数优化软件框架。它具有命令式的,define-by-run 风格的 API。由于这种 API 的存在,用 Optuna 编写的代码模块化程度很高,Optuna 的用户因此也可以动态地构造超参数的搜索空间。
基本概念¶
我们以如下方式使用 study 和 trial 这两个术语:
Study: 基于目标函数的优化过程
Trial: 目标函数的单次执行过程
请参考下面的示例代码。一个 study 的目的是通过多次 trial (例如 n_trials=100
) 来找出最佳的超参数值集(比如选择 classifier
还是 svm_c
)。而 Optuna 旨在加速和自动化此类 study 优化过程。
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('classifier', ['SVR', 'RandomForest'])
if regressor_name == 'SVR':
svr_c = trial.suggest_loguniform('svr_c', 1e-10, 1e10)
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.load_boston(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.
Communication¶
可在 GitHub Issues 报告bug、提feature request 和问问题。
可在 Gitter 与开发者互动.
可在 StackOverflow 提问。
贡献¶
欢迎大家对Optuna的一切贡献!但是在发送pull request时请遵从 contribution guide 的规范.