集成学习算法梳理——GBDT

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/JN_rainbow/article/details/89074766

文章目录

GBDT概述

GBDT(Gradient Boosting Decision Tree, 梯度提升决策树)不仅可以用于分类问题,还可以用于回归问题,GBDT的核心思想在于,每一棵树学习的是之前所有树的整体预测和标签的误差,这里称之为残差. 即给定A的真实年龄为18,第一棵树预测的年龄是12岁,那么第二棵树预测的目标应当是6岁(18-12)…

GBDT中的所有的树都是CART回归树,而不是分类树.

前向分步算法

对于加法模型 f(x)=∑m=1Mβmb(x;γm)f(x)=\sum_{m=1}^M\beta_mb(x;\gamma_m)f(x)=m=1∑M​βm​b(x;γm​) 其中b(x;γm)b(x;\gamma_m)b(x;γm​)为基函数,γm\gamma_mγm​为基函数的参数,βm\beta_mβm​为基函数的系数. 在给定训练数据及损失函数的条件下,学习加法模型f(x)f(x)f(x)成为经验风险极小化即损失函数极小化问题. min⁡βm,γm∑i=1NL(yi,∑m=1Mβmb(xi;γm))\min_{\beta_m,\gamma_m}\sum_{i=1}^NL\Big(y_i,\sum_{m=1}^M\beta_mb(x_i;\gamma_m))βm​,γm​min​i=1∑N​L(yi​,m=1∑M​βm​b(xi​;γm​)) 前向分步算法求解这一优化问题的想法是:从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数,就可以简化优化的复杂度,每一步只需要优化如下损失函数: min⁡β,γ∑i=1NL(yi,βb(xi;γ))\min_{\beta,\gamma}\sum_{i=1}^NL(y_i,\beta b(x_i;\gamma))β,γmin​i=1∑N​L(yi​,βb(xi​;γ)) 算法

输入: 训练数据集T,损失函数L(y,f(x))L(y,f(x))L(y,f(x)),基函数集{b(x;γ)}\{b(x;\gamma)\}{b(x;γ)}

输出: 加法模型f(x)f(x)f(x)

  1. 初始化f0(x)=0f_0(x)=0f0​(x)=0.
  2. 对m=1,2…,Mm=1,2\dots,Mm=1,2…,M
    1. 极小化损失函数 (βm,γm)=argmin⁡β,γ∑i=1NL(yi,fm−1(xi)+βb(xi;γ)) (\beta_m,\gamma_m)=arg \min_{\beta,\gamma}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+\beta b(x_i;\gamma)) (βm​,γm​)=argβ,γmin​i=1∑N​L(yi​,fm−1​(xi​)+βb(xi​;γ)) 得到其参数βm,γm\beta_m,\gamma_mβm​,γm​
    2. 更新 fm(x)=fm−1(x)+βmb(x;γm)f_m(x) = f_{m-1}(x) + \beta_mb(x;\gamma_m)fm​(x)=fm−1​(x)+βm​b(x;γm​)
  3. 得到加法模型 f(x)=fM(x)=∑m=1Mβmb(x;γm)f(x) = f_M(x) = \sum_{m=1}^M\beta_mb(x;\gamma_m)f(x)=fM​(x)=m=1∑M​βm​b(x;γm​)

这样就将同时求解从m=1m=1m=1到M所有参数βm,γm\beta_m,\gamma_mβm​,γm​的优化问题简化为逐次求解各个βm,γm\beta_m,\gamma_mβm​,γm​的优化问题.

损失函数

负梯度拟合

利用损失函数的负梯度来作为残差的估计值. 当损失函数为平方误差损失函数时,负梯度就是残差,对于一般的损失函数,它则是残差的近似值.

损失函数

对于分类问题,常用的损失函数为logloss.

对于回归问题,常用的损失函数为MSE、MAE.

分类算法

  1. 损失函数采用指数损失函数
  2. 损失函数采用对数似然损失函数

正则化

  1. Early Stop
  2. subsample
  3. 弱分类器剪枝

优缺点

优点

  1. 可以灵活处理各种类型的数据,包括连续值和离散值.
  2. 在相对少的调参时间情况下,预测的准确率也可以比较高。这个是相对SVM来说的.
  3. 使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如Huber损失函数和Quantile损失函数.

缺点

同Adaboost一样,由于是boosting算法,很难并行加速.

sklearn API

sklearn.ensemble.GradientBoostingClassifier()

参数

类型

默认值

作用

loss

{‘deviance’, ‘exponential’}

‘deviance’

损失函数

learning_rate

float

0.1

学习率,即每个学习器的权重

n_estimators

int

100

树的棵树

criterion

str

‘friedman_mse’

分裂算法

max_depth

int or None

None

决策树最大深度

n_iter_no_change

int or None

None

早停轮数

tol

float

1e-4

早停阈值

validation_fraction

float

0.1

早停验证比例

min_samples_split

int or float

2

分裂时最小样本数

min_samples_leaf

int or float

1

叶节点最小样本数

min_weight_fraction_leaf

float

0

叶节点最小样本权重总值

max_features

int float str None

‘auto’

切分时最大的特征数量

max_leaf_nodes

int or None

None

最大叶节点个数

min_impurity_decrease

float

0.

切分点不纯度最小减少程度,若节点不纯度小于该值,则被移除

random_state

int or None

None

随机种子

verbose

int

0

日志输出间隔

warm_start

boolean

False

是否热启动,对上一个模型采用追加的方式

应用场景

回归问题和分类问题都可.

参考资料

梯度提升树(GBDT)原理小结-刘建平Pinard

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励