1. 手动设置超参数:
有时候为了节省时间快速验证不用工具进行调参,手动设定超参数,此时一般设置成70%的train, 10%的validation, 20%的test。
由于fit的过程是不断增加tree,所以在train上fit的时候,设置validation set,当在validation上loss不再下降的时候,就停止fit,这样可以避免在train上过拟合。
2. 利用工具包调参
相比gridsearch,hyperopt调参可以设置调参次数max_evals_num,控制调参时间。不至于调起来没完没了让人等得心焦。
一个基本的套路总结如下:
1. 拆分训练集和测试集,例如80%的训练,20%的测试集。
2. 利用hyperopt + 80%的训练集,针对决策树的相关超参数进行调参。
调参时要提供一个评价函数:hyperopt_eval_func()。
例如用train做五折交叉验证:cross_val_score()代表目前这批超参数的效果,避免调参时在tarin上过拟合。
所以这种情况下其实没必要再设置外部的validation集了。
利用hyperopt调参的代码如下:
def hyperopt_eval_func(params, X, y):
'''利用params里定义的模型和超参数,对X进行fit,并返回cv socre。
Args:
@params: 模型和超参数
@X:输入参数
@y:真值
Return:
@score: 交叉验证的损失值
'''
int_feat = ['n_estimators', 'max_depth', 'min_child_weight']
for p in int_feat:
params[p] = int(params[p])
clf = XGBClassifi

本文介绍了两种常见的机器学习调参方法:手动设置超参数和使用Hyperopt工具包自动调参。手动调参通常将数据分为70%训练、10%验证和20%测试,而使用Hyperopt则可在控制调参时间的同时,通过交叉验证避免过拟合,找到最优模型。
最低0.47元/天 解锁文章
1052





