阿里暑期算法来自 https://www.nowcoder.com/discuss/373146?type=2&order=3&pos=7&page=1
https://www.nowcoder.com/discuss/245257?type=2&order=3&pos=30&page=1 19wxg推荐算法手推xgboost扩展来
函数I表示当x属于这个子叶的时候取1,否则取0
参考:
https://zhuanlan.zhihu.com/p/32181306 代码
https://blog.csdn.net/weixin_43258017/article/details/96456607 手推GBDT
https://blog.csdn.net/Dark_Scope/article/details/24863289 算法
https://www.nowcoder.com/discuss/245257?type=2&order=3&pos=30&page=1 19wxg推荐算法
From https://blog.csdn.net/gxq1221/article/details/81113346 腾讯18年数据挖掘
GBDT计算损失函数(MSE)的负梯度在当前模型的值,将它作为残差的估计。每次训练的时候都是拟合上一棵树的残差,也就是梯度。把所有树训练的结果加起来就会得到一个整体梯度的下降,使得整个系统的误差最小。
参考:李航《统计学习方法》
From https://blog.csdn.net/gxq1221/article/details/81113346 腾讯18年数据挖掘
1、组成随机森林的树可以是分类树,也可以是回归树;而GBDT只由回归树组成
2、组成随机森林的树可以并行生成;而GBDT只能是串行生成
3、对于最终的输出结果而言,随机森林采用多数投票等;而GBDT则是将所有结果累加起来,或者加权累加起来
4、随机森林对异常值不敏感(随机采样),GBDT对异常值非常敏感(损失函数MSE会把偏差求放大了)
5、随机森林是通过减少模型方差提高性能(提高泛化性能),GBDT是通过减少模型偏差提高性能
6、随机森林对训练集一视同仁,GBDT是基于权值的弱分类器的集成
xgboost实际上是gbdt工程化的实现
参考:
https://blog.csdn.net/u012155582/article/details/79866245 比较GBDT RF和xgboost
https://zhuanlan.zhihu.com/p/29765582 为什么GBDT对异常值敏感
From https://blog.nowcoder.net/n/d64b14ca34434c778acd99afb7459361 腾讯数据分析一面
(1)XGBoost是在GBDT的基础上实现的(boosting能比普通的单个学习器有更强的泛化能力,一个学习器的化越分越深实际上大部分过拟合了)
(2)在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模型的复杂度。考虑了叶子结点的个数还有叶子取值。
(3)GBDT在模型训练时只使用来loss function的一阶导数信息,XGBoost对loss function进行二阶泰勒展开。(二阶信息本身就能让梯度收敛更快更准确。因为一阶看成是梯度的方向的话,二阶是梯度方向如何变化。)
(4)传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类器,比如线性分类器。
(5)传统的GBDT在每轮迭代时使用全部数据集,XGBoost采用与随机森林相似的策略,支持对数据进行采样。(提高泛化能力)
(6)传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略。(就是把缺失值分别放到左叶子节点和右叶子节点中,计算增益)
参考: