Scikit-learn GBDT算法库总结与实践

        上篇我们对传统的GBDT算法原理进行了总结,相信大家对GBDT的算法原理有了一定的了解。本篇我们就探讨Scikit-learn中GBDT算法库的使用。
        本篇我们先对Scikit-learn中GBDT算法库进行概述;再分别介绍Boosting框架的常用参数和基学习器CART回归树的常用参数;最后利用一个示例数据展示下GBDT的学习过程,以更直观的方式理解GBDT的原理。

1)Scikit-learn GBDT算法库类概述

        在梯度提升树(GBDT)算法原理详细总结中我们提到,GBDT即可以处理分类任务又可以处理回归任务。在Scikit-learn中,GBDT分类算法对应GradientBoostingClassifier,回归算法对应GradientBoostingRegressor。两者参数类型基本相同,只有损失函数loss不同,具体官方API如下。不管GradientBoostingClassifier还是GradientBoostingRegressor,它们的参数都可以分为两个类型:第一类是Boosting框架参数,第二类是CART回归树的重要参数。下面我们也按照这两部分对GBDT算法库进行探讨,对于GradientBoostingClassifier,GradientBoostingRegressor不同的参数,会进行说明。
       
GradientBoostingClassifier 官方API:
        class sklearn.ensemble.GradientBoostingClassifier(loss=‘deviance’, learning_rate=0.1, n_estimators=100, subsample=1.0, criterion=‘friedman_mse’, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_depth=3, min_impurity_decrease=0.0, min_impurity_split=None, init=None, random_state=None, max_features=None, verbose=0, max_leaf_nodes=None, warm_start=False, presort=‘deprecated’, validation_fraction=0.1, n_iter_no_change=None, tol=0.0001, ccp_alpha=0.0)[source]

GradientBoostingRegressor官方API:
        class sklearn.ensemble.GradientBoostingRegressor(loss=‘ls’, learning_rate=0.1, n_estimators=100, subsample=1.0, criterion=‘friedman_mse’, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_depth=3, min_impurity_decrease=0.0, min_impurity_split=None, init=None, random_state=None, max_features=None, alpha=0.9, verbose=0, max_leaf_nodes=None, warm_start=False, presort=‘deprecated’, validation_fraction=0.1, n_iter_no_change=None, tol=0.0001, ccp_alpha=0.0)[source]

2)Boosting框架参数

        我们先对Boosting框架参数进行解读。

  • n_estimators,CART回归树的数量,默认100
           n_estimators,可以理解成CART回归树的数量,也可以理解为Boosting最大迭代次数。一般情况,n_estimators越大,模型效果越好,但模型更易过拟合,需要结合learning_rate,subsample以及cart回归树剪枝一起权衡。

  • learning_rate,权重缩减系数 ν \nu ν,也称作步长,默认0.1
           用来控制模型过拟合的参数。在没有权重缩减时,模型表达式为:
    f m ( x ) = f m − 1 ( x ) + g m ​ ( x ) f_m (x)=f_{m−1} (x)+g _m​ (x) fm(x)=fm1(x)+gm(x)
    为了防止过拟合,sklearn加入了权重衰减系数 ν \nu ν, ν \nu ν∈(0,1],模型表达式变成:
    f m ( x ) = f m − 1 ( x ) + ν g m ​ ( x ) f_m (x)=f_{m−1} (x)+\nu g _m​ (x) fm(x)=fm1(x)+νgm(x)
            对于同样的训练集拟合效果,较小的 ν \nu ν意味着我们需要更多的n_estimators,模型训练的时间也越多。一般情况,learning_rate和n_estimators一起来决定算法的拟合效果。所以这两个参数n_estimators和learning_rate需要一起调参。

  • subsample,子采样比例,默认为1
           用来控制模型过拟合的参数。subsample,是指采样多少比例的训练样本去训练基学习器,这里的采样方式是不放回的采样。当subsample=1,使用全部样本,等于没有使用子采样。当subsample<1,则只有一部分样本会去做GBDT的决策树拟合。subsample<1可以减少方差,防止模型过拟合,但是会增加样本拟合的偏差,因此可以增加n_estimators。因此,一般情况下,取值不能太低。

  • loss,损失函数,GradientBoostingClassifier,GradientBoostingRegressor的损失函数不同。

    • GradientBoostingClassifier的损失函数,默认deviance
             对于分类问题,GradientBoostingClassifier的损失函数有对数似然损失函数"deviance"和指数损失函数"exponential"两者输入选择。 使用对数似然损失函数"deviance",即为梯度提升树(GBDT)算法原理详细总结中介绍的分类情况GBDT算法过程。使用指数损失函数"exponential",GBDT退化成Adaboost算法。一般情况,保持默认"deviance"。

    • GradientBoostingRegressor的损失函数, 默认ls
             对于回归问题,GradientBoostingRegressor的损失函数有均方误差"ls",绝对损失"lad",huber损失"huber",分位数损失"quantile"。默认均方误差"ls"选择。
             均方误差损失函数:
      L ( y , f ( x ) ) = ( y − f ( x ) ) 2 L(y,f(x))=(y-f(x))^2 L(y,f(x))=(yf(x))2
             绝对值损失函数:
      L ( y , f ( x ) ) = ∣ y − f ( x ) ∣ L(y,f(x))=|y-f(x)| L(y,f(x))=yf(x)
             huber损失,它是均方差和绝对损失的折中,对于远离中心的异常点,采用绝对损失,对于中心附近的点采用均方差。这个界限一般用分位数点度量。损失函数如下:
      { 1 2 (

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值