boosting-adaboost、GBDT、xgboost、lightGBM
来源:互联网 发布:时时彩系统彩源码 编辑:程序博客网 时间:2024/06/05 04:19
提升方法,是将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好。
Kearns和Valiant提出了“强可学习”和“弱可学习”的概念
强可学习:在概率近似正确学习的框架中,一个概念(一个类),如果存在一个多项式的学习算法能够学习它,并且正确率很高,这个概念被称为强可学习
弱可学习:一个概念,如果一个多项式学习算法能够学习它,学习的正确率仅比随机猜测略好
Schapore后来证明强可学习与弱可学习是等价的
对于分类问题而言,给定训练样本集,训练弱分类器比训练强分类器容易得多,提升方法就是从弱学习算法出发,得到一系列弱分类器(弱而不同)并组合成强分类器
1 adaboost
大多数提升方法都是改变训练数据的概率(权值)分布,针对不同的训练数据分布调用弱学习算法的一系列弱分类器
从而,两个问题需要解答:
(1),每一轮如何改变训练数据的权值分布?
adaboost将分类作物的样本权值提高,降低分类正确的样本权值,从而使分类错误的样本得到更大的关注
(2),如何将弱分类器组合成一个强分类器?
adaboost采用加权多数表决方法
1.1 adaboost算法描述
adaboost如何将这些想法自然且有效地实现在一种算法里
具体算法描述
给定二分类训练数据集
其中每个样本点由实例和标记构成,实例
算法(Adaboost):
输入:训练数据集
输出:最终分类器
(1)初始化训练数据的权值分布
(2)对
(a)适用具有权值分布的
(b)计算
(c)计算
(d)更新训练数据集的权值分布
其中
使得
(3)构建分类器的线性组合
得到最终分类器
1.2 adaboost算法说明
算法说明:
(1)假设训练数据机在初始情况下具有均匀的权值分布,在此基础上学习基本分类器
(2)Adaboost反复学习基本分类器,在每一轮
(a)适用当前分布
(b)计算基本分类器
可以看出数据权值分布
(c)计算基本分类器
由式(1.3)可知,当
(d)更新训练数据集的权值分布为下一轮训练做准备,式(1.4)可以改写成:
由上式可知,被分类器
(3)线性组合
1.3 adaboost算法的另一个解释
adaboost算法的另一个解释,可以认为该模型是加法模型,损失函数为指数函数,学习算法为前向分布算法的二分类学习算法
此处不再详细说明,具体可查阅相关资料
1.4 总结
总结:Adaboost的两个特点:
(1),不改变训练数据,而不断改变训练数据的权值分布,使得训练数据在基本分类器的学习中起不同的作用
(2),利用基本分类器的线性组合构建最终分类器,
2 GBDT
提升树是以分类树或者回归树作为基本分类器的提升方法,提升树被认为是统计学习中性能最好的方法之一
提升方法采用加法模型(基函数的线性组合)与前向分布算法,以决策树为基函数的提升方法成为提升树,提升树模型可以表示为
其中,
对于分类问题:决策树是二叉分类树,对于回归问题:决策树是二叉回归树
2.1 GBDT算法
对于训练数据集训练数据集
(1)
(2)第
(a)
(b)
(3)
不同问题的GBDT算法在于损失函数不同
2.1.1 二类分类问题:指数损失函数
算法与1.3描述类似,只是将Adaboost算法的基本分类器限定为二类分类树即可,这时候的提升树是Adaboost的特例
2.1.2 回归问题:平方误差损失函数
训练数据集
在前向分布算法的第
如果采用平方误差损失函数:
损失变为:
其中
从而回归问题的GBDT算法描述如下
输入:
输出:提升树f_{M}(x)
(1)初始化
(2)对
(a)计算残差:
(b)拟合残差学习得到一个回归树:
(c)更新
(3)得到回归问题提升树
2.1.3 一般损失函数的一般决策问题
损失函数为平方损失、指数损失时,每一步的优化都很简单,但对一般损失函数而言,每一步的优化并不简单,对此,Freaiman提出了梯度提升算法,本质时利用最速下降的近似方法,
核心是利用损失函数负梯度在当前模型的值
作为回归问题提升树算法中的残差的近似值,拟合回归树。
3 XGBOOST
XGBOOST同样采用加性模型与前向分布算法,XGBOOST采用的基本模型为回归决策树
3.1 损失函数
训练数据集
其中
XGBBOST的目标损失函数为:
其中
3.2 梯度提升
按照加性模型思想,式(3.2)可以表示为
按照taylor展开原理
其中
由于希望损失函数最小,去除式(3.4)中的常数项
对于决策树
式(3.6)取最小时
代入式(3.6)得到
上式可以衡量一颗树结构的损失函数,期望损失函数越小越好,但是,树的生长过程中,不可能遍历所有可能的树结构,所以一个贪心算法是从一个叶子节点开始不断添加分支(也就是节点分裂),期望不断降低损失函数
在某结点分裂的时候,损失函数的减小值可以表示为
其中,
式(3.8)经常用作确定分裂候选位置
3.3 分裂算法
3.3.1 精准的贪心分裂算法
输入:
输入:
for
end
输出:在最大score处分裂
思想:暴力遍历m个特征的所有可能分裂点
3.3.2 近似算法
暴力法因为枚举了所有可能分裂的位置,所以非常有效,但是当数据量比较大时,效率并没有那么高,尤其所有数据不能全部存入内存时
从而,提出了一种近似方法,根据特征分布选择候选的样本分裂点,基于候选的样本分裂点寻找最有分裂位置,近似算法有两种变种类型,全局寻找候选点与局部寻找候选点,全局寻找表示在最开始的时候找出所有的候选位置,在每次学习时复用;局部寻找表示每次分裂时重新计算候选位置。如果寻找的位置点足够多,全局寻找的准确率会和局部寻找相当
对于候选分割点的选择算法,有近似直方图算法,具体可参阅相关文章
3.4 缺失值处理
在机器学习实际应用场景中,训练数据集中很多特征数据是稀疏的,xgboost对这类问题的处理,在结点分裂时缺失值按照默认方向处理
分裂时,具体做法,式(3.8)中考虑缺失值划入左孩子结点、右孩子结点两种情形下的损失函数,寻找最有的分割点
3.5 系统实现
(1)xgboost对每个特征进行排序,以块的结构存储在内存中,后续迭代可以重复使用
(2)在计算不同特征的最佳分割点时,可以采用多线程并行的方式进行
(3)当内存空间不够时,xgboost如何有效利用磁盘空间,主要利用块压缩、块分片技术
3.6 xgboost vs GBDT
(1)GBDT迭代时只考虑了一阶导数,xgboost迭代时考虑了一阶、二阶导数,xgboost可以自定义损失函数,只需要一阶、二阶可导;
(2)xgboost在损失函数中添加了正则化项,防止过拟合;
(3)传统GBDT以决策树为基本分类器,xgboost还支持其他线性分类器,这时候xgboost相当于带正则化项的LR回归、线性回归;
(4)xgboost还引入了衰减(shrinkage,相当于学习速率)、列抽样,降低过拟合可能性;
(5)xgboost对于缺失值可以自动学习出分裂方向;
(6)训练事先排好序并以block的形式存储,可以并行计算,寻找特征的最佳分割点;
(7)由于底层支持容错的分布式通信框架rabit,xgboost支持分布式计算,可以运行在MPI,YARN上
4 LIGHTGBM
<未完待续>
5 参考文献
(1)统计学习方法-李航
(2)XGBOOST:A Scalable Tree Boosting System, TianqiChen.(KDD 2016)
- boosting-adaboost、GBDT、xgboost、lightGBM
- adaboost xgboost gbdt 三个boosting方法整理
- GBDT安装(xgboost LightGBM)
- 决策树类的机器学习算法——决策树、Bagging、随机森林、Boosting、AdaBoost、GBDT、XGBoost
- Adaboost/Xgboost/lightgbm学习及实践
- 提升Boost:GBDT & Xgboost & Adaboost
- 提升方法:GBDT、XGBOOST、AdaBoost
- Machine Learning_Bagging(RF)&Boosting(Adaboost、GBDT)
- CART,回归树,GBDT,XGBoost,LightGBM一路理解过来
- 机器学习之AdaBoost,GBDT,XGBoost
- boosting之从GB到GBDT再到Xgboost
- Kaggle房价预测进阶版/bagging/boosting/AdaBoost/XGBoost
- 机器学习-->集成学习-->Xgboost,GBDT,Adaboost总结
- 关于树的几个ensemble模型的比较(GBDT、xgBoost、lightGBM、RF)
- Xgboost gbdt
- XGBOOST GBDT
- xGBoost GBDT
- adaboost和GBDT的区别以及xgboost和GBDT的区别
- ArcGIS属性表中对某一字段进行分段…
- 将博客搬至CSDN
- 解决wps for linux不能使用中文
- 人工智能的诞生与寒冬
- React-Native 与IOS集成交互
- boosting-adaboost、GBDT、xgboost、lightGBM
- 算法-->shell排序
- CorelDRAW X8 64位官方中文版下载
- 单片机入门——数码管动态显示
- ios原生项目集成react-native过程记录
- 添加指定图书
- 纯CSS实现的3D翻页效果
- 程序员如何优雅的挣零花钱?
- linux下使用systemctl管理tomcat开机自启动