大家好,我是小寒。
今天给大家分享一个神奇的 python 库,Optuna。
https://github.com/optuna/optuna
Optuna 是一个开源的尖端 Python 库,专为机器学习中的超参数优化而设计。
Optuna 的一些主要优势包括。
高效搜索空间探索:Optuna 采用多种优化算法,可以有效探索搜索空间并识别最佳超参数集。
自动修剪策略:Optuna 支持各种修剪策略,可以自动终止无希望的试验,从而显着减少超参数优化所花费的时间。
轻松集成:Optuna 与多种机器学习框架兼容,例如 TensorFlow、PyTorch 和 scikit-learn,可以轻松集成到你的现有项目中。
灵活的 API:Optuna 灵活的 API 允许你自定义搜索空间、目标函数和评估指标,以满足各种优化问题。
并行化:Optuna 支持优化运行的并行化,允许你利用分布式计算资源并加快优化过程。
可视化工具:Optuna 附带内置可视化工具,例如 matplotlib 和 plotly,使你能够可视化优化过程并分析结果。
pip install optuna
确保你的 python 版本大于等于 3.6 。
目标函数是优化过程的重要组成部分,因为它指导搜索最佳超参数。
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error
def objective(trial):
# Load dataset
data = fetch_california_housing()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Suggest hyperparameters
alpha = trial.suggest_uniform("alpha", 0.0, 1.0)
# Train and evaluate model
model = Ridge(alpha=alpha)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
score = mean_squared_error(y_test, y_pred)
return score
试验对象的 suggest_uniform 方法用于建议 alpha 指定范围内的值。
该函数返回模型预测的均方误差 (MSE),用作优化指标。
Optuna 中的研究对象是共享相同搜索空间和目标函数的试验的集合。
要创建研究对象并优化目标函数,你可以使用以下 optuna.create_study() 和 study.optimize() 方法:
# 创建一个学习对象
study = optuna.create_study(direction= "minimize" )
# 优化目标函数
study.optimize(objective, n_trials=100)
n_trials=100
)。一些常见的建议方法包括:
suggest_uniform(name, low, high):建议在 low 和 high 之间均匀分布的浮点值。
suggest_loguniform(name, low, high):建议在 low 和 high 之间按对数分布的浮点值。
suggest_int(name, low, high) :建议在 low 和 high 之间的整数值。
suggest_categorical(name, choices) :建议在给定列表 choices 中的分类值。
例如,你可以使用 suggest_int 方法为随机森林模型中的超参数 n_estimators 建议一个整数。
from sklearn.ensemble import RandomForestRegressor
def objective(trial):
# Load dataset and split
...
# Suggest hyperparameters
n_estimators = trial.suggest_int("n_estimators", 10, 200)
# Train and evaluate model
model = RandomForestRegressor(n_estimators=n_estimators)
...
return score
study.optimize(objective, n_trials=100)
可以使用 study.best_params 和 study.best_value 属性「访问最佳超参数集和相应的目标函数最小值」。
print("Best hyperparameters:", study.best_params)
print("Best value:", study.best_value)
一些常见的可视化功能包括。
optuna.visualization.plot_optimization_history(study):绘制优化历史记录,显示每次试验的目标函数值。
optuna.visualization.plot_param_importances(study) :绘制参数重要性图,表示优化过程中每个超参数的相对重要性。
import optuna.visualization as vis
vis.plot_optimization_history(study)
你可以通过在创建研究对象时设置 pruner 参数来在优化过程中启用修剪。
pruner = optuna.pruners.MedianPruner()
study = optuna.create_study(direction="minimize", pruner=pruner)
在此示例中,使用了 MedianPruner 。
其简单的集成、高效的搜索算法和先进的功能使其成为优化机器学习模型的宝贵工具。
最后
—