• 集成学习概述


    一、集成学习(Ensemble Learning)

    集成学习是指通过训练多个分类器,然后将这些分类器组合起来,来获得比单个分类器更优的性能(比最好的那个分类器还要好)。如果每个分类器都是同种类型的(比如都是决策树或者都是SVM等等),那么这些单个的分类器我们称为基学习器;如果集成中包含不同类型的分类器,这样的集成是异质的。需要注意的是,这些单个的分类器性能不一定要很好,只需要比随机猜测好就可以。在我们一般的经验中,如果把好的东西与坏的东西掺杂在一起,那么结果通常是比最坏的要好但比最好的要差一些。那么,为什么集成学习可以获得比最好的单一学习器更好的性能呢?这要从人们对一个问题的争论谈起,即,强可学习与弱可学习是否等价。

    1、强可学习VS弱可学习

    强可学习((Strong PAC Learnability):一个概念C在假设空间H下是强可学习的,是指存在一个算法A,对cϵC、输入空间上的任意分布D以及εϵ(0,12)δϵ(0,12),从数据集D中给定多项式个(与1ε,1δ)独立同分布的样本,存在一个假设hϵH,使得:

    P(err(h)ε)1δ

    弱可学习(Weak PAC Learnability)一个概念C在假设空间H下是弱可学习的,是指存在一个算法A和一个γ>0,对cϵC、输入空间上的任意分布D以及δϵ(0,12),从数据集D中给定多项式个(与1δ同阶)独立同分布的样本,存在一个假设hϵH,使得:
    P(err(h)12γ)1δ

    也就是说,一个概念强可学习,那么其错误几乎可以很小;而一个弱可学习的概念,则只是比随机猜测好一点。
    Rob Schapire证明了强可学习与弱可学习是等价的,于是在学习中如果存在弱学习算法,我们就可以通过组合多个弱学习算法来得到强学习算法。
    如何选择学习器?
    每个学习器应尽可能不相关,同时分类错误率小于0.5。分类器要有足够的多样性(Diversity)。如何获得这些不相关的学习器呢?一种方法是,对训练数据集采样,这样采样出的子集有差异,训练出来的学习器也就有较大的差异;另一种方法是,先训练一个分类器,然后根据这个分类器的表现改变训练数据的分布,使得被分类错误的样本有更大的权重。这样,集成学习方法可以分成两类,一类是bagging/随机森林,一类是提升算法(Boosting)。


    二、Bagging与随机森林(Random Forest)、随机蕨(Random Fern)

    1、决策树(Decision Tree)

    决策树是一个常用的机器学习算法。它采用了分而治之的策略,也就是对一个分类问题,每次从学习得到的特征集中选取一个特征把输入数据分成两类。训练也就是生成决策树的时候,最关键的就是选择每个节点的划分标准。按照节点划分标准的不同,决策树可以分成三类:ID3、C4.5、CART。

    ID3

    ID3算法每次选择一个特征,使得样本集的信息量减少最大。这样,熵减少得最快,有望获得一棵深度最浅的树。具体是:已知训练样本集D(假设有C类),我们可以根据这个样本集中每一类出现的概率,算出样本集D包含的信息量。然后,从特征集X中选择一个特征x,则我们可以计算已知x的情况下各类的条件概率,然后计算出已知x的情况下D包含的信息量。也就是说,我们要选择一个x使得x与D相互包含的信息量最大:

    argmaxxϵXI(x,D)

    C4.5

    C4.5算法不直接用信息增益,而是使用信息增益率来选择最优划分。

    CART

    CART使用基尼指数来选择划分。基尼指数反映的是从数据集D中随机抽取两个样本,其类别标记不一致的概率。因此基尼指数越少,数据集D包含的信息量越少。CART在候选特征集中选取一个特征,使得划分后基尼指数最小。

    防止过拟合

    决策树防止过拟合的方法分别是:

    • 剪枝:包括预剪枝、后剪枝
    • 集成学习

    实际经验表明,决策树划分标准的选择,如信息增益、信息增益率、基尼指数虽然对决策树的深度有较大影响,但对泛化性能影响有限。而剪枝对决策树泛化性能的影响是相当显著的。

    2、Bagging集成

    如前所述,训练每个分类器的时候,每次从训练数据集中采样,用样本集训练基分类器。Bagging是一种有放回的采样。也就是训练的时候使用了相互有交叠的子集。

    3、随机森林(Random Forest)

    • 随机森林在以决策树为基学习器构建bagging集成基础上做了一些修改:在决策树训练的过程中引入了随机的属性选择,对决策树的每个节点,从该节点的属性集中随机选择一个子集,然后再从这个子集中选择一个最优的属性作为划分。这种随机选择增强了基学习器的多样性。
    • 引入选择属性的随机性,降低了单个决策树的性能,但随着学习器数目的增加,随机森林比Bagging收敛到更低的泛化误差。

    三、提升算法(Boosting)

    1、常用的提升算法包括Adaboost(自适应提升算法)、Gradient Boost(梯度提升)等。
    Boosting算法的训练过程是:从初始训练集中训练出一个基学习器,再根据基学习器调整训练样本的分布,使得先前分类错误的样本获得更多的关注,然后用调整后的样本分布训练下一个基学习器。如此重复直到基学习器数目达到预定的值。最后输出是这T个学习器的某种加权。
    2、提升算法的关键有两个,一是如何改变训练样本的分布;二是如何将弱分类器组合成强分类器。
    Adaboost训练时提高那些被前一轮分类错误的样本的权值,而降低那些被分类正确的样本的权值;Gradient Boost每一次的计算都是为了减少上一次的残差,使得损失函数在梯度方向下降。

    Adaboost算法

    输入:训练集D={(x1,y1),(x2,y2),…,(xm,ym)};基学习算法ε;训练轮数T
    过程:
    1、D1(x)=1m
    2、for t=1,2,3,…,T,do
      ht=ε(D,Dt)
      εt=PxDt(ht(x)f(x))
      if εt>0.5,then break
      αt=12ln1εtεt
      Dt+1(x)=Dt(x)Zt×{exp(αt),if ht(x)=f(x)exp(αt),if ht(x)f(x)
      end for
    输出:H(x)=sign(ΣTt=1αtht(x))

      

    参考文献:
    [1]李航.统计学习方法
    [2]周志华.机器学习

  • 相关阅读:
    稳扎稳打Silverlight(13) 2.0交互之鼠标事件和键盘事件
    稳扎稳打Silverlight(17) 2.0数据之详解DataGrid, 绑定数据到ListBox
    再接再厉VS 2008 sp1 + .NET 3.5 sp1(2) Entity Framework(实体框架)之详解 Linq To Entities 之一
    稳扎稳打Silverlight(8) 2.0图形之基类System.Windows.Shapes.Shape
    稳扎稳打Silverlight(11) 2.0动画之ColorAnimation, DoubleAnimation, PointAnimation, 内插关键帧动画
    稳扎稳打Silverlight(21) 2.0通信之WebRequest和WebResponse, 对指定的URI发出请求以及接收响应
    稳扎稳打Silverlight(16) 2.0数据之独立存储(Isolated Storage)
    稳扎稳打Silverlight(9) 2.0画笔之SolidColorBrush, ImageBrush, VideoBrush, LinearGradientBrush, RadialGradientBrush
    稳扎稳打Silverlight(23) 2.0通信之调用WCF的双向通信(Duplex Service)
    游戏人生Silverlight(1) 七彩俄罗斯方块[Silverlight 2.0(c#)]
  • 原文地址:https://www.cnblogs.com/goodluckcwl/p/5686106.html
Copyright © 2020-2023  润新知