#1简单列举一下日常调参过程中常用的几种方法,具体的原理下次补上。
1. 经验法:
往两个方向调:
1.提高准确率:max_depth, num_leaves, learning_rate
2.降低过拟合:max_bin, min_data_in_leaf;L1, L2正则化;数据抽样, 列采样
1.使用较小的num_leaves,max_depth和max_bin,降低复杂度。
2.使用min_data_in_leaf和min_sum_hessian_in_leaf,该值越大,模型的学习越保守。
3.设置bagging_freq和bagging_fraction使用bagging。
4.设置feature_fraction进行特征采样。
5.使用lambda_l1,lambda_l2和min_gain_to_split正则化。
2. 贪心调参:
先调整对模型影响最大的参数,再调整对模型影响次大的参数,缺点是容易调成局部最优,需要多次调试。日常调参顺序如下:
① num_leaves, max_depth
② min_data_in_leaf, min_child_weight
③ bagging_freq, bagging_fraction, feature_fraction,
④ reg_lambda, reg_alpha
⑤ min_split_gain
1 | from sklearn.model_selection import cross_val_score |
以此类推,按调参顺序依次调整优化,并且可以对每一个最优参数下模型的得分进行可视化。
3. 网格搜索
即穷举搜索,在参数数组里循环遍历,一般大数据集不会用到,因为速度太慢。
1 | from sklearn.model_selection import GridSearchCV |
总体思路是先粗调再细调。在一开始调整时,可设置较大的学习率如0.1,先确定树的个数,再依次调整参数,最后设置较小的学习率如0.05,确定最终参数。
1 | lgb_params = {'num_leaves': range(10, 80, 5), 'max_depth': range(3,10,2)} |
4. 贝叶斯调参
是一种用模型找到目标函数最小值的方法,比网格和随机搜索省时。步骤如下:
① 定义优化函数(rf_cv)
② 建立模型
③ 定义待优化的参数
④ 得到优化结果,并返回要优化的分数指标
1 | from sklearn.model_selection import cross_val_score |
1 | from bayes_opt import BayesianOptimization |
1 | #显示优化结果 |
参数优化完成后,可根据优化后的参数建立新的模型,降低学习率并寻找最优模型迭代次数。
1 | #设置较小的学习率,并通过cv函数确定当前最优的迭代次数 |
模型参数确定之后,建立最终模型并对验证集进行验证。