ADAboost 和GBDT和XGboost

拥有回忆 提交于 2019-12-16 01:54:16

(一)Adaboost算法的模型是一个弱学习器线性组合,特点是通过迭代,每一轮学习一个弱学习器,在每次迭代中,提高那些被前一轮分类器错误分类的数据的权值,降低正确分类的数据的权值。最后,将弱分类器的线性组合作为强分类器,给分类误差小的基本分类器大的权值。每一次迭代都可以减少在训练集上的分类误差率。
当然,就如每一个算法都有自己的优缺点一样,AdaBoost 也有自身的缺点。AdaBoost 算法只直接支持二分类,遇到多分类的情况,需要借助 one-versus-rest 的思想来训练多分类模型。关于 one-verus-rest 的细节可以参考本系列第一篇文章 SVM。
AdaBoost能够有效的降低偏差,能够在泛化性能非常弱的学习器上构建成很强的集成。缺点是对噪声敏感。
AdaBoost 的核心就是不断迭代训练弱分类器,并计算弱分类器的权重。需要注意的是,弱分类器的训练依赖于样本权重。每一轮迭代的样本权重都不相同,依赖于弱分类器的权重值和上一轮迭代的样本权重。(相当于改变了数据的分布情况,分类器学习和改变数据分布)
用 AdaBoost 也可以实现回归模型,需要将弱分类器替换成回归树,并将平方误差作为损失函数

GBDT与Adaboost的主要差别为,Adaboost每轮学习的一个基本学习器是通过改变样本的权值,关注上轮分类错误的样本的权值,以逐步减少在训练集上的分类误差率。而GBDT每轮学习一个基本学习器是通过改变输出值,每轮拟合的值为真实值与已有的加法模型的差值(即残差)(负梯度)。GBDT无论是进行分类还是回归问题,都用的CART树。对于分类问题用二叉分类树,回归问题用二叉回归树。

(二):GBDT与XGboost

1:传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。xgboost工具支持自定义代价函数,只要函数可一阶和二阶求导。

2:Xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。正则化包括了两个部分,都是为了防止过拟合,剪枝是都有的,叶子结点输出L2平滑是新增的。还可以进行列抽样,从而降低过拟合的风险。

3:XGboost可进行并行计算,但是这种并行计算并不是像随机森林那样是在tree粒度上去进行,而是在特征粒度上并行。

具体推导过程,大家可以搜索推导资料!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!