前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《机器学习》学习笔记(七)——集成学习

《机器学习》学习笔记(七)——集成学习

作者头像
荣仔_最靓的仔
发布2021-02-02 17:48:32
6670
发布2021-02-02 17:48:32
举报

机器学习(Machine Learning)是一门多学科交叉专业,涵盖概率论知识,统计学知识以及复杂算法知识,使用计算机作为工具并致力于真实实时的模拟人类学习方式, 并将现有内容进行知识结构划分来有效提高学习效率。本专栏将以学习笔记形式对《机器学习》的重点基础知识进行总结整理,欢迎大家一起学习交流! 专栏链接:《机器学习》学习笔记

目录

个体与集成

Boosting

Boosting算法

Adaboost

AdaBoost算法

Adaboost的算法流程

Adaboost的例子

AdaBoost实验

Bagging与随机森林

Bagging算法

Bagging算法特点

随机森林算法

结合策略

平均法

投票法

​学习法

多样性

误差-分歧分解

多样性度量​

多样性扰动


个体与集成

集成学习(ensemble learning)通过构建并结合多个学习器来提升性能。

考虑一个简单的例子,在二分类问题中,假定3个分类器在三个样本中的表现如下图所示,其中表示分类正确,X 号表示分类错误,集成的结果通过投票产生。

集成个体应:好而不同

考虑二分类问题,假设基分类器的错误率为:

假设继承通过简单投票法结合T个分类器,若有超过半数的基分类器正确则分类就正确

假设基分类器的错误率相互独立,则由Hoeffding不等式可得集成的错误率为:

上式显示,在一定条件下,随着集成分类器数目的增加,集成得到错误率将指数级下降,最终趋向于0.

  • 上面的分析有一个关键假设:基学习器的误差相互独立
  • 现实任务中,个体学习器是为解决同一个问题训练出来的,显然不可能互相独立
  • 事实上,个体学习器的“准确性”和“多样性”本身就存在冲突
  • 如何产生“好而不同”的个体学习器是集成学习研究的核心
  • 集成学习大致可分为两大类:BoostingAdaboost

Boosting

  • 个体学习器存在强依赖关系
  • 串行生成
  • 每次调整训练数据的样本分布

Boosting算法

Adaboost

AdaBoost算法

AdaBoost,是英文“Adaptive Boosting”(自适应增强)的缩写,由Yoav Freund和Robert Schapire在1995年提出。Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些Adaboost弱分类器集合起来,构成一个更强的最终分类器(强分类器)。其算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器最后融合起来,作为最后的决策分类器。使用adaboost分类器可以排除一些不必要的训练数据特征,并将关键放在关键的训练数据上面。

目前,对adaBoost算法的研究以及应用大多集中于分类问题,同时近年也出现了一些在回归问题上的应用。就其应用adaBoost系列主要解决了: 两类问题、多类单标签问题、多类多标签问题、大类单标签问题,回归问题。它用全部的训练样本进行学习。

该算法其实是一个简单的弱分类算法提升过程,这个过程通过不断的训练,可以提高对数据的分类能力。整个过程如下所示:

  1. 先通过对N个训练样本的学习得到第一个弱分类器;
  2. 将分错的样本和其他的新数据一起构成一个新的N个的训练样本,通过对这个样本的学习得到第二个弱分类器 ;
  3. 将1和2都分错了的样本加上其他的新样本构成另一个新的N个的训练样本,通过对这个样本的学习得到第三个弱分类器;
  4. 最终经过提升的强分类器 。即某个数据被分为哪一类要通过 , ……的多数表决。

Adaboost的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。

具体说来,整个Adaboost 迭代算法就3步:

  • 初始化训练数据的权值分布。如果有N个样本,则每一个训练样本最开始时都被赋予相同的权重:1/N。
  • 训练弱分类器。具体训练过程中,如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它的权重就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。然后,权重更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。
  • 将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。换言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小。

Adaboost的算法流程

对于这个算法需要介绍的是:

  1. 算法开始前,需要将每个样本的权重初始化为1/m,这样一开始每个样本都是等概率的分布,每个分类器都会公正对待。
  2. 开始迭代后,需要计算每个弱分类器的分类错误的误差,误差等于各个分错样本的权重和,这里就体现了样本权重的作用。如果一个分类器正确分类了一个权重大的样本,那么这个分类器的误差就会小,否则就会大。这样就对分类错误的样本更大的关注。
  3. 获取最优分类器后,需要计算这个分类器的权重,然后再更新各个样本的权重,然后再归一化。
  4. 算法迭代的次数一般不超过弱分类器的个数,如果弱分类器的个数非常之多,那么可以权衡自己性价比来折中选择。
  5. 迭代完成后,最后的分类器是由迭代过程中选择的弱分类器线性加权得到的。

