机器学习笔记-Blending and Bagging

来源:互联网 发布:mac双系统 没了一个 编辑:程序博客网 时间:2024/06/06 19:55

集成学习系列:

  • Blending and Bagging
  • Adaptive Boosting
  • Decision Tree
  • Random Forest
  • Gradient Boosted Decision Tree

Blending and Bagging

为什么要用aggregation

如果我们已经有了一些模型hypothesis,或者已经有了一些feature,这些hypothesis可以帮助我们做预测,我们怎么样将这些已有的hypothesis或者是有有预测性的feature结合起来,让它们在一起的时候可以work的更好。这样的模型我们称之为aggregation model,也就是融合起来的模型。本篇介绍在aggregation中非常典型的两个做法,blendingbagging

那么为什么要用aggregation呢?

一个关于aggregation的故事

假如你有15个朋友,这15个朋友都告诉你明天股市的涨跌预测,那么你在听取了这15个朋友的预测之后,如何决定呢?

  • select from usual performance
    从他们的平常的表现中选择最厉害的那个人,听取他的意见作为最后的决策依据,这也就是我们以前学过的validation的方法,
  • mix uniformly
    但是如果只听一个人的,白白浪费了其余人的判断力,浪费了资源。所以另一种方式是以每人一票的方式,让这15个朋友进行投票,综合他们的判断做出最后的结果,
  • mix non-uniformly
    但是考虑到可能每一个人的能力确实不尽相同,所以可以选择另外一种投票的方式:可以信赖的人给多一点的票数,不是那么可以信赖的人的票数可以少一点。
  • combine conditionally
    又或者是可以根据具体的情况来进行选择, 例如这些朋友中有些人擅长分析科技类的股票,有些人擅长传统产业的股票,那么在不同的情况下,就选择听取不同的人的意见。

我们想要将这15个人的意见融合起来的事情, 就是aggregation想要做的事情,将每个人的预测结果融合起来以达到最好的结果。

我们将上述的这个问题用数学的形式表示出来:每一个朋友就代表每一个hypothesisg1,g2,,gT,也就是说这样就一共有15个预测模型。

  • select from usual performance
    G(x)=gt with t=argmint1,2,,T Eval(gt)
  • mix uniformly
    G(x)=sign(t=1T1gt(x))
  • mix non-uniformly
    G(x)=sign(t=1T αtgt(x)) with αt0

    通过参数α给每一个gt不同的权重。这种情况是包括前两种情况的:
    • αt=|[Eval(gt) smallest]|的时候,是第一种情况。(其中1=|[]|,if 成立;0=|[]|,if 不成立)
    • αt=1的时候,是第二种情况。
  • combine conditionally
    G(x)=sign(t=1Tqt(x)gt(x)) with qt(x)0

    权重的参数不再是α,而是变成了和输入特征x相关的函数qt(x)
    • qt(x)=αt的时候,就是以上的第三种情形。

Selection by Validation

G(x)=gt with t=argmint1,2,,T Eval(gt)

考虑上述提出的最简单的第一种情形,利用Validation来选择最好的gt。这个方法的优点是简单。但是该方法中有一个重要的假设,如果最终想要得到一个比较好的gt,那么首先在得到的一堆gt中至少要有一个不错的, 或者说是strong的。如果你的所有的朋友都对股市其实只是一知半解,那么你最终得到的最好的那一个人的意见也不见得会好到那里去。
而这里我们重点要谈论的aggregation不是这样的。aggregation擅长做的事情是,在没有一个很强的hypothesis的时候,或者说有一堆比较弱弱的但是还勉强的hypothesis的时候,把他们融合起来,通过集体的智慧,可以使得他们变的很强。这篇会讲解具体的不同的aggregation的做法。

为什么Aggregation可以work的很好呢

为什么aggregation可以很好的work呢,讨论如下的一个二分类的问题,假设我们只可以使用垂直的线和水平的线对上述的data进行分类(这样的话模型的复杂度很低),那么只用一条分割线无论如何都是不能完全划分的。但是如果可以将不同的垂直的线和水平的线结合起来对数据进行划分呢(这里垂直的线和水平的线就是不同的hypothesis),可能就可以得到比较好的结果。如下是结合了三条线对数据进行了划分。


这里写图片描述

