在机器学习和数据科学领域,模型调参是一个不可避免的任务。为了提高模型的性能,通常需要调整不同的超参数。
常用的调参策略包括:
此外还有其他调参的工具包,例如
Hyperopt是一个用于优化算法超参数的开源库,它提供了多种搜索算法,包括随机搜索和基于贝叶斯优化的Tree of Parzen Estimators(TPE)算法。通过调整模型的超参数,Hyperopt帮助实现对目标函数的最大化或最小化,从而提升机器学习模型的性能。
算法介绍:
目前,Hyperopt实现了三种算法:
Hyperopt的设计考虑了基于高斯过程和回归树的贝叶斯优化算法,但目前尚未实现这些算法。
所有这些算法都可以通过两种方式并行化:
Hyperopt相对于其他调参方法的优势在于采用贝叶斯优化实现智能、高效的超参数搜索,但在初始化配置和处理高维空间方面可能存在一定的劣势。
优势
劣势
pip install hyperopt
首先,定义超参数搜索的范围。使用hp.choice
、hp.uniform
等函数定义超参数的类型和取值范围。
from hyperopt import hp
space = {
'learning_rate': hp.uniform('learning_rate', 0.01, 0.1),
'n_estimators': hp.choice('n_estimators', [50, 100, 150]),
'max_depth': hp.choice('max_depth', [5, 10, 15]),
# 添加其他超参数...
}
编写目标函数,即模型评估的指标,作为贝叶斯优化的目标。这个函数的输入是超参数组合,输出是模型在验证集上的性能指标。
def objective(params):
# 训练模型并返回性能指标
# ...
return performance_metric
使用 fmin
函数运行 Hyperopt 优化过程。
from hyperopt import fmin, tpe, Trials
trials = Trials()
best = fmin(fn=objective,
space=space,
algo=tpe.suggest,
max_evals=50,
trials=trials)
最优超参数存储在best
字典中。
print("Best Hyperparameters:", best)
下面是一个简单的调参代码示例,使用 XGBoost
模型:
import xgboost as xgb
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from hyperopt import hp, fmin, tpe, Trials
# 加载数据
digits = load_digits()
X_train, X_val, y_train, y_val = train_test_split(digits.data, digits.target, test_size=0.2, random_state=42)
# 定义超参数搜索空间
space = {
'learning_rate': hp.uniform('learning_rate', 0.01, 0.1),
'n_estimators': hp.choice('n_estimators', [50, 100, 150]),
'max_depth': hp.choice('max_depth', [5, 10, 15]),
}
# 定义目标函数
def objective(params):
model = xgb.XGBClassifier(**params)
model.fit(X_train, y_train)
y_pred = model.predict(X_val)
accuracy = accuracy_score(y_val, y_pred)
return -accuracy # 负号因为 fmin 会最小化目标函数
# 运行 Hyperopt 优化
trials = Trials()
best = fmin(fn=objective,
space=space,
algo=tpe.suggest,
max_evals=50,
trials=trials)
# 获取最优超参数
print("Best Hyperparameters:", best)
这个例子中,我们使用了 XGBoost 分类器,并通过 Hyperopt 寻找最佳的学习率、树的数量和最大深度等超参数。根据实际需求,可以调整搜索空间和目标函数。
官方文档: Hyperopt Documentation
其他文章链接:
Hyperopt - Alternative Hyperparameter Optimization Technique 主要是参数介绍
HyperOpt for Automated Machine Learning With Scikit-Learn - MachineLearningMastery.com 代码有些错误