集成学习
实例:
- 采样方式
随机采样(bootsrap)就是从我们的训练集中采集固定个数的样本,但是每采样一个样本后,都将样本放回。也就是说,之前采集到的样本放回后有可能继续被采集到。
- 集成方式
Bagging的集合策略也比较简单,对于分类问题,通常使用简单投票法,得到最多票数的类别或者类别之一为最终的模型输出。对于回归问题,通常采用简单平均,对弱学习器得到的回归结果进行算数平均得到最终的模型输出
- 优缺点
其主要目的为通过平均降低方差。Z1,Z2,⋯,Zn的方差为δ2/n。采用Bagging策略明显减小模型方差(variance)。
此方法降低了方差,但由于将多棵决策树的结果进行了平均,这损失了模型的可解释性。同时对于训练集的拟合程度会差一些,也就是模型的偏倚会大一些。
Stacking就是当用初始训练数据学习出若干个基学习器后,将几个学习期的预测结果作为新的训练集,来学习一个新的学习器
实例:
-
采样方式
直接使用测试集进行预测
-
集成方式
a. 使用交叉验证方式对训练集样本进行训练得到第一层classifier,之后使用classifier对训练集样本进行预测从而得到结果(nm的矩阵,n表示训练集的行数,m代表分类器的个数)
b. 将第一层的测试结果(nm矩阵)作为输入,对训练集进行训练得到第二层的classifier,则得到第二层classfier
-
优缺点
它的平滑性和突出每个基本模型在其中执行的最好的能力,并且抹黑其执行不佳的每个基本模型,所以由于单个模型。当基本模型显著不同时,堆叠是最有效的。
-
简介
Boost(提升),是指每次我都产生一个弱模型,然后加权累加到总模型中,然后每一步弱预测模型生成的依据都是损失函数的负梯度方向,这样若干步后就可以达到逼近损失函数局部最小值的目的
-
加法模型
f(x)=m=1∑Mβmb(x;θm)
其中b是基函数,β是基函数的系数,这就是最终分类器。现在我们的目标是使损失函数的期望取最小值,也就是:
βm,θmmini=1∑NL(yi,m=1∑Mβmb(xi;θm))
一次性对M个分类器同时进行优化,显然不现实。因此提出了以下的想法:
βm,θmmini=1∑NL(yi,fm−1+βmb(xi;θm))
要使损失函数最小,那就使得新加的一项刚好等于损失函数的负梯度,这样不就使得损失函数的下最快下降了吗,因此就有:
βmb(x;θm)=−λdfdL(y,fm−1)
- 采用平方误差作为损失函数
L(y,fm−1(x)+βmb(x;θm))
(y−fm−1(x)−βmb(x;θm))2
-
数据处理
上式可以等价于:
(γm−1−βmb(x;θm))2
-
理解
以γm−1作为输出,使用X去拟合一个回归树进而形成新的区域划分Rm。划分之后可以计算第j个变量的输出cmj从而更新当前模型为:
fm=fm−1+j=1∑mcmjI(xj∈Rmj)
-
简介
AdaBoost,是英文“Adaptive Bootsing”的缩写。它的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮转中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预指定的最大迭代次数。
具体来说,整个Adaboost迭代算法就3步:
a. 初始化训练数据的权值分布。如果有N个样本,则每个训练样本最开始时都被赋予相同的权值:1/N
b. 训练弱分类器。具体训练过程中,如果某个样本点已经被准去地分类,那么在构造下一个训练集中,它的权值就被降低;相反,如果某个样本点没有被准确地分类,那么它的权值就得到提高。然后,权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。
c. 将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差较大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。换言之,误差率低的弱分类器在最终分类器中的权重较大,否则较小
-
计算流程
给定一个训练数据集T={(x1,y1),(x2,y2),⋯,(xN,yN)},其中实例x∈Rn, yi∈Y={−1,+1}。Adaboost的目的就是从训练集中学习到一系列弱分类器或基本分类器,最后将这些弱分类器组合成为一个强分类器。
步骤1. 初始化训练数据的权值分布。每个样本最初时都被赋予相同的权值:1/N
D1=(w11,w12,⋯,w1N),w1i=N1,i=1,2,⋯,N
步骤2. 进行多轮迭代,用m=1,2,…M代表迭代的轮数
a. 使用权值分布Dm的训练数据集学习,得到基本分类器
Gm:X→{−1,1}
b. 计算Gm(x)在训练集上的分类误差率:
em=P(Gm(xi)̸=yi)=i=1∑nwmiI(Gm(xi)̸=yi)
注:I(Gm(xi)̸=yi):不等函数I的值为1,相等函数I的值为0
c. 计算G_m(x)的系数
am=21logem1−em
这里的对数是自然对数。显然am是em的单调函数,这里就解释了为什么对于没有正确分类的数据要加大权值
d. 更新训练集的权值
Dm+1=(wm+1,1,ww+1,2,⋯,wm+1,N)
wm+1,i=Zmwmiexp(−αmyiGm(xi))
这里,Zm是泛化因子
Zm=i=1∑Nwmiexp(−αmyiGm(xi))
它使得Dm+1成为一个概率分布
步骤3. 构建基本分类器的线性组合
f(x)=m=1∑MamGm(x)
得到最终分类器:
G(x)=sign(f(x))=sign(m=1∑MamGm(x))
- 特点
标准的Adaboot算法只适用于二分类,要想让其处理多分类或回归任务还需要对其进行修改
- 损失函数
L(y,f(x)=exp[−yf(x)]
- 目标
(am,Gm(x))=argmina,Gi=1∑Nexp[−yi(fm−1(xi)+aG(xi))]
- 推导
(am,Gm(x))=argmina,Gi=1∑Nw^miexp[−yiaG(xi)]
其中w^mi=exp[−yifm−1(xi)]。w^mi既不依赖于a也不依赖于G,与最小值无关
- 计算
接下来,便是要证使得上式达到最小的am∗和Gm∗(x)就是Adaboost算法所求解得到的am和Gm(x),为求解上式,我们可以先求解Gm∗(x),再求am
首先求解Gm(x)。对于任意a>0,使上式(am、Gm(x))最小的G(x)由下式得到:
Gm∗(x)=argminGi=1∑Nw^miI(yi̸=G(xi))
然后求a的过程如下:
下面描述使目标函数最小的Gm∗(x),当Gm∗(x)预测正确时,它与y_i的积必然为1,反之为-1。因此exp()中只会出现两种结果:exp(−a)与exp(a),所以想要使上述目标函数最小,在a不变的情况下,使其最小的G(x)必然由一下公式得到:
(am,Gm(x))=argmina,Gi=1∑Nw^miexp[−yiaG(xi)]
(am,Gm(x))=argmina,G[yi=Gm(xi)∑w^mie−a+yi̸=Gm(xi)∑w^miea]
(am,Gm(x))=argmina,G(ea−e−a)[i=1∑Nw^miI(yi̸=G(xi))+e−ai=1∑Nw^mi]
对上式求导并使其为0可得:
am=21lnem1−em
em=∑i=1Nw^mi∑i=1Nw^miI(yi̸=Gm(xi))
从加法模型角度推导的损失函数如下:
i=1∑Nw^miexp[−yiaG(xi)]
最小化它又等价于:
i=1∑Nw^miI(yi̸=G(xi))