1、https://www.youtube.com/watch?v=LsK-xG1cLYA
2、https://blog.csdn.net/v_JULY_v/article/details/40718799
1、初始化/更新样本权重(学习资料1在11:32秒开始解释)
第1 轮所有权重均为 1,即 w 1 , i = 1 w_{1,i}=1 w1,i=1
第 m m m 轮(m>1)的权重使用上一轮的权重 w m − 1 w_{m-1} wm−1和得到的学习器系数 α m − 1 \alpha_{m-1} αm−1 得到。
若分类正确,权重减小:
w m , i = w m − 1 × e − α m − 1 w_{m,i}=w_{m-1} \times e^{-\alpha_{m-1}} wm,i=wm−1×e−αm−1
若分类错误,权重增大:
w m , i = w m − 1 × e α m − 1 w_{m,i}=w_{m-1} \times e^{\alpha_{m-1}} wm,i=wm−1×eαm−1
最后归一化。
w m , i = w m , i Σ k w m , k w_{m,i}=\frac{w_{m,i}}{\Sigma_k w_{m,k}} wm,i=Σkwm,kwm,i
2、根据所选择的不纯度指标计算每个特征的最优划分点,比较得到最优特征,得到一个树桩(stump)
3、计算误差率(分错的样本的权重和)和这一轮得到的学习器在最终多个学习器中的加权系数(权重)
设错误率为 e e e,则该轮学习器系数为 α m = 1 2 log 1 − e e \alpha _m=\frac {1}{2} \log \frac{1-e}{e} αm=21loge1−e (即正确率logit的一半),该式子从 0 到 1 逐渐减小
4、如果达到指定轮次或错误率为0,结束;否则回到步骤1
1、https://www.youtube.com/watch?v=3CC4N4z3GJc (GBDT回归树通俗理解)
2、https://www.youtube.com/watch?v=2xudPOBz-vs (GBDT回归树数学原理)
3、https://www.cnblogs.com/pinard/p/6140514.html (GBDT回归树使用中文术语解释)
4、https://www.youtube.com/watch?v=jxuNLH5dXCs (GBDT分类树通俗理解)
5、https://www.youtube.com/watch?v=StWY5QWMXCw (GBDT分类树数学原理)
6、https://projecteuclid.org/download/pdf_1/euclid.aos/1013203451 (GBDT原始论文,提到GBDT分类树是使用单步牛顿法来近似叶子节点使得Loss最小的最佳输出值)
7、https://zhuanlan.zhihu.com/p/89549390(本文也认为GBDT分类算法使用的是CART回归树,实际上资料6应该也说明了这点,1199页:“This gives the following algorithm for likelihood gradient boosting with regression trees”)
8、https://jepsonwong.github.io/2018/05/18/GBDT/ (GBDT分类树的详细推导,补充了资料6,给出了单步牛顿法过程,实际上就是用了二阶泰勒展开,所以说GBDT分类树在这一点上和XGB没区别)
9、https://www.jianshu.com/p/6075922a8bc3
10、https://www.zhihu.com/question/34639246
11、https://jepsonwong.github.io/2018/05/18/GBDT/
1、设第一棵CART树仅由一个节点组成,即将所有样本预测为固定的常数,求出使得所有样本损失的和最小的该常数,即得到第一个学习器(利用求导求最值的方法)
2、依次进行M轮,每一轮得到一颗CART树,并得到新的强学习器,每一轮子步骤:
A、计算损失函数关于上一轮得到的强学习器预测值的负梯度(伪残差)
B、将样本的负梯度作为要预测的值,来拟合一颗CART回归树
C、求每个叶子节点的最佳输出值(对于落在该叶子的样本的负梯度的最佳估计),使得落在这个叶子的样本的损失的和最小(求解析解,或用梯度下降或牛顿法求数值解)
可以使用线性搜索 [ 9 , 10 ] ^{[9,10]} [9,10]来找最佳步长之后乘以梯度,或者用单步牛顿法直接得到最佳叶子节点输出 [ 11 ] ^{[11]} [11]。实践中一般采用 shrinkage 的策略通过参数来设置步长,避免过拟合 [ 11 ] ^{[11]} [11]
D、得到该轮的强学习器
PS1:资料2解释说:资料3步骤d的公式中,求和号是考虑到有的样本可能落在多个叶子节点
PS2:资料3后面介绍正则化时才讲到学习率,所以步骤d没使用学习率,或者说学习率当做1了
3、得到最终的强学习器
GBDT用于分类时,每一轮得到的强学习器,都是相当于是把logit(对数几率)当做回归任务要预测的值(CART树的叶子节点的输出值),所以实际上得到的也是一堆CART回归树(所以也要注意,用于分类任务时,在步骤2的B阶段,也同样是使用平方损失来找到最佳划分点,资料7验证了这一点),其中每一棵回归树都是在拟合负梯度(除了初始化那棵,它拟合的就是能使得所有样本的损失和最小的logit)。最后使用sigmoid对强学习器的输出值进行激活即可得到概率值。对数几率的理解可以看 https://www.youtube.com/watch?v=ARfXDSkQf1Y
在回归问题中,平方误差损失关于预测值的导数是 y ^ − y \hat y -y y^−y,预测值-真实值,而负梯度就是 y − y ^ y-\hat y y−y^,即残差;而在二分类问题中,CART树的预测值实际上是logit(对数几率),如果用交叉熵损失对logit求导,结果也可以记为 y ^ − y \hat y -y y^−y,不过 y ^ \hat y y^ 在这里指的是概率,即 σ ( l o g i t ) \sigma(logit) σ(logit),所以,分类树在每一轮计算负梯度时,可以先得到预测概率 p p p,然后也同样计算“残差”,就得到了负梯度。
1、https://zhuanlan.zhihu.com/p/80053541
2、https://www.jianshu.com/p/6075922a8bc3
3、https://www.zhihu.com/question/34639246
4、https://jepsonwong.github.io/2018/05/18/GBDT/
5、https://stats.stackexchange.com/questions/330849/how-do-newton-raphson-updates-work-in-gradient-boosting
6、https://zhuanlan.zhihu.com/p/92837676
7、https://projecteuclid.org/download/pdf_1/euclid.aos/1013203451
资料1和资料2可以了解到梯度提升和牛顿提升的详细讲解;
资料3肯定了gbdt也使用到了牛顿法,但不是在建树的时候;
资料4、5有单步牛顿法的推导过程,实际上就是用二阶泰勒展开得到近似的二次函数,然后求解这个二次函数的最小值点当做近似的最小值点;
资料6是xgb的介绍;
资料7是gbdt原始论文,1199页有gbdt用于分类时的推导过程;
对某一特征选取划分点时,先将缺失了该特征的样本集取出来,在不含有缺失值的样本的特征中选取划分点,然后将缺失特征的样本分别加入划分后的左右叶子计算Gain,最后对比Gain最大的确定划分点以及应该将缺失该特征的样本分到哪个叶子。如果某特征在训练集没有缺失值,但是在测试时遇到了缺失值,默认划分到右子树。
总结如下
1、两者建树时确定划分点的准则不同。GBDT使用的是梯度提升,其每一轮的CART回归树使用均方误差损失来拟合负梯度(伪残差);而XGB使用是的牛顿提升 [ 2 ] ^{[2]} [2],在建树时就根据二阶泰勒展开来得到(树结构确定时的)近似的最小Loss,将划分前后的树的最小Loss之差定义为Gain [ 6 ] ^{[6]} [6],然后寻找Gain最大的划分点;
还有一个区别,面试时感觉不需要讲:GBDT在建好树之后需要求解使得Loss最小的叶子节点的最佳权重,一般使用线性搜索 [ 2 , 3 ] ^{[2,3]} [2,3]或者单步牛顿法 [ 4 ] ^{[4]} [4]来找最佳步长,或者采用shrinkage的策略通过参数设置步长,避免过拟合 [ 4 ] ^{[4]} [4];而XGB由于在建树的时候就是在计算树的最小Loss,确定树的结构时,对应叶子的最佳权重(最小值点)也已经得到了。
网上流传着GBDT只使用一阶导的讲法,实际上GBDT在建树(确定最佳划分点)时确实只用了一阶导,但是在树结构确定后(确定了树的结构以及样本分别归入哪个叶子节点),需要求解叶子节点的最佳输出值时,而又无法得到闭式解时(即无法得到解的精确表达式,例如分类树使用负对数损失时,无法求解超越方程的解析解),原始论文 [ 7 ] {[7]} [7]是建议使用单步牛顿法来近似求解的,所以实际上也用了二阶导数,只不过不是在建树的时候用的
2、可选的基分类器不同。XGBoost的基分类器不仅支持CART决策树,还支持线性分类器,此时XGBoost相当于带L1和L2正则化项的Logistic回归(分类问题)或者线性回归(回归问题)
3、XGBoost的目标函数加了正则项, 相当于预剪枝,使得学习出来的模型更加不容易过拟合。
4、XGBoost支持列采样,与随机森林类似,用于防止过拟合
5、默认支持缺失值处理
6、初始预测值不同。XGB在回归以及分类中的默认初始预测都是0.5,而GBDT会设初始预测值为常数,求解使得损失函数最小的初始预测值
7、XGB有各种工程化加速。在寻找最佳划分点时在特征维度并行计算;weighted quantile sketch限制候选划分点的个数;优化CPU Cache以及硬盘IO的利用率;