文章目录
1. Boosted Trees
原文为XGBoost作者陈天奇的slides:https://homes.cs.washington.edu/~tqchen/pdf/BoostedTree.pdf
一共分为四部分:
- 监督学习的关键信息回顾
- 回归树和集合(我们正在学什么)
- 梯度增强(我们如何学)
- 总结
1.1 part1 监督学习的关键信息回顾
这部分主要回顾监督学习的基本概念:
目标函数=损失函数+正则项
提问:
1. 为什么我们在目标函数中包含两个成分?
答:①优化训练误差促进预测模型:在训练数据中很好地拟合至少能让你接近训练数据也就是接近潜在分布;
②优化正则项促进简单模型:简单模型使得在未来的预测中有更小的偏差,使得预测稳定。
2. L1范式的正则项和L2范式的正则项的区别?
答:参考《百面机器学习》
L1范式的正则项使得模型参数具有稀疏性。
①解释一:从解空间的角度来看,L1范式的解空间是”菱角分明“的形状,而L2范式的解空间为圆形,而且惩罚项的解空间也是圆形,那么很明显,惩罚项的解空间和L1范式的解空间更容易在尖角处触碰,这样,也就更容易出现稀疏项;
②解释二:函数叠加。带L1范式项的目标函数中,L1正则项在原点左边的导数为-C,原点右边的导数为C,使得L1范式在原点左边是递减,原点右边是递增,因此最小值自然在原点处,使得w为0,产生稀疏性。反而,L2正则项在原点的导数为0,只要惩罚项的导数不为0,最小值点就不会出现在原点,因此L2只有减小w的作用,对稀疏性并无贡献;
③解释三:贝叶斯先验。L1正则项相当于参数w引入了拉普拉斯先验,L2正则项相当于参数w引入了高斯先验。其中拉普拉斯分布会出现尖峰,参数w取0的可能性要更高,而高斯分布的极值点是平滑的,也就是高斯先验分布认为w在极值点附近取不同值的可能性是接近的。这就是L2正则化只会让w更接近0点,但不会等于0的原因。
1.2 part2 回归树和集合(我们正在学什么)
回归树
- 回归树也可以称为回归分类树(CART)
- 决策规则类似于决策树
- 每个叶节点的值包含一个分数
树集成方法
- 非常广的使用,就像GBM、random forest…
- 不受输入缩放的影响,因此不需要对特征进行仔细的标准化
- 高效的学习特征之间的关联
- 可以延伸,并在工业中使用
客观式与启发式
- 当我们谈到决策树时,通常会谈及到:
- 通过信息增益分裂
- 预剪枝树
- 最大深度
- 平滑叶结点的值
- 对应于一般的概念
- 信息增益 ——> 训练误差
- 预剪枝 ——> 通过结点定义的正则化
- 最大深度 ——> 约束函数空间
- 平滑叶结点的值 ——> 在叶节点权重的L2正则化
最后提到回归树不仅仅用于回归,还可用于分类、排行,这取决于我们如何定义目标函数。
1.3 part3 梯度增强(我们如何学)
该部分主要讲解树集合增强的具体操作,大概是广义可加的训练:
然后一大段推理(二阶泰勒展开),推到目标函数:
以及正则项:
最后有:
xgboost的信息增益:
如何寻找最佳分割点:
寻找分割点的算法
- 对于每一个结点,穷举所有的特征
- 对于每一个特征,通过特征价值对实例进行排序
- 使用线性扫描沿着这个特征决定最好的分割
- 对于所有的特征都产生最好的分割方案
- 时间复杂度随着树的深度K而增长
- 这是O(n d K log n): 或每一个等级,需要O(nlogn)时间去排列。有d个特征,我们需要分为K个等级。
- 这个能被长久的优化(例如:使用近似或缓存排序后的特性)
- 能扩展到非常大的数据集
后面提到了分类变量的情况,一般是0、1的标示(1就是属于这个类,0就不属于),这样就有大量的稀疏矩阵。
然后提到了”提前停止分裂“以及”后剪枝“。
最后提到了学习率的概念,有助于避免过拟合。
1.4 part4 总结
2. GBDT
参考:https://blog.csdn.net/legendavid/article/details/78904353
- 前言
总的来说,GBDT就是生成多棵决策树,然后将所有树的结果进行汇总得到最终的结果。也就是说,这个算法的思想把决策树和集成思想进行了有效的结果。
可以从两个角度解释GBDT,残差和梯度。
首先是残差的角度:
-
DT
回归决策树。这里注意两点和分类树的区别即可,便于记忆,这里简写,具体看上面链接。- 回归树是使用属性的值为阈值来进行划分,每个叶节点会生成一个预测值,并且该值即为所有处在叶节点上样本的平均值。
- 节点分裂的依据并不是ID3的信息增益,又或C4.5避免受特征种类影响的信息增益比,而是使用最小化均方差。同样的原理,使得每个分支的样本之间差别更小。
-
GB
梯度提升。基本思想为:沿着梯度的方向构造一系列弱分类器函数,然后以一定的权重组合起来,形成一个强分类器。而对于如何构造,则是使用了残差的思想,也就是说,后面一个树在前面一个树的预测结果的基础上,把上一个树与真实值之间的差值作为后一个树的真实值进行建树,最后,所有树对应的预测值相加也就是最后的总预测值。 -
shrinkage
这就可以映射到GB部分里面说的“以一定的权重组合”。shrinkage的意思,就是给前一个树预测的值打个折扣,也就是乘个权重,然后后一个树在折扣后的残差中学习,可以防止过拟合。例如真实值为100,前一个树预测到90,这个时候给个0.3的shrinkage,下一个树所要预测的真实值即为100-90*0.3。
从梯度的角度:
整个概念都是一样的,只不过理解的角度不同,这里是用损失函数的负梯度在当前模型的值,作为回归问题中提升树算法的残差的近似值,去拟合下一个回归树。
因此,可以从两个角度来解释GDBT,参考链接的博文写到,这两种解释不管是从整体流程还是输入输出都是一样的,前者是从残差的角度来进行解释,每一个树来学习之前树的残差,后者是从梯度的角度来解释,每个树通过梯度下降法来学习之前树的损失函数的梯度下降值。
3. Random Forest
参考:https://blog.csdn.net/edogawachia/article/details/79357844
说到随机森林可以扯一点偏差与方差,随机森林是采用bagging的思想,生成的每一个树几乎是独立的,因此有助于降低方差;而GDBT却是相反的,有助于降低偏差。
随机森林,主要在于随机两字,首先使用自助法(bootstrap)来随机采样作为训练集,对每个训练集都去生成决策树,对于每个决策树,不是对每个特征都去寻找最优的切割点(例如用信息增益),而是从中随机抽取一些特征再选择最优的切割点。这也就用了bagging的思想,对样本和特征进行随机采样,因此也可以避免过拟合。
预测的阶段,使用各个树的结果,然后,分类采用的投票法、回归采用的均值法。
4. XGBoost的创新(与GDBT比较)
借鉴https://blog.csdn.net/legendavid/article/details/78904353,归纳有以下几点:
- GDBT的基函数是回归树,而XGBoost还支持线性分类器,对于分类问题,此时XGBoost就相当于logistic回归,回归就是线性回归。
- XGBoost在目标函数里面加个了正则化项,这可以一定程度控制生成树的复杂度,从偏差方差均衡的角度,这有助于降低方差,避免过拟合。
- 传统的GDBT使用的一阶导数,而XGBoost是用的一阶导数和二阶导数。
- 引入了分位数,GDBT是对特征的每个值去计算增益值,而XGBoost根据百分位法列举几个可能成为分割点的候选者,然后从候选者中根据上面求分割点的公式计算找出最佳的分割点。
- shrinkage的方式来缩减每棵树的影响。
- 虽然生成每棵树一定要串行,但是选择特征是并行的,这也是非常耗时的一个阶段。
- 借鉴了随机森林的,行采样,列采用的特性,既省时间又可防止过拟合。
- 在工程方面,支持多线程,支持GPU等特性。
5. LightGBM的创新(与XGBoost比较)
参考:
https://blog.csdn.net/wenjianG4/article/details/81632104
http://www.aboutyun.com/thread-24339-1-1.html
- XGBoost是采用presort的方式来选取最佳分割点,而LGBM是采用直方图,对于连续的特征统计为k类,然后以直方图为单位,选取最佳分割点;
- XGBoost在预测的时候采用的是level-wise广度优先的策略,而LGBM采用的是leaf-wise的策略,就是说同一层只对增益最大的结点进行分裂。leaf-wise 算法可以比 level-wise 算法减少更多的损失。
- 速度比XGBoost更快。