提升方法,是将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好。
Kearns和Valiant提出了“强可学习”和“弱可学习”的概念
强可学习:在概率近似正确学习的框架中,一个概念(一个类),如果存在一个多项式的学习算法能够学习它,并且正确率很高,这个概念被称为强可学习
弱可学习:一个概念,如果一个多项式学习算法能够学习它,学习的正确率仅比随机猜测略好
Schapore后来证明强可学习与弱可学习是等价的
对于分类问题而言,给定训练样本集,训练弱分类器比训练强分类器容易得多,提升方法就是从弱学习算法出发,得到一系列弱分类器(弱而不同)并组合成强分类器
1 adaboost
大多数提升方法都是改变训练数据的概率(权值)分布,针对不同的训练数据分布调用弱学习算法的一系列弱分类器
从而,两个问题需要解答:
(1),每一轮如何改变训练数据的权值分布?
adaboost将分类作物的样本权值提高,降低分类正确的样本权值,从而使分类错误的样本得到更大的关注
(2),如何将弱分类器组合成一个强分类器?
adaboost采用加权多数表决方法
1.1 adaboost算法描述
adaboost如何将这些想法自然且有效地实现在一种算法里
具体算法描述
给定二分类训练数据集
T={(x1,y1),(x2,y2),...,(xN,yN)}
其中每个样本点由实例和标记构成,实例
xi∈χ⊆Rn
,标记
yi∈y={−1,+1}
χ
是实例空间,
y
是标记集合
算法(Adaboost):
输入:训练数据集
输出:最终分类器
G(x)
(1)初始化训练数据的权值分布
(2)对 m=1,2,...,N
(a)适用具有权值分布的 Dm 的训练数据集学习,得到基本分类器 Gm(x):χ→{−1,+1}
(b)计算 Gm(x) 在训练数据集上的分类误差率
(c)计算 Gm(x) 的系数
(d)更新训练数据集的权值分布
其中 Zm 是规范化因子
使得 Dm+1 成为一个概率分布
(3)构建分类器的线性组合
得到最终分类器
1.2 adaboost算法说明
算法说明:
(1)假设训练数据机在初始情况下具有均匀的权值分布,在此基础上学习基本分类器
G1(x)
(2)Adaboost反复学习基本分类器,在每一轮
m=1,2,...,M
顺次执行:
(a)适用当前分布
Dm
加权的训练数据集,学习基本分类器G_{m}(x)
(b)计算基本分类器
Gm(x)
在加权训练数据集上的分类误差率:
可以看出数据权值分布 Dm 与基本分类器 Gm(x) 的分类误差率的关系
(c)计算基本分类器 Gm(x) 的系数 αm , αm 表示 Gm(x) 在最终分类器中的重要性,
由式(1.3)可知,当 em≤12 时, αm≥0 ,并且 αm 随着 em 的减小而增大,所以分类误差率越小的基本分类器在最终分类器中的作用越大
(d)更新训练数据集的权值分布为下一轮训练做准备,式(1.4)可以改写成:
由上式可知,被分类器 Gm(x) 误分类样本的权值得以扩大,而被正确分类样本的权值却得以缩小,两相比较,误分类样本的权值被放大 e2αm=em1−em 倍,误分类样本在下一轮学习中会起更大的作用
(3)线性组合 f(x) 实现 M 个基本分类器的加权表决,系数
1.3 adaboost算法的另一个解释
adaboost算法的另一个解释,可以认为该模型是加法模型,损失函数为指数函数,学习算法为前向分布算法的二分类学习算法
此处不再详细说明,具体可查阅相关资料
1.4 总结
总结:Adaboost的两个特点:
(1),不改变训练数据,而不断改变训练数据的权值分布,使得训练数据在基本分类器的学习中起不同的作用
(2),利用基本分类器的线性组合构建最终分类器,
f(x)
的符号决定实例
x
的类,
2 GBDT
提升树是以分类树或者回归树作为基本分类器的提升方法,提升树被认为是统计学习中性能最好的方法之一
提升方法采用加法模型(基函数的线性组合)与前向分布算法,以决策树为基函数的提升方法成为提升树,提升树模型可以表示为
其中, T(x,Θ) 表示决策树, Θm 为决策树参数, M 为树的个数
对于分类问题:决策树是二叉分类树,对于回归问题:决策树是二叉回归树
2.1 GBDT算法
对于训练数据集训练数据集
(1)
f0(x)=0(2.1)
(2)第
m
步的模型由以下得出
(a)
(b)
Θ̂ m=argminΘm∑Ni=1L(yi,fm−1(x)+T(x;Θm)(2.3)
(3)
fM(x)=∑Mm=1T(x;Θm)(2.4)
不同问题的GBDT算法在于损失函数不同
2.1.1 二类分类问题:指数损失函数
算法与1.3描述类似,只是将Adaboost算法的基本分类器限定为二类分类树即可,这时候的提升树是Adaboost的特例
2.1.2 回归问题:平方误差损失函数
训练数据集
T={(x1,y1),(x2,y2),...,(xN,yN)}
,其中
xi∈χ⊆Rn
,
χ
为输入空间,
yi∈y∈R
,
y
为输出空间
在前向分布算法的第
Θ̂ m=argminΘm∑Ni=1L(yi,fm−1(x)+T(;,Θm)
如果采用平方误差损失函数:
损失变为:
其中 r=y−fm−1(x) 为当前模型和拟合数据的残差
从而回归问题的GBDT算法描述如下
输入: T={(x1,y1),(x2,y2),...,(xN,yN)} ,其中 xi∈χ⊆Rn , χ 为输入空间, yi∈y∈R , y 为输出空间
输出:提升树f_{M}(x)
(1)初始化
(2)对 m=1,2,...,M
(a)计算残差: rmi=yi−fm−1(xi),i=1,2,...,N
(b)拟合残差学习得到一个回归树: T(x;Θm)
(c)更新 fm(x)=fm−1(x)+T(x;Θm)
(3)得到回归问题提升树 fM(x)=∑Mm=1T(x;Θm)
2.1.3 一般损失函数的一般决策问题
损失函数为平方损失、指数损失时,每一步的优化都很简单,但对一般损失函数而言,每一步的优化并不简单,对此,Freaiman提出了梯度提升算法,本质时利用最速下降的近似方法,
核心是利用损失函数负梯度在当前模型的值
作为回归问题提升树算法中的残差的近似值,拟合回归树。
3 XGBOOST
XGBOOST同样采用加性模型与前向分布算法,XGBOOST采用的基本模型为回归决策树
3.1 损失函数
训练数据集
D={(xi,yi)}(|D|=n,xi∈Rm,yi∈R)
,表示样本数量为
n
,特征数量为
其中 F={f(x)=ωq(x)}(q:Rm→T,ω∈RT) 表示回归树空间, q 表示样本到叶子节点序号的映射,
XGBBOST的目标损失函数为:
其中 Ω(f)=γT+12λ||ω||2 表示正则化项
3.2 梯度提升
按照加性模型思想,式(3.2)可以表示为
按照taylor展开原理
其中
由于希望损失函数最小,去除式(3.4)中的常数项
对于决策树 ft(xi) ,定义 Ij={i|q(xi)=j} 表示叶子节点 j 中的样本集合,从而
式(3.6)取最小时
代入式(3.6)得到
上式可以衡量一颗树结构的损失函数,期望损失函数越小越好,但是,树的生长过程中,不可能遍历所有可能的树结构,所以一个贪心算法是从一个叶子节点开始不断添加分支(也就是节点分裂),期望不断降低损失函数
在某结点分裂的时候,损失函数的减小值可以表示为
其中, IL 表示分裂后的左孩子结点的样本集合, IR 表示分裂后的右孩子结点的样本集合, I=IL∪IR
式(3.8)经常用作确定分裂候选位置
3.3 分裂算法
3.3.1 精准的贪心分裂算法
输入:
I
表示当前结点的样本集合
输入:
gain←0
G←∑i∈IgiH←∑i∈Ihi
for
k=1
to
m
do
for
j
in
GL←GL+gj,HL←HL+hj
GR←G−GL,HR←H−HL
score←max(score,G2LHL+λ+G2RHR+λ−G2H+λ)
end
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)