Adaboost的例子

求解过程:

  • 初始化训练数据的权值分布,令每个权值W1i = 1/N = 0.1,其中,N = 10,i = 1,2, ..., 10,然后分别对于m = 1,2,3, ...等值进行迭代。
  • 拿到这10个数据的训练样本后,根据 X 和 Y 的对应关系,要把这10个数据分为两类,一类是“1”,一类是“-1”,根据数据的特点发现:“0 1 2”这3个数据对应的类是“1”,“3 4 5”这3个数据对应的类是“-1”,“6 7 8”这3个数据对应的类是“1”,9是比较孤独的,对应类“-1”。
  • 抛开孤独的9不讲,“0 1 2”、“3 4 5”、“6 7 8”这是3类不同的数据,分别对应的类是1、-1、1,直观上推测可知,可以找到对应的数据分界点,比如2.5、5.5、8.5 将那几类数据分成两类。当然,这只是主观臆测,下面实际计算下这个过程。

:初始化数据权值分布

D_{1}=(\omega _{11},\omega _{12},...,\omega _{110})
D_{1}=(\omega _{11},\omega _{12},...,\omega _{110})
\omega _{1i}=0.1, i=1,2,...,10
\omega _{1i}=0.1, i=1,2,...,10

m=1
m=1

, 在权值分布为

D_{1}
D_{1}

的训练数据上,阈值v取2.5时分类误差率最低,故基本分类器为

