Skip to content

[机器学习]05 集成学习

集成学习的思想是将多个模型组合起来,形成一个更强大的模型。

5.1 个体与集成

5.1.1 个体学习器的类别

5.1.2 个体学习器的要求

这里用一个例子引出。假设有3个个体学习器,3个测试用例,下表中√表示判断正确,×表示判断错误。下面3个表展示了集成学习后的3种可能的效果。 5.1_个体学习器的要求

  • 可见,(a)通过集成学习,集成了3个精度23的弱学习器,得到了精度为1的强学习器。这是理想的情况。

  • (b)中,即使集合了3个弱学习器,但总体精度却没有提升,这是因为3个弱学习器的结果高度相同,也就是“它们仨”大概是从同一个角度进行分类的

  • (c)更寄了,集成学习后的精度反而低于弱学习器的精度。3个弱学习器的精度都不太高:都是13

  • 由此可知个体学习器的要求:

    • 个体学习器要有一定的准确性,即学习器不能太弱
    • 个体学习器之间要有差异性,即学习器之间不能太相似。
    • 这两句合称为“好而不同

5.1.3 简单分析

  • 对于二分类问题(类别记为+1,-1),若基分类器的判断结果表示为hi(x),真实类别表示为f(x)
    • 则错误率为P(hi(x)f(x))=ϵ
    • 则集成后的错误率为H(x)=sign(i=1Thi(x))(用求和表示投票结果)
  • 根据Hoeffding不等式(公式略)可知随着T增大,集成的错误率H(x)将指数级下降,最终趋于0。这说明集成学习“前途光明”
  • 但这个结论建立在一个关键假设上:基学习器的误差相互独立....但事实上它们不可能相互独立,因为个体学习器都是针对同一个问题训练的,这又说明集成学习“道路曲折”。一般来说“准确性”和“多样性”是一对杠杆,集成学习的关键就是如何在准确性和多样性之间寻找平衡,即产生“好而不同”的个体学习器。

5.1.4 常用集成学习类别

5.2 Boosting

我们直接从AdaBoost开始吧

5.2.1 AdaBoost

  • AdaBoost算法的最经典的表示为:h(x)=t=1Tatht(x),其中t表示迭代次数,at表示第t个基学习器的权重,ht(x)表示第t个基学习器(的输出结果)。

(1) 伪代码及理解

  • 输入:训练集D={(x1,y1),(x2,y2),....,(xm,ym)};基学习算法L;训练轮次T
  • 过程
  1. D1(x)=1/m (初始化训练集权重分布)
  2. for t=1,2,,T do (迭代训练T个基学习器)
    • ht=L(D,Dt) (基学习器训练)
    • ϵt=Px Dt(ht(x)f(x)) (估算基学习器误差)
  3. if ϵt>0.5 then break (如果基学习器效率还不如瞎蒙,则提前停止)
  4. αt=12ln1ϵtϵt (计算基学习器权重,易知αt为正数,且和误差ϵt成反比)
  5. (计算下次迭代各样本的权重,若本次判对了则降低权重,否则增加,用以调整下次的注意力,书中叫“样本分布”)
