集成学习与Bagging、Boosting和stacking

集成学习通过下面一句话来理解一下其思想:对于一个复杂任务,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独做出的判断,要好的多得多,这也是“三个臭皮匠顶个诸葛亮”的道理。
  一、集成学习概述\textbf{一、集成学习概述}一、集成学习概述
  集成学习是通过结合多个学习器来完成学习任务的,在机器学习的有监督算法中,我们的目的是通过数据训练一个强学习模型,使得预测准确,但是有时候,我们并不能通过学习得到一个强学习模型,但是却可以得到很多个有各自偏好的弱学习模型。
  集成学习的思想就是通过将上述得到的弱学习模型进行组合,得到一个强学习模型。集成学习的潜在思想就在于即便一个弱学习模型得到了错误的预测,但是可以通过其他弱学习模型来纠正这个错误。
  二、集成学习分类\textbf{二、集成学习分类}二、集成学习分类
  根据弱学习模型是否属于同一种类别,分为同质和异质:
  1)同质:指的是弱学习模型属于一个类别,比如弱学习模型是决策树,就都是决策树,是神经网络,就都是神经网络;
  2)异质:指的是弱学习模型不属于同一个类别,比如我们的弱学习模型由决策树、神经网络等算法组成。
  根据学习模型之间的依赖关系:
  1)各个学习模型之间存在强依赖关系,必须串行生成的序列化方法。序列方法的原理是利用基础学习器之间的依赖关系。通过对之前训练中错误标记的样本赋值较高的权重,可以提高整体的预测效果。
  2)各个学习模型之间不存在强依赖关系,可以同时生成的并行化方法。并行方法的原理是利用基础学习器之间的独立性,通过平均可以显著降低错误。
  集成学习在各个规模的数据集上都有很好的策略。
  数据集大:划分成多个小数据集,学习多个模型进行组合;
  数据集小:利用Bootstrap方法进行抽样,得到多个数据集,分别训练多个模型再进行组合。
  三、Bagging(bootstrap aggregating,装袋)\textbf{三、Bagging(bootstrap aggregating,装袋)}三、Bagging(bootstrap aggregating,装袋)
  Bagging即套袋法,先说一下bootstrap,bootstrap也称为自助法,它是一种有放回的抽样方法,其算法过程如下:
  1)从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行T轮抽取,得到T个训练集。(T个训练集之间是相互独立的)
  2)每次使用一个训练集得到一个模型,T个训练集共得到T个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)
  3)对分类问题:将上步得到的T个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)
  Bagging主要关注降低方差。
  如下图所示:
  集成学习与Bagging、Boosting和stacking
  小例子:
  X 表示一维属性,Y 表示类标号(1或-1)测试条件:当x<=k时,y=?;当x>k时,y=?;k为最佳分裂点。
  下表为属性x对应的唯一正确的y类别,现在进行5轮随机抽样,结果如下:
  给定数据集:
  集成学习与Bagging、Boosting和stacking
 集成学习与Bagging、Boosting和stacking
  每一轮随机抽样后,都生成一个分类器,然后再将五轮分类融合。
  集成学习与Bagging、Boosting和stacking
  对比符号和实际类,我们可以发现:在该例子中,Bagging使得准确率可达90%。
  由此,总结一下bagging方法:
  ① Bagging通过降低基分类器的方差,改善了泛化误差
  ② 其性能依赖于基分类器的稳定性;如果基分类器不稳定,bagging有助于降低训练数据的随机波动导致的误差;如果稳定,则集成分类器的误差主要由基分类器的偏倚引起
  ③ 由于每个样本被选中的概率相同,因此bagging并不侧重于训练数据集中的任何特定实例
  常用的此类集成算法是随机森林。
  在随机森林中,集成中的每棵树都是由从训练集中抽取的样本(即 bootstrap 样本)构建的。另外,与使用所有特征不同,这里随机选择特征子集,从而进一步达到对树的随机化目的。因此,随机森林产生的偏差略有增加,但是由于对相关性较小的树计算平均值,估计方差减小了,导致模型的整体效果更好。
  集成学习与Bagging、Boosting和stacking
  四、Boosting\textbf{四、Boosting}四、Boosting
  Boosting其主要思想是将弱分类器组成一个强分类器。Boosting的工作机制为:先从初始训练集中训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整(比如增大被误分样本的权重,减小被正确分类样本的权重),使得先前基学习器做错的样本在后续的训练过程中受到更多关注,然后基于调整后的样本分布来训练下一个基学习器,如此重复,直到基学习器数目达到事先自定的值T TT,然后将这T TT个基学习器进行加权结合(比如错误率小的基学习器权重大,错误率大的基学习器权重小,这样做决策时,错误率小的基本学习器影响更大)。
  代表:AdaBoost,GBDT
  Boosting算法可以用下图简略形象的描述:
  集成学习与Bagging、Boosting和stacking
  关于Boosting的两个核心问题:
  1)在每一轮如何改变训练数据的权值或概率分布?
  通过提高那些在前一轮被弱分类器分错样例的权值,减小前一轮分对样本的权值,而使得误分的样本在后续受到更多的关注.
  2)通过什么样的方式来组合弱分类器?
  通过加法模型将弱分类器进行线性组合,比如AdaBoost通过加权多数表决的方式,即增大错误率小的分类器的权值,同时减小错误率较大的分类器的权值。而提升树通过拟合残差的方式逐步减小残差,将每一步生成的模型叠加得到最终模型。
  A)AdaBoost算法
  AdaBoost(Adaptive boosting)算法:刚开始训练时对每一个训练例赋相等的权重,然后用该算法对训练集训练M轮,每次训练后,对训练失败的训练例赋以较大的权重,也就是让学习算法在每次学习以后更注意学错的样本,从而得到多个预测函数。通过拟合残差的方式逐步减小残差,将每一步生成的模型叠加得到最终模型。
  AdaBoost算法步骤:
  1)假设训练数据集具有均匀的权值分布,即每个训练样本在基本分类的学习器中作用相同,这一假设保证第一步能够在原始数据上学习基本分类器G1(x)G_1(x)G1​(x)。
  2)AdaBoost反复学习基本分类器,在每一轮m=1,2,……,M,顺次的执行下列操作:
  a)使用当前分布DmD_mDm​加权的训练数据集,学习基本分类器Gm(x)G_m(x)Gm​(x);
  b)计算基本分类器Gm(x)G_m(x)Gm​(x)在加权数据训练集上的分类误差率:
  em=i=1NP(Gm(xi)yi)=Gm(xi)yiwmie_m=\sum_{i=1}^NP(G_m(x_i)≠y_i)=\sum_{G_m(x_i)≠y_i}w_{mi}em​=i=1∑N​P(Gm​(xi​)​=yi​)=Gm​(xi​)​=yi​∑​wmi​
  其中wmiw_{mi}wmi​表示第mmm轮中第iii个实例的权值Gm(x)G_m(x)Gm​(x)在加权的训练数据集上的分类误差率是被Gm(x)G_m(x)Gm​(x)误分类样本的权值之和。
  c)计算基本分类器Gm(x)G_m(x)Gm​(x)的系数m\partial_m∂m​:
  m=12log1emem\partial_m=\frac{1}{2}log\frac{1-e_m}{e_m}∂m​=21​logem​1−em​​
  当em12e_m≤\frac{1}{2}em​≤21​时,m0\partial_m≥0∂m​≥0,并且m\partial_m∂m​随着eme_mem​的减少而增大,所以分类误差率越小的基本分类器在最终分类器中的作用越大。
  d)更新训练数据集的权值分布:
  wm+1,i=wmiZmexp(myiGm(xi)),i=1,2,...,Nw_{m+1,i}=\frac{w_{mi}}{Z_m}exp(-\partial_my_iG_m(x_i)),i=1,2,...,Nwm+1,i​=Zm​wmi​​exp(−∂m​yi​Gm​(xi​)),i=1,2,...,N
  其中ZmZ_mZm​是规范化因子,即Zm=i=1Nwmiexp(myiGm(xi))Z_m=\sum_{i=1}^Nw_{mi}exp(-\partial_my_iG_m(x_i))Zm​=∑i=1N​wmi​exp(−∂m​yi​Gm​(xi​))
  3)构建基本分类器的线性组合:
  f(x)=i=1MmGm(x)f(x)=\sum_{i=1}^M\partial_mG_m(x)f(x)=i=1∑M​∂m​Gm​(x)
  最终分类器:
  G(x)=sign(f(x))=sign(i=1MmGm(x))G(x)=sign(f(x))=sign(\sum_{i=1}^M\partial_mG_m(x))G(x)=sign(f(x))=sign(i=1∑M​∂m​Gm​(x))
  小例子:试用AdaBoost算法学习一个强分类器
  集成学习与Bagging、Boosting和stacking
  1)初始化数据权值分布:D1=(w11,w12,...,w110)w1i=0.1,i=1,2,...,10D_1=(w_{11},w_{12},...,w_{110}),w_{1i}=0.1,i=1,2,...,10D1​=(w11​,w12​,...,w110​),w1i​=0.1,i=1,2,...,10
  当m=1m=1m=1时
  a)在权值分布为D1D_1D1​的训练数据上
  ①取阈值v=2.5v=2.5v=2.5时,求分类误差率:
  若x<2.5x<2.5x<2.5时取类别为1,x>2.5x>2.5x>2.5时取-1,那么“6,7,8”被分错,误差率为0.3;
  若x<2.5x<2.5x<2.5时取类别为-1,x>2.5x>2.5x>2.5时取1,那么“0,1,2,3,4,5,9”被分错,误差率为0.7;
  ②取阈值v=5.5v=5.5v=5.5时,求分类误差率:
  若x<5.5x<5.5x<5.5时取1,x>5.5x>5.5x>5.5时取-1,那么“3,4,5,6,7,8”被分错,误差率为0.6;
  若x<5.5x<5.5x<5.5时取-1,x>5.5x>5.5x>5.5时取1,那么“0,1,2,9”被分错,误差率为0.4;
  ③取阈值v=8.5v=8.5v=8.5时,求分类误差率:
  若x<8.5x<8.5x<8.5时取1,x>8.5x>8.5x>8.5时取-1,那么“3,4,5”被分错,误差率为0.3;
  若x<8.5x<8.5x<8.5时取-1,x>8.5x>8.5x>8.5时取1,那么“0,1,2,6,7,8,9”被分错,误差率为0.7
  阈值取2.5或8.5时,分类误差率最低,在这里我们取阈值为v=2.5v=2.5v=2.5时,故基本分类器为:
  G1(x)={1x<2.51x>2.5G_1(x)=\begin{cases}1&x<2.5\\-1&x>2.5\end{cases}G1​(x)={1−1​x<2.5x>2.5​
  b)G1(x)G_1(x)G1​(x)在训练数据集上的误差率:e1=P(G1(xi)yi)=0.3e_1=P(G_1(x_i)\ne y_i)=0.3e1​=P(G1​(xi​)​=yi​)=0.3
  c)计算G1(x)G_1(x)G1​(x)的系数:1=12log1e1e1=0.4236\partial_1=\frac{1}{2}log\frac{1-e_1}{e_1}=0.4236∂1​=21​loge1​1−e1​​=0.4236
  d)更新训练数据集的权值分布:
  D2=(w21,...,w210)D_2=(w_{21},...,w_{210})D2​=(w21​,...,w210​)
  w2i=w1iZiexp(1yiG1(xi)),i=1,2,...,10w_{2i}=\frac{w_{1i}}{Z_i}exp(-\partial_1y_iG_1(x_i)),i=1,2,...,10w2i​=Zi​w1i​​exp(−∂1​yi​G1​(xi​)),i=1,2,...,10
  D2=(0.07143,0.07143,0.07143,0.07143,0.07143,0.07143,  0.16667,0.16667,0.16667,0.07143)D_2=(0.07143,0.07143,0.07143,0.07143,0.07143,0.07143,\\   0.16667,0.16667,0.16667,0.07143)D2​=(0.07143,0.07143,0.07143,0.07143,0.07143,0.07143,  0.16667,0.16667,0.16667,0.07143)
  f1(x)=0.4236G1(x)f_1(x)=0.4236G_1(x)f1​(x)=0.4236G1​(x)
  分类器sign(f1(x))sign(f_1(x))sign(f1​(x))在训练数据集上有3个误分类点。
  当m=2m=2m=2时
  a)在权值分布为D2D_2D2​的训练数据上,阈值vvv取8.5时分类误差率最低,故基本分类器为:
  G2(x)={1x<8.51x>8.5G_2(x)=\begin{cases}1&x<8.5\\-1&x>8.5\end{cases}G2​(x)={1−1​x<8.5x>8.5​
  b)G2(x)G_2(x)G2​(x)在训练数据集上的分类误差率为:e2=0.2143e_2=0.2143e2​=0.2143
  c)计算2=0.6496\partial_2=0.6496∂2​=0.6496
  d)更新训练数据权值分布:
  D3=(0.0455,0.0455,0.0455,0.016667,0.016667,0.016667,0.10600,0.10600,  0.10600,0.0455)D_3=(0.0455,0.0455,0.0455,0.016667,0.016667,0.016667,0.10600,\\0.10600,   0.10600,0.0455)D3​=(0.0455,0.0455,0.0455,0.016667,0.016667,0.016667,0.10600,0.10600,  0.10600,0.0455)
  f2(x)=0.4236G1(x)+0.6496G2(x)f_2(x)=0.4236G_1(x)+0.6496G_2(x)f2​(x)=0.4236G1​(x)+0.6496G2​(x)
  分类器sign(f2(x))sign(f_2(x))sign(f2​(x))在训练数据集上有3个误分类点。
  当m=3m=3m=3时
  a)在权值分布为D3D_3D3​的训练数据上,阈值取5.5时分类误差率最低,故基本分类器为:
  G3(x)={1x>5.51x<5.5G_3(x)=\begin{cases}1&x>5.5\\-1&x<5.5\end{cases}G3​(x)={1−1​x>5.5x<5.5​
  b)G3(x)G_3(x)G3​(x)在训练数据集上的误差率:e3=0.1820e_3=0.1820e3​=0.1820
  c)计算3=0.7514\partial_3=0.7514∂3​=0.7514
  d)更新训练数据的权值分布:
  D4=(0.125,0.125,0.125,0.102,0.102,0.102,0.065,0.065,  0.065,0.125)D_4=(0.125,0.125,0.125,0.102,0.102,0.102,0.065,0.065,\\   0.065,0.125)D4​=(0.125,0.125,0.125,0.102,0.102,0.102,0.065,0.065,  0.065,0.125)
  于是得到:
  f3(x)=0.4236G1(x)+0.6496G2(x)+0.7514G3(x)f_3(x)=0.4236G_1(x)+0.6496G_2(x)+0.7514G_3(x)f3​(x)=0.4236G1​(x)+0.6496G2​(x)+0.7514G3​(x)
  分类器sign(f3(x))sign(f_3(x))sign(f3​(x))在训练数据集上有0个误分类点。
  于是最终的分类器为:
  G(x)=sign(f3(x))=sign(0.4236G1(x)+0.6496G2(x)+0.7514G3(x))G(x)=sign(f_3(x))=sign(0.4236G_1(x)+0.6496G_2(x)+0.7514G_3(x))G(x)=sign(f3​(x))=sign(0.4236G1​(x)+0.6496G2​(x)+0.7514G3​(x))
  五、stacking\textbf{五、stacking}五、stacking
  stacking是指通过原始数据集训练出来若干个初级学习器,将这些初级学习器的预测结果,作为新的训练集,再次学习一个新的学习器。
  其学习过程如下图所示:
  集成学习与Bagging、Boosting和stacking
  在stacking的模型训练阶段,新的学习模型的训练集是使用初级学习模型产生的,如果直接使用初级学习模型对初始的训练集样本进行预测来产生新的模型的训练集,这样会有极大的过拟合的风险,因此一般是用训练初级学习模型中未使用的样本来产生新的模型的训练集,交叉验证方法是比较常用的方法。
  六、结合策略\textbf{六、结合策略}六、结合策略
  结合策略一般有:平均法、简单平均法,加权平均法、投票法、绝对多数投票法、相对多数投票法、加权投票法。
  七、Bagging和Boosting二者之间的区别\textbf{七、Bagging和Boosting二者之间的区别}七、Bagging和Boosting二者之间的区别
  1、Bagging和Boosting的区别:
  1)样本选择上:
  Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
  Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
  2)样例权重:
  Bagging:使用均匀取样,每个样例的权重相等
  Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
  3)预测函数:
  Bagging:所有预测函数的权重相等。
  Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
  4)并行计算:
  Bagging:各个预测函数可以并行生成
  Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。
  2、决策树与这些算法框架进行结合所得到的新的算法:
  1)Bagging + 决策树 = 随机森林
  2)AdaBoost + 决策树 = 提升树
  3)Gradient Boosting + 决策树 = GBDT

上一篇:miller_rabin素数判定+Pollard-rho素因子分解


下一篇:2019年全国统一高考数学试卷理科新课标Ⅱ[解析版]