从以上的结果可以看出来,如果只有一些弱弱的hypothsis,即那些只能是垂直或者是水平的线,但是如果将他们通过一定的方式合并起来的话,可能就会得到比较好的结果, 这里例子中就是得到了一个比较复杂的分类边界。这可能说明aggregation拓展了model的复杂度,这样看来aggregation的作用就好像是feature transform一样。


这里写图片描述

另一个对aggregation可以work的不错的解释是,当使用PLA算法对如下的data进行划分的时候,会得到不同的分割线,其中的每一个都能将数据完美的分开,但是我们知道如果通过SVM的话,可以得到有large-margin的分隔超平面。而使用PLA得到的可能就是图中灰色的任意一条,但是通过aggregation,或者说所有的这些灰色的线投票之后,就会得到一条比较largin margin的线,在这种情况下aggregation就会有large margin的类似于regularization的效果。

以前我们的认识是,feature transformregularization是在做相反的事情,前者就像在踩油门,后者像是在踩刹车。而在做aggregation的时候,好像同时在做这两件事情:可能是feature transform,使得model更加的powerful;也可能是regularization,在帮助模型做一个比较适中的选择。 所以如果可以把aggregation做好的话,可能就同时将feature transformregularization做好了。

Uniform Blending

上面比较直观的讲解了aggregation的好处,接下来我们开始讲解应该怎么样来做aggregation,即怎么样把这些hypothesis融合起来。
我们可以使用blending的方法来做aggregationblending这种方法主要用在我们已经收集到了一堆hypothesis,即已经有了一些已知的模型,需要对它们进行融合的情形。

如果对所有的hypothesis一视同仁,即给每一个g(x)相同的权重来进行组合的话,这种方式成为uniform blending

Uniform Blending用于分类

对于二元分类binary classification来说,uniform blending给每一个hypothesis相同的权重(所以叫uniform)来进行融合。根据融合的结果给出最终的判断,如下:

G(x)=sign(t=1T 1gt(x))

  • 如果所有已知的g(x)是相同的,那么aggregation是没有效果的
  • 如果所有已知的g(x)差距很大,多数的意见会纠正少数的意见。例如在以下的问题中,共有三个g(x):两个垂直线,一个水平线。对于数据点1和2来说,有两条线说它们是 (左边的垂直线和水平线),一条线(右边的的垂直线)说它们是 ×,所以它们被划分为 。对于其他的数据点来说也是使用这样的规则来进行划分的。
    这里写图片描述
  • 如果是多分类问题:那么我们就需要统计数据点在每一个类别上的“得票数”,将得票数最多的为该数据点的类别。
    G(x)=argmax1kKt=1T|[gt(x)=k]|

Uniform Blending用于回归

uniform blending将所有回归的值取平均:

G(x)=1Tt=1Tgt(x)

  • 如果所有已知的g(x)是相同的,那么aggregation是没有效果的
  • 如果所有已知的g(x)差距很大,那么对于一个数据点来说,有些g(x)可能低估了, 有些g(x)可能高估了,这样的话,它们的平均值就可能会估计的更准确一下。

小结: 如果aggregation这样的方法想要work的很好的话,有一个很重要的前提是g(x)要有一定的多样性diverse。当g(x)有一定的多样性的时候,即使只是做很简单的融合的操作,例如说uniform blending,也会有很好的结果。

Uniform Blending的理论分析

针对uniform blending用于regression,我们可以做简单的理论分析来解释为什么通过这样的aggregation的方式可以得到比单个的hypothesis更好的结果。
uniform blending用于regression的一般方式是:

G(x)=1Tt=1Tgt(x)

如果只是针对特定的x,那么上式可以写作:
G=1Tt=1Tgt

接下来我们想要分析的问题是:1T((gtf)2)=avg(gtf)2(Gf)2的大小关系,前者表示的是所有gx上的平均错误,也可以理解为任选一个gx上的平均错误;后者是经过aggregation得到的Gx上的平均错误。
即比较g的平均错误(因为取到哪个都是不一定的)和G的错误的大小关系。
avg ((gtf)2)=avg(g2t2gtf+f2)=avg(g2t)2Gf+f2=avg(g2t)G2+(Gf)2=avg(g2t)2G2+G2+(Gf)2=avg(g2t2gtG+G2)+(Gf)2=avg((gtG)2)+(Gf)2