G_{1}(x)=\left\{\begin{matrix} 1,x<2.5\\ -1,x>2.5 \end{matrix}\right.
G_{1}(x)=\left\{\begin{matrix} 1,x<2.5\\ -1,x>2.5 \end{matrix}\right.

对于m=1,在权值分布为D1(10个数据,每个数据的权值皆初始化为0.1)的训练数据上,经过计算可得: 阈值v取2.5时误差率为0.3(x < 2.5时取1,x > 2.5时取-1,则6 7 8分错,误差率为0.3) 阈值v取5.5时误差率最低为0.4(x < 5.5时取1,x > 5.5时取-1,则3 4 5 6 7 8皆分错,误差率0.6大于0.5,不可取。故令x > 5.5时取1,x < 5.5时取-1,则0 1 2 9分错,误差率为0.4) 阈值v取8.5时误差率为0.3(x < 8.5时取1,x > 8.5时取-1,则3 4 5分错,误差率为0.3)。所以无论阈值v取2.5,还是8.5,总得分错3个样本,故可任取其中任意一个如2.5,弄成第一个基本分类器为: 上面说阈值v取2.5时则6 7 8分错,所以误差率为0.3,更加详细的解释是: 因为样本集中 : 0 1 2对应的类(Y)是1,因它们本身都小于2.5,所以被G1(x)分在了相应的类“1”中,分对了。 3 4 5本身对应的类(Y)是-1,因它们本身都大于2.5,所以被G1(x)分在了相应的类“-1”中,分对了。 但6 7 8本身对应类(Y)是1,却因它们本身大于2.5而被G1(x)分在了类"-1"中,所以这3个样本被分错了。 9本身对应的类(Y)是-1,因它本身大于2.5,所以被G1(x)分在了相应的类“-1”中,分对了。 从而得到G1(x)在训练数据集上的误差率(被G1(x)误分类样本“6 7 8”的权值之和)e1=P(G1(xi)≠yi) = 3*0.1 = 0.3。 然后根据误差率e1计算G1对的系数:

\alpha _{1}=\frac{1}{2}log\frac{1-e_{1}}{e_{1}}=0.4236
\alpha _{1}=\frac{1}{2}log\frac{1-e_{1}}{e_{1}}=0.4236

这个a1代表G1(x)在最终的分类函数中所占的权重,为0.4236.接着更新徐念数据的权值分布,用于下一轮你迭代:

值得一提的是,由权值更新的公式可知,每个样本的新权值是变大还是变小,取决于它是被分错还是被分正确。 即如果某个样本被分错了,则yi * Gm(xi)为负,负负等正,结果使得整个式子变大(样本权值变大),否则变小。 第一轮迭代后,最后得到各个数据新的权值分布D2 = (0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.1666, 0.1666, 0.1666, 0.0715)。 由此可以看出,因为样本中是数据“6 7 8”被G1(x)分错了,所以它们的权值由之前的0.1增大到0.1666,反之,其它数据皆被分正确,所以它们的权值皆由之前的0.1减小到0.0715。 分类函数f1(x)= a1*G1(x) = 0.4236G1(x)。 此时,得到的第一个基本分类器sign(f1(x))在训练数据集上有3个误分类点(即6 7 8)。 从上述第一轮的整个迭代过程可以看出:被误分类样本的权值之和影响误差率,误差率影响基本分类器在最终分类器中所占的权重。 迭代过程2: 对于m=2,在权值分布为D2 = (0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.1666, 0.1666, 0.1666, 0.0715)的训练数据上,经过计算可得: 阈值v取2.5时误差率为0.1666*3(x < 2.5时取1,x > 2.5时取-1,则6 7 8分错,误差率为0.1666*3), 阈值v取5.5时误差率最低为0.0715*4(x > 5.5时取1,x < 5.5时取-1,则0 1 2 9分错,误差率为0.0715*3 + 0.0715), 阈值v取8.5时误差率为0.0715*3(x < 8.5时取1,x > 8.5时取-1,则3 4 5分错,误差率为0.0715*3)。

总观迭代步骤:

数据分布的学习

  • 重赋权法(原始数据集不变,权重变)
  • 重采样法

重启动,避免训练过程过早停止

AdaBoost实验

从偏差-方差的角度:降低偏差,可对泛化性能相当弱的学习器构造出很强的集成。

Bagging与随机森林

  • 个体学习器不存在强依赖关系
  • 并行化生成
  • 自助采样法

Bagging算法

Bagging算法特点

时间复杂度低

  • 假定基学习器的计算复杂度为O(m),采样与投票/平均过程的复杂度为O(s),则bagging的复杂度大致为T(O(m)+O(s))
  • 由于O(s)很小且T是一个不大的常数
  • 因此训练一个bagging集成与直接使用基学习器的复杂度同阶

可使用包外估计(由于Bootstrap sampling 只使用2/3左右数据,剩下的用作验证,称为“包外估计”—out of bag estimate)

  • 随机森林(Random Forest,简称RF)是bagging的一个扩展变种
  • 采样的随机性
  • 属性选择的随机性

随机森林算法

结合策略

学习器的组合可以从三个方面带来好处

由于学习任务的假设空间往往很大,可能有多个假设在训练集上达到同等性能,此时若使用但学习器可能因误选而导致泛化性能不佳,结合多个学习器则会减小这一风险。

学习算法往往会陷入局部极小,有的局部极小点所对应的泛化性能可能很糟,而通过多次运行之后进行结合,可降低陷入糟糕局部极小点的风险。

某些学习任务的真实假设可能不在当前学习算法所考虑的假设空间中,此时若使用但学习器则肯定无效,而通过结合多个学习器,由于响应的假设空间有所扩大,有可能学得更好的近似。

平均法

简单平均法

加权平均法

  • 简单平均法是加权平均法的特例
  • 加权平均法在二十世纪五十年代被广泛使用
  • 集成学习中的各种结合方法都可以看成是加权平均法的变种或特例
  • 加权平均法可认为是集成学习研究的基本出发点
  • 加权平均法未必一定优于简单平均法

投票法

学习法

多样性

误差-分歧分解

多样性度量

多样性扰动

常见的增强个体学习器的多样性的方法

  • 数据样本扰动
  • 输入属性扰动
  • 输出表示扰动
  • 算法参数扰动

数据样本扰动通常是基于采样法

  • Bagging中的自助采样法
  • Adaboost中的序列采样

对数据样本的扰动敏感的基学习器(不稳定基学习器)

  • 决策树,神经网络等

对数据样本的扰动不敏感的基学习器(稳定基学习器)

  • 线性学习器,支持向量机,朴素贝叶斯,k近邻等

数据样本扰动对“不稳定基学习器”很有效

随机子空间算法(random subspace)

输出表示扰动

  • 翻转法(Flipping Output):随机改变一部分训练样本的标记
  • 输出调剂法(Output Smearing):将分类输出转化为回归输出等
  • ECOC法:利用纠错输出码将多个问题拆解为一系列的二分类任务

算法参数扰动

  • 负相关法
  • 不同的多样性增强机制同时使用

欢迎留言,一起学习交流~~~

感谢阅读

END

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 个体与集成
  • Boosting
    • Boosting算法
    • Adaboost
      • AdaBoost算法
        • Adaboost的算法流程
          • Adaboost的例子
            • AdaBoost实验
            • Bagging与随机森林
              • Bagging算法
                • Bagging算法特点
                  • 随机森林算法
                  • 结合策略
                    • 平均法
                      • 投票法
                        • 学习法
                        • 多样性
                          • 误差-分歧分解
                            • 多样性度量
                              • 多样性扰动
                              • 欢迎留言,一起学习交流~~~
                              • END
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档