Dt+1(i)=Dt(i)Zt{eαt,ht(xi)=f(xi)eαt,ht(xi)f(xi)
  1. end for
  • 输出H(x)=sign(t=1Tαtht(x)) (其实就是投票法)

(2) 重赋权法和重采样法

这里的2种方法是AdaBoost针对“基学习器能够对特定的数据分布进行学习”的处理方法,其实在伪码中已经体现了,不用担心。

Boosting算法要求基学习器能够对特定的数据分布进行学习,这可通过“重赋权法”实现,如果基学习器算法不支持赋权,则用“重采样法”代替。

  • 重赋权法:“训练过程的每一轮,根据样本分布为每个训练样本重新赋予一个权重”,其实就是上述伪码第7行,重新分配各样本的权重。
  • 重采样法:“每一轮学习中,根据样本分布对训练集重新采样,用重采样而得的样本集对基学习器进行训练”
    • 此外,重采样法能避免重赋权法可能的“过早停止”的问题(伪码第5行,若性能不佳则迭代直接停止),每次迭代都可获得“重启动”的机会,因此能保证迭代T轮。

(3) 分析

  • Boosting主要关注降低偏差,因此它能基于泛化性能相当弱的学习器构建出很强的集成。

5.3 Bagging与随机森林

5.3.1 Bagging

  • Bagging直接基于“自助采样法”(也就是有放回采样),单次采集m个样本,共采集T次,获得T个基学习器的训练集。
  • 基于这些训练集训练出T个基学习器,最后进行投票法(分类问题)或平均法(回归问题)得到最终结果。

(1) 伪代码

  • 输入:训练集D={(x1,y1),(x2,y2),....,(xm,ym)};基学习算法L;训练轮次T
  • 过程
  1. for t=1,2,,T do (迭代训练T个基学习器)
    • ht=L(D,Dbs)

    (基学习器训练,Dbs为从D中有放回采样得到的训练集)

  2. end for
  • 输出H(x)=argmaxyYt=1TII(ht(x)=y) (分类问题,投票法)

(2) 分析:Bagging的特点

  • 时间复杂度低
    • Bagging实质是多个弱分类器直接组合,所以若基分类器的时间复杂度为O(m),投票/平均过程的时间复杂度为O(T),则Bagging的时间复杂度近似为T(O(m)+O(s))
    • 而且由于O(s)通常很小,且T也不会很大,因此Bagging的时间复杂度通常与直接使用基学习器的复杂度同阶。
  • 包外估计:根据自助法的特点:平均只有63.2%的样本出现在采样集中,因此可用剩余的36.8%的样本作为验证集,用以估计泛化性能。

5.3.2 随机森林

随机森林实质上是Bagging的一个扩展变体,其基学习器为决策树,但在决策树的训练过程中引入了随机属性选择。

  • 首先随机森林就是一种Bagging,所以基本框架和Bagging伪码一致。每个基决策树的训练集同样是自助法产生,在训练集的构建中引入扰动(随机性)。
  • 传统决策树在构建的时候,每次都从当前节点的全部属性中选择最优属性划分;而随机森林则先从当前结点的全部属性中随机选k个属性,然后再从这k个属性中选择最优属性进行划分。(通常推荐k=log2d,d为“全部属性”的数量)
    • 也就是说,它在决策树选择属性的过程中也引入了“扰动”
    • 除此自外,它和Bagging别无二致;但它却在很多任务中展现出强大的性能。

(1) 总结

  • 随机森林是Bagging的一个扩展变体。
  • 随机森林不仅具有采样的随机性(Bagging就有),还在构建决策树的过程中引入了属性选择的随机性

5.4 结合策略

学习器结合可能从统计计算表示三个方面带来好处,因此集成学习是有意义的。

5.4.1 平均法

平均法适合回归问题

  • 简单平均法:H(x)=1Ti=1Thi(x)
  • 加权平均法:H(x)=t=1Twtht(x)
    • 权重通常是从训练数据中学习得到的,如AdaBoost中的αi

虽然加权平均似乎比简单平均法更好,但实际上并不一定。

一般而言,个体学习器性能相差较大时宜使用加权平均法性能相近时宜使用简单平均法

想想也合理,集成的目的就是“集各家之长”,哪个好就加大哪个的话语权嘛;而如果都差不多,那么话语权也应该差不多——简单平均。

5.4.2 投票法

投票法适合分类问题

  • 绝对多投票法:若某个标记票数多于半数则预测为该标记,否则拒绝预测。
  • 相对多投票法:预测为得票最多的标记,若得票最多的标记不唯一则随机选其中之一。
  • 加权投票法:每个基分类器都有个权重wi,每个基分类器对某个样本都输出j个{+1,-1}值:是否属于第j类,最后将所有基分类器的输出加权求和,得到最终的输出。

5.4.3 学习法

咕咕咕

5.5 多样性

Extra05-总结

  • 本章的知识脉络如下
  • 其中,AdaBoost和随机森林是两个重点,需要了解算法思想、原理、伪代码(最好包括实现)

上次更新于: