GBDT梯度提升算法调参

GBDT梯度提升算法调参

标签(空格分隔): GBDT,sklearn实践


最近在学习调参,并在网上搜到一篇很好的教学帖子[链接](https://www.analyticsvidhya.com/blog/2016/02/complete-guide-parameter-tuning-gradient-boosting-gbm-python/),按照其指导,数据集采用经典的波士顿房价预测。

一、相关参数

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.
其他参数*

(a) 树相关参数

  1. min_samples_split
    最小划分样本数目,控制过拟合,但值太高容易欠拟合,交叉验证调整
  2. min_samples_leaf
    节点最小样本数目,不平衡分类问题需要设置较低的值,防止最小类别落入最大类别区域内
  3. min_weight_fraction_leaf
    同2相同,只不过换成样本值的百分比,2或3只设置一个就行
  4. max_depth
    树的最大深度,控制过拟合,通过交叉验证调参
  5. max_leaf_nodes
    最大叶子数目,二叉树与4中树的深度相关(2的n次方),如果这个值设置了,GBDT会忽略4
  6. max_features
    划分节点考虑的最大特征数目,优先选总数目的平方根,但也要检查是否达到总数目30%-40%的范围内
    太高容易导致过拟合

(b)boosting相关参数

  1. learning_rate
    学习率控制树估计值变化的幅度,较小的值泛化的更好(老师推荐最好小于0.1), 但需要计算更多的树,计算代价较大
  2. n_estimators
    树的数目,交叉验证调参
  3. subsample
    每棵树考虑样本的数目,值稍微小于1就可以降低方差,模型会更稳健,一般来说0.8就可以,不过也可以调整的更好

(c)其他参数

损失函数、random-status等,详见sklearn库

二、创建基准模型

基准模型参数:
Model Report
MSE: 12.7987
R2: 0.8463
CV score: Mean - 0.8786209 | Std - 0.04793263 | Min - 0.7895223 | Max - 0.9306157

二、参数调整的通用方法

学习率和树的数目是需要权衡的参数,一般来说学习率较低时还都不错,我们只需要训练足够多的树。但是对于特定学习率,树的数目很高时,可能导致过拟合,如果调低学习率增加树,又会引起计算时间的增长。
因此可采用如下调整方式:
a.选择相对较高的学习率, 一般默认0.1即可,不过有时根据问题不同可能选择0.05-0.2
b.选择对应该学习率的最优的树数目,一般在40-70之间(这个范围值值得商榷,可能作者是针对其采用的数据集给的)。要考虑运行效率,因为后面还要测试其他参数
c.调整生成树对应参数
d.调低学习率,增加树的数目,来得到更稳健的模型。

### 1.初始值设置
调参之前,通常可以采用如下初始值:
min_samples_split=3, 通常选择样本总数目的0.5%-1%
min_samples_leaf=5, 通常靠直觉
max_depth=5, 应该选择5-8,本数据集样本较少,所以选择较小值
max_features=’sqrt’,上面说了
subsample=0.8,通常选择该初始值

###2.选择学习率0.1时最优树数目
采用以上初始值,从20-200范围内用函数GridSearchCV搜索最优树数目,得到如下结果:
{‘n_estimators’: 190} 0.885812087298
但这里’n_estimators’: 190,是我们取的极值,所以有必要提高,看最优值是否依赖该参数:
取20-350:
{‘n_estimators’: 280} 0.869479486516

如果得到的树数目过少,可以适当降低学习率,比如0.05,再gridsearch下
如果很高的话,就要考虑调高学习率,否则计算时间较长。在实践中应权衡这两个参数值
这里考虑提高学习率为0.15,此时n_estimators=150

###3.调整树参数
接下来,调整树参数,可以采用如下顺序:
调整max_depth and num_samples_split
调整min_samples_leaf
调整max_features
调参顺序是我们在实践中要认真考虑的,应首先调对结果影响最大的参数,比如max_depth and num_samples_split。
(1)max_depth and num_samples_split
max_depth取3-12,steps=2
min_samples_split取2-10,steps=2
得到如下结果:
{‘min_samples_split’: 2, ‘max_depth’: 5}
R2=0.86399602134
(2)min_samples_leaf
min_samples_leaf取2-10,结果如下:
{‘min_samples_leaf’: 2} R2=0.865916149014
代到测试集,验证下:
Model Report
MSE: 10.0156
R2: 0.8974
CV score: Mean - 0.8659161 | Std - 0.08520274 | Min - 0.6988263 | Max - 0.9350607
相对于基准,已经提高了几个百分点。
(3)max_features
max_features取3-13, step=1
{‘max_features’: 3} 0.876187111194
与‘sqrt’结果相同,所以初始值就是最好的

4.调整boosting参数

学习率、树的数目已经挑过了,剩下的就是subsample,取0.6,0.7,0.75,0.8,0.85,0.9
{‘subsample’: 0.8} 0.876187111194
初始值也是最好的

5.调低学习率,增加树的数目,来得到更稳健的模型

按照比例调整:
(0.1, 100):
Model Report
MSE: 11.7713
R2: 0.8794
CV score: Mean - 0.8678649 | Std - 0.07578604 | Min - 0.7182905 | Max - 0.925774
(0.075, 300):
Model Report
MSE: 11.0081
R2: 0.8873
CV score: Mean - 0.8742316 | Std - 0.07110451 | Min - 0.7368456 | Max - 0.9341335
(0.05, 450):
Model Report
MSE: 10.3068
R2: 0.8944
CV score: Mean - 0.8709068 | Std - 0.07850116 | Min - 0.7154469 | Max - 0.9263954
(0.005, 4500):
Model Report
MSE: 9.9805
R2: 0.8978
CV score: Mean - 0.8743913 | Std - 0.07625798 | Min - 0.72629 | Max - 0.9346266
(0.0025, 9000):
Model Report
MSE: 9.9531
R2: 0.8981
CV score: Mean - 0.8746416 | Std - 0.07570489 | Min - 0.727559 | Max - 0.9314996

由此可以看到,随着学习率降低,树数目增加,测试集MSE,R2还是在提高的,但计算时间是个问题。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值