模型算法_集成模型BoostingGBDT算法

GBDT(Gradient Boosting Decision Tree)梯度提升决策树是提升树(Boosting Tree)的一种改进算法。前面讲的集成模型Boosting-Adaboost 算法是利用前一轮迭代弱学习器的误差率来更新训练集的权重,直至误差可接受时对所有弱分类器进行线性组合,是通过直接拟合真实值来构建模型的。Boosting Tree非首轮迭代是在每个基分类器上拟合上一个分类器的残差,寻找误差下降最快的分割点,每次都加入新的基分类器,来提升模型的精度。

举个例子假设一座山海拔1万米,我们首先用5000米去拟合,发现损失(差距)有5000米,第二轮我们用3000去拟合上一轮的损失,发现差距还有2000,第三轮我们用1500去拟合上一轮剩下的差距,差距只剩下500,如果迭代次数已完成或在误差接受范围内,则结束拟合,每一轮迭代,拟合的高度误差都会减小。最后将每次拟合的高度加起来是算法的拟合结果,前三轮的拟合结果是:5000+3000+1500=9500米。对于提升树来讲,损失函数是平方损失,只需要简单地拟合当前模型的残差。但是对于其他损失函数(如多维度的交叉熵损失函数),不容易直接获得模型的残差,每一步的拟合优化就比较困难。在此背景下,Freidman提出了GBDT,用损失函数的负梯度来拟合损失的近似值。进而拟合一个CART回归树。GBDT 算法提供了可选择的损失函数来处理分类、回归问题,例如对于分类问题可以使用指数损失函数、对数似然损失函数。对于回归问题可以选用均方差损失函数、绝对损失函数。GBDT的优点:
  • 可以处理连续值和离散值数据,故使用于分类问题与回归问题。

  • 损失函数可较好地处理异常值。比如 Hube 损失函数和 Quantile 损失函数。

GBDT的缺点:由于弱学习器之间存在依赖关系,难以并行训练数据,效率较低。需要通过自采样的 SGBT(Stochastic Gradient Boosting Tree,随机梯度提升树) 来达到部分并行。SGBT只是在GBDT的基础上加了一个随机子采样(不重复),不把全部的数据都放进去做boosting,而是只随机选取一部分,这样可以减少计算量,加快模型学习的速度。

(四)GBDT参数

sklearn中的GBDT参数列表,分类器与回归器:

ea8b4613085f8a69922f7d988b2ff93a.png

db0e5adb45b418c8976cfeda56f11222.png

由于GBDT使用了CART回归决策树,因此它的参数很多是来源于决策树,所以可以把参数分为两类,一类是boosting框架相关的参数,另一类是决策树相关参数,与DecisionTreeClassifier和DecisionTreeRegressor的参数类似。 (1)boosting框架相关的参数
  • n_estimators: 是弱学习器的最大迭代次数,或者说最大的弱学习器的个数,默认值为100。

    n_estimators太小时,容易欠拟合,n_estimators太大时,容易过拟合。通常n_estimators和learning_rate权衡使用。

  •  learning_rate: 即每个弱学习器的权重缩减系数ν,也称作步长,为了防止过拟合,加上了正则化项,这个正则化项通常称为步长(learningrate),取值范围为(0,1]。

    对于同样的训练集拟合效果,较小的ν意味着我们需要更多的弱学习器的迭代次数。

    通常用步长和迭代最大次数n_estimators共同决定了算法的拟合效果。

    所以这两个参数n_estimators和learning_rate要权衡调参。

    通常 learning_rate可以从小值开始调参,也就是使该弱分类器从小到大逐渐发挥作用,默认是1。

  • subsample: 用于拟合单个若学习器的样本比例,即子采样,取值为(0,1]。注意这里的子采样和随机森林不一样,随机森林使用的是放回抽样,而这里是不放回抽样。如果取值为1,则全部样本都使用,相当于没有使用子采样。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差,因此取值不能太低。推荐在[0.5, 0.8]之间,默认是1.0,即不使用子采样。  subsample与n_estimators交互使用。    

  •  init: 即初始化的弱学习器,默认为None,则用训练集样本来做样本集的初始化分类回归预测,否则用init参数提供的学习器做初始化分类回归预测。      

  • loss: 即GBDT算法中的损失函数。

  1. 对于分类模型,有对数似然损失函数"deviance"和指数损失函数"exponential"两者输入选择。默认是对数似然损失函数"deviance"。推荐使用默认的"deviance",而指数损失函数则回到了Adaboost算法。        

  2. 对于回归模型,loss参数值:{'ls ', ' lad ', ' huber ', ' quantile '},可选(默认=' ls ')

    ls:leastsquares regression,最小二乘回归,

    lad:leastabsolute deviation,最小绝对偏差,

    huber是ls和Lad的结合。如果是噪音数据多,则推荐用抗噪音的损失函数"huber".

    quantile:分位数回归,(使用alpha来指定分位数),若需要对训练集进行分段预测的时候,则采用“quantile”

  • alpha:该参数仅针对GradientBoostingRegressor,当使用Huber损失函数和quantile分位数损失函数时,需要指定分位数的值alpha-quantile,默认是0.9。

(2)决策树参数
  •  max_features: 划分时考虑的最大特征数, 默认为None

  1. 整型:max_features是指定的整型数字

  2. 浮点型:max_features= int(max_features *n_features)

  3. auto:max_features=n_features

  4. sqrt: max_features=sqrt(n_features)

  5. log2: max_features=log2(n_features)

  6. None:max_features=n_features

其中n_features为样本总特征数, 如果样本特征数较多,可通过上述方法控制最大特征数,控制决策树的生成时间。
  • max_depth:  单个决策树最大深度,默认值是3。最大深度限制了树中的节点数,如果样本特征数较多且无共线性,可尝试增加深度。

  • min_samples_split:分割一个内部节点所需最小样本数: 这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。默认是2。如果样本量数量级非常大,则可以增大这个值。

  1.  如果是int,则min_samples_split作为最小值。

  2. 如果是float,则ceil(min_samples_split* n_samples)为每个分割的最小样本数。(在0.18版本中更改:增加了浮点值)

  •  min_samples_leaf:叶子节点最少样本数: 这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。默认是1,可以输入最少的样本数的整数,或者最少样本数占样本总数的百分比。如果样本数量级非常大,则可以增大这个值。

  • min_weight_fraction_leaf:叶子节点最小的样本权重,这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。默认是0,即不考虑权重问题。有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重。

  • max_leaf_nodes:最大叶子节点数, 通过限制最大叶子节点数,可以防止过拟合,默认是"None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。

  • min_impurity_decrease:浮点型,默认为0.0,如果节点的分裂导致不纯度的减少(分裂后样本比分裂前更加纯净)大于或等于min_impurity_decrease,则分裂该节点。

参考文献:

https://scikit-learn.org/

https://numpy.org/

https://www.cnblogs.com/pinard/p/6143927.html

https://www.cnblogs.com/pinard/p/6136914.html


欢迎关注【潇杂想】

295233524fc216c8e450e56245bea15e.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值