当对所有的x进行计算的时候,可以得到如下的等式:

avg(Eout(gt))=avg(ε(gtG)2)+Eout(G)

所以可以得到的是:
avg(Eout(gt))Eout(G)

也就是说在使用uniform blending这样的aggregationregression的时候,得到的结果G确实要比所有g的平均表现好。尽管不知道是不是比最好的那个g表现好。

variance,bias

偏差bias度量了学习算法的期望预测和真实结果之间的偏离程度,即刻画了学习算法本身的拟合能力;
方差variance度量了同样大小的训练集的变动所导致的学习性能的变化,刻画了数据的扰动所造成的影响。

假设在每一轮的学习中,由N笔资料训练得到gt,共进行T轮的学习,每一轮使用来自同一分布的不同的资料。假设T可以取到无穷多,则得到:

g¯=limTG=limT1Tt=1Tgt=εD A(D)

avg(Eout(gt))=avg(ε(gtg¯)2)+Eout(g¯)

avg(Eout(gt))代表的是学习算法A表现的期望;Eout称为bias,也就是学习算法的期望预测和真实结果之间的偏离程度;avg(ε(gtg¯)2)称为方差variance不知道为什么要写一个ε,西瓜书上是没有的
所以一个学习算法的表现可以拆分为两项,这个学习算法产生的共识和每一个gt和这个共识的差异。

这块和西瓜书上写的有点不符合:日后补充
E(f,D)=bias2(x)+var(x)+ε2 (西瓜书)

所以通过这样的aggregation的方式,可以看到降低了variance,使得最终的学习算法的表现变好。


Linear and Any Blending

linear blending是要给每一个gt不同的权重(票数)αt,模型如下所示:

G(x)=sign(t=1Tαtgt(x)) with αt0

那么现在的问题就是要求解这些参数αt,求解的方法就是最小化Ein
如果我们现在要做的是Regression问题的话,我们求解α的策略当然就是最小化square error

Linear blending for regression

minαt0Ein(α)=minαt01Nn=1N(ynt=1Tαtgt(xn))2

如果将(g1,g2,,gT)看做是xn的特征转化 Φ ,那么以上的问题就可以变为我们熟悉的带有特征转换的线性模型,如下(1)所示,只不过是多了一个条件。并且这个过程和probability SVM中的two level learning的方法很相像:第一步将SVM用作一个特征的转换,然后使用logReg做微调。

linear regression + transformation

minwi01Nn=1N(yni=1d~wiϕi(xn))(1)

所以我们可以说:linear blending就等于一个将许多的hypothesis当成一个特征转化的线性模型,外加一个限制条件。即:
linear blending=linar model+hypothesis as transform+constraints

minαi01Nn=1Nerr(ynt=1Tαtgt(xn))

这个问题的求解不同于以往的仅仅是多了个constraints对于binary classification问题来说,如果在求解之后发现αt<0,那么说明学习算法觉得这个αt对应的gt反过来用能更好的fitting数据。所以在实际操作中通常都不考虑αt>0这个条件限制。

所以linear blending的解法就是加了feature transformlinear model的解法,其中的linear model可以是线性回归,或者是逻辑斯蒂回归。

现在我们来关注一下一个基本的问题:那些gt是怎么产生的?通常这些gt是在各自不同的model下最小化Ein得到的。
所以如果在做selection(见本篇第一节,aggregation的第一种方式)的时候,如果是根据Ein来做选择的话,模型的复杂度就会更大(是不是可以理解为越复杂的模型越容易被选到,因为它可以拟合的很好,做到Ein很小),所以我们通常会用Evalidation来做选择。
同样的,如果我们使用Ein作为最小化的目标来做linear aggregation,会导致更大的模型的复杂度,更加容易导致过拟合。也就是说,在实际应用中通常不使用Ein来学习α,因为这样很容易overfitting,而是在Dval上训练 α使得Eval最小。并且在Dtrain上得到一些g

Linear Blending

