使用 Optuna 进行超参数优化
Optuna 是一个用于超参数优化的开源 Python 库,可在多个计算资源之间进行水平缩放。 Optuna 还与 MLflow 集成,用于模型和试验跟踪和监视。
安装 Optuna
使用以下命令安装 Optuna 及其集成模块。
%pip install optuna
%pip install optuna-integration # Integration with MLflow
定义搜索空间并运行 Optuna 优化
以下是 Optuna 工作流中的步骤:
- 定义要优化的目标函数。 在目标函数中,定义超参数搜索空间。
- 创建一个“Optuna 研究”对象,并通过调用该“研究”对象的
optimize
函数以运行优化算法。
下面是 Optuna 文档中的最小化示例。
- 定义目标函数
objective
,并调用suggest_float
函数以定义参数x
的搜索空间。 - 创建一个“研究”,并通过 100 个试验优化
objective
函数,即通过不同的x
值对objective
函数进行 100 次调用。 - 获取“研究”的最佳参数
def objective(trial):
x = trial.suggest_float("x", -10, 10)
return (x - 2) ** 2
study = optuna.create_study()
study.optimize(objective, n_trials=100)
best_params = study.best_params
将 Optuna 试用并行化到多台计算机
可使用 Joblib Apache Spark 后端将 Optuna 试验分发到 Azure Databricks 群集中的多台计算机。
import joblib
from joblibspark import register_spark
register_spark() # register Spark backend for Joblib
with joblib.parallel_backend("spark", n_jobs=-1):
study.optimize(objective, n_trials=100)
与 MLflow 集成
若要跟踪所有 Optuna 试验的超参数和指标,在调用 optimize
函数时,请使用 Optuna 集成模块的 MLflowCallback
。
import mlflow
from optuna.integration.mlflow import MLflowCallback
mlflow_callback = MLflowCallback(
tracking_uri="databricks",
metric_name="accuracy",
create_experiment=False,
mlflow_kwargs={
"experiment_id": experiment_id
}
)
study.optimize(objective, n_trials=100, callbacks=[mlflow_callback])
笔记本示例
此笔记本提供了使用 Optuna 为 Iris 数据集选择 scikit-learn 模型和一组超参数的示例。
在单机 Optuna 工作流之上,笔记本展示了如何
- 通过 Joblib 将 Optuna 试验并行化到多台计算机
- 使用 MLflow 跟踪试验运行