对于GBDT的参数调整,上一篇已经通过实例讲明,不过调整参数确实重要,继续总结一下通用套路。
1、相关参数
GBDT算法参数主要分为三个类别:
1.Tree-Specific Parameters: These affect each individual tree in the model.
树相关参数,决定每棵树的结构
2.Boosting Parameters: These affect the boosting operation in the model.
提升相关参数,影响提升操作
3.Miscellaneous Parameters: Other parameters for overall functioning.
其他参数*
2、 树相关参数
- min_samples_split
最小划分样本数目,控制过拟合,但值太高容易欠拟合,交叉验证调整 - min_samples_leaf
节点最小样本数目,不平衡分类问题需要设置较低的值,防止最小类别落入最大类别区域内 - min_weight_fraction_leaf
同2相同,只不过换成样本值的百分比,2或3只设置一个就行 - max_depth
树的最大深度,控制过拟合,通过交叉验证调参 - max_leaf_nodes
最大叶子数目,二叉树与4中树的深度相关(2的n次方),如果这个值设置了,GBDT会忽略4 - max_features
划分节点考虑的最大特征数目,优先选总数目的平方根,但也要检查是否达到总数目30%-40%的范围内
太高容易导致过拟合
3、boosting相关参数
- learning_rate
学习率控制树估计值变化的幅度,较小的值泛化的更好(老师推荐最好小于0.1), 但需要计算更多的树,计算代价较大 - n_estimators
树的数目,交叉验证调参 - subsample
每棵树考虑样本的数目,值稍微小于1就可以降低方差,模型会更稳健,一般来说0.8就可以,不过也可以调整的更好
4、其他参数损失函数、random-status等,详见sklearn库
5、参数调整的通用方法
学习率和树的数目是需要权衡的参数,一般来说学习率较低时还都不错,我们只需要训练足够多的树。但是对于特定学习率,树的数目很高时,可能导致过拟合,如果调低学习率增加树,又会引起计算时间的增长。
因此可采用如下调整方式:
1.选择相对较高的学习率, 一般默认0.1即可,不过有时根据问题不同可能选择0.05-0.2
2.选择对应该学习率的最优的树数目,要考虑运行效率,因为后面还要测试其他参数
3.调整生成树对应参数
4.调低学习率,增加树的数目,来得到更稳健的模型。
初始值设置
调参之前,通常可以采用如下初始值:
min_samples_split=3, 通常选择样本总数目的0.5%-1%
min_samples_leaf=5 ;max_depth=5, 通常选择选择3-8 ;max_features=’sqrt’
subsample=0.8,通常选择该初始值
选择设定的初始学习率时最优树数目
采用以上初始值,从20-200范围内用函数GridSearchCV搜索最优树数目,如果得到的树数目过少,可以适当降低学习率,再gridsearch下如果很高的话,就要考虑调高学习率,否则计算时间较长。在实践中应权衡这两个参数值 。
调整树参数
接下来,调整树参数,可以采用如下顺序:调整max_depth 和 num_samples_split ;max_depth 取3-12,steps=2 ;min_samples_split取2-10,steps=2
调整min_samples_leaf ;min_samples_leaf取2-10
调整max_features ;max_features取3-13,step=1
调参顺序是我们在实践中要认真考虑的,应首先调对结果影响最大的参数,比如max_depth and num_samples_split。
调整boosting参数
先调整学习率、树的数目。 随着学习率降低,树数目增加,测试集MSE,R2还是在提高的,但计算时间是个问题。,剩下的就是subsample。