Linear Blending

  1. 将数据分为train datavalidation data
  2. Dtrain得到g1,g2,,gT
  3. Dval中的数据(xn,yn)利用g1,g2,,gT这些“特征转换”变换为(zn=Φ(xn),yn),其中Φ(x)=(g1(x),,gT(x))
  4. 利用线性模型求解资料{(zn,yn)}上的αα=Lin({(zn,yn)})
  5. 返回最后的结果GLinB(x)=Lin(innerprob(α,Φ(x)))

需要注意的是,Φ(x)=(g1(x),,gT(x))


Any Blending

在第4步中,我们也可以考虑不使用线性模型,而是使用非线性的模型(nonlinear SVM),这样的方式称为Any Blending或者Stacking

Any Blending

  1. 将数据分为train datavalidation data
  2. Dtrain得到g1,g2,,gT
  3. Dval中的数据(xn,yn)利用g1,g2,,gT这些“特征转换”变换为(zn=Φ(xn),yn),其中Φ(x)=(g1(x),,gT(x))
  4. g=Any({(zn,yn)})
  5. 返回GanyB=g(Φ(x))

这样模型会更加的powerful,但是同时也更加容易overfitting。所以any blending要非常的小心, 要加regularization等等。

Bagging (Bootstrap Aggregation)

如果已经通过某些方法得到了很多的g,我们可以通过blending的方式将它们融合起来,使得最后的分类器表现的很好。如果每一个g的权重(票数)是相同的, 那么可以得到uniform blendingaggregation方式;如果权重不是相同的, 那么就得到了linear blending;如果想要得到更为复杂的模型,在考虑在不同的模型下使用不同的权重的话,可以使用stacking来做。

这里有有一个很关键和很基础的问题是,这些g是怎么来的呢,我们是不是可以一边学习g,一边对它们进行融合。这是我们接下来要谈论的问题。因为aggregationg非常的diverse的时候会做的很好,所以我们就考虑怎么样可以得到不一样的g呢?

  • 不同的模型可能会得到不同的g
  • 对于用一个模型,不同的参数可能会得到不同的模型:例如对于GD算法来说,当η=0.001,0.01,0.110的时候会得到不同的模型。
  • 不同的初始值可能会得到不同的模型,例如PLA算法
  • 资料的不同可以得到不同的模型,例如当在做cross validation的时候,不用的几份数据可能会得到不同的g

接下来我们使用的方式是使用同一份资料来制作不用的g(不同于cross validation只能得到不同的g),利用的工具称为bootstrapping,它的作用是从手上已有的资料来模拟一些不一样的资料。

Bootstrapping Aggregation

bootstrapping:从原有的N笔资料中做N次有放回的采样(sampling with replacement)。既然是有放回的,那么就可能存在原资料中的某一笔被采样到了多次,或者一次都没有被采样到的情形。通过bootstrapping这样的方式得到的资料记为D~t

baggingbootstrapaggregation

  1. 通过bootstrapping的方式抽取大小为N的资料D~t
  2. 从资料D~t利用算法A中得到不同的gt
  3. gt做融合 G(x)=Uniform({gt})

这样的方法我们称为bootstrap aggregation, 一般我们称之为BAGging。我们把底层的算法A称为base algorithm,建筑在其上的演算法称为meta algorithm

Bagging通过利用bootstrap这样的机制生出一系列的g, 然后使用uniform的方式进行aggregation

Bagging Pocket的表现

由于pocket算法对于不同的资料表现会有很不同,如下图中的灰色的线是使用pocket算法在利用boostrap机制得到的25组不同的资料上得到的25条不同的线。通过将这些线进行融合得到了一个非线性的边界,如图中黑色的线所示。


这里写图片描述

如果算法base algorithm A对于数据的随机性越敏感,那么就会得到越多样性的g,这样通过aggregation的方式融合起来就会得到更好表现。

总结

这篇主要是aggregation的基础概念和方法的介绍。提到了blendingbagging,它们都属于aggregation的方法。aggregation就是要把一堆的g通过一定的方式进行融合变成一个G, 这个G可能更复杂,或者可能更“中庸”,这样就可能达到了feature transform或者是regularization的效果。 其中有一些基本的方式,例如uniform blending或者稍微复杂的linear blendingany blendingstacking,这些可以通过two level learning的求解其中的权重。 最后我们介绍了怎么通过bootstrapping的机制得到不同的g来对它们进行融合。

阅读全文
1 0
原创粉丝点击