浅谈 Adaboost 算法

近来初步学习machine learning。发现adaboost 挺幽默,就把自己的一些思考写下来。

首要参看了http://stblog.baidu-tech.com/?p=19,其实说抄也不为过,但是我增加了一些我认为有意思的东西,所以我仍是把它贴出来了,呵呵。

---图像进行了修改

一 Boosting 算法的来历

boost 算法系列的来历来自于PAC Learnability(PAC 可学习性)。这套理论首要研讨的是啥时分一个疑问是可被学习的,当然也会评论关于可学习的疑问的具体的学习算法。这套理论是由Valiant提出来的,也因此(还有其他贡献哈)他获得了2010年的图灵奖。这儿也贴出Valiant的头像,标明下俺等菜鸟的崇拜之情。哈哈哈

 

 

PAC 定义了学习算法的强弱

  弱学习算法---辨认过失率小于1/2(即准确率仅比随机猜测略高的学习算法)

  强学习算法---辨认准确率很高并能在多项式时间内结束的学习算法

 

一同 ,Valiant和 Kearns首次提出了 PAC学习模型中弱学习算法和强学习算法的等价性疑问,即任意给定仅比随机猜测略好的弱学习算法 ,是不是可以将其提升为强学习算法 ? 假设二者等价 ,那么只需找到一个比随机猜测略好的弱学习算法就可以将其提升为强学习算法 ,而不用寻找很难获得的强学习算法。 也便是这种猜测,让很多牛人去方案算法来验证PAC理论的准确性。

不过很长一段时间都没有一个切实可行的方法来结束这个志向。细节决定胜败,再好的理论也需要有用的算法来实行。总算功夫不负有心人, Schapire在1996年提出一个有用的算法真实结束了这个夙愿,它的名字叫AdaBoost。AdaBoost把多个不一样的抉择方案树用一种非随机的方法组合起来,表现出惊人的功用!第一,把抉择方案树的准确率大大前进,可以与SVM比美。第二,速度快,且底子不用调参数。第三,几乎不Overfitting。我估计当时Breiman和Friedman一定快乐坏了,由于眼看着他们提出的CART正在被SVM比下去的时分,AdaBoost让抉择方案树起死回生!Breiman不由自主地在他的论文里赞扬AdaBoost是最好的现货方法(off-the-shelf,即“拿下了就可以用”的意思)。(这段话摘自计算学习那些事)

 

了解了这段有意思的来历,下面来看adaboost算法应当会喜好大增。

二 Boosting算法的展开前史(摘自http://stblog.baidu-tech.com/?p=19

Boosting算法是一种把若干个分类器联系为一个分类器的方法,在boosting算法发作之前,还出现过两种比照首要的将多个分类器联系 为一个分类器的方法,即boostrapping方法和bagging方法。我们先扼要介绍一下bootstrapping方法和bagging方法。

  1)bootstrapping方法的首要进程

  首要进程:

  i)重复地从一个样本集结D中采样n个样本

  ii)关于每次采样的子样本集,进行计算学习,获得假定Hi

  iii)将若干个假定进行组合,形成毕竟的假定Hfinal

  iv)将毕竟的假定用于具体的分类任务

  2)bagging方法的首要进程 -----bagging可以有多种抽取方法

  首要思路:

  i)操练分类器

  从整体样本调会集,抽样n* < N个样本 关于抽样的集结操练分类器Ci

  ii)分类器进行投票,毕竟的效果是分类器投票的优胜效果

  但是,上述这两种方法,都只是将分类器进行简略的组合,实践上,并没有发挥出分类器组合的威力来。直到1989年,Yoav Freund与 Robert Schapire提出了一种可行的将弱分类器组合为强分类器的方法。并由此而获得了2003年的哥德尔奖(Godel price)。

  Schapire还提出了一种前期的boosting算法,其首要进程如下:

  i)从样本整体集结D中,不放回的随机抽样n1 < n个样本,得到集结 D1

  操练弱分类器C1

  ii)从样本整体集结D中,抽取 n2 < n个样本,其间吞并进一半被C1 分类过失的样本。得到样本集结D2

  操练弱分类器C2

  iii)抽取D样本调会集,C1 和 C2 分类不一致样本,构成D3

  操练弱分类器C3

  iv)用三个分类器做投票,得到毕竟分类效果

  到了1995年,Freund and schapire提出了现在的adaboost算法,其首要构造可以描绘为:

  i)循环迭代多次

  更新样本分布

  寻找当时分布下的最优弱分类器

  计算弱分类器过失率

  ii)聚合多次操练的弱分类器

三 Adaboost 算法

  AdaBoost 是一种迭代算法,其间心思想是关于同一个操练集操练不一样的分类器,即弱分类器,然后把这些弱分类器集结起来,构造一个更强的毕竟分类器。(很多博客里说的三个臭皮匠赛过诸葛亮)

  算法本身是改动数据分布结束的,它根据每次操练集傍边的每个样本的分类是不是准确,以及前次的整体分类的准确率,来判定每个样本的权值。将修改权值的新数据送给基层分类器进行操练,然后将每次操练得到的分类器交融起来,作为毕竟的抉择计区别类器。

无缺的adaboost算法如下

简略来说,Adaboost有很多利益:

  1)adaboost是一种有很高精度的分类器

  2)可以运用各种方法构建子分类器,adaboost算法供应的是构造

  3)当运用简略分类器时,计算出的效果是可以了解的。而且弱分类器构造极点简略

  4)简略,不用做特征挑选

  5)不用担忧overfitting!

四 Adaboost 举例

或许你看了上面的介绍或许仍是对adaboost算法云里雾里的,没关系,baidu大牛举了一个很简略的比方,你看了就会对这个算法整体上很清楚了。

  下面我们举一个简略的比方来看看adaboost的结束进程:

  图中,“+”和“-”分别标明两种种类,在这个进程中,我们运用水平或许垂直的直线作为分类器,来进行分类。

  第一步:

  根据分类的准确率,得到一个新的样本分布D2­,一个子分类器h1

  其间划圈的样本标明被分错的。在右边的途中,比照大的“+”标明对该样本做了加权。

或许你对上面的ɛ1,ɑ1如何算的也不是很了解。下面我们算一下,不要嫌我烦琐,我开始步便是这么思考的,只需自己把算法演算一遍,你才会真实的懂这个算法的基地,后边我会再次提到这个。

算法开始步给了一个均匀分布 D 。所以h1 里的每个点的值是0.1。ok,当区别后,有三个点区别错了,根据算法过失表达式得到 过失为分错了的三个点的值之和,所以ɛ1=(0.1+0.1+0.1)=0.3,而ɑ1 根据表达式 的可以算出来为0.42. 然后就根据算法 把分错的点权值变大。如此迭代,毕竟结束adaboost算法。

  第二步:

  根据分类的准确率,得到一个新的样本分布D3,一个子分类器h2

  第三步:

  得到一个子分类器h3

  联系一切子分类器:

  因此可以得到联系的效果,从效果中看,及时简略的分类器,组合起来也能获得极好的分类效果,在比方中一切的。

五 Adaboost 疑问和思考

  到这儿,或许你现已对adaboost算法有了大致的了解。但是或许你会有个疑问,为何每次迭代都要把分错的点的权值变大呢?这么有啥优点呢?不这么不行吗? 这便是我当时的主见,为何呢?我看了好几篇介绍adaboost 的博客,都没有答复我的疑问,或许大牛认为太简略了,何足挂齿,或许他们并没有意识到这个疑问而一笔带过了。然后我仔细一想,或许前进过失点可以让后边的分类器权值更高。然后看了adaboost算法,和我开始的主见很靠近,但不满是。 注意到算法毕竟的表到式为,这儿面的a 标明的权值,是由得到的。而a是关于过失的表达式,到这儿就可以得到比照清楚的答案了,一切的一切都指向了过失。前进过失点的权值,当下一次分类器再次分错了这些点以后,会前进整体的过失率,这么就致使 a 变的很小,毕竟致使这个分类器在悉数混合分类器的权值变低。也便是说,这个算法让优良的分类器占整体的权值更高,而挫的分类器权值更低。这个就很契合常理了。到此,我认为对adaboost现已有了一个透彻的了解了。

 

六 总结

  毕竟,我们可以总结下adaboost算法的一些实践可以运用的场景:

  1)用于二分类或多分类的运用场景

  2)用于做分类任务的baseline

  无脑化,简略,不会overfitting,不用调分类器

  3)用于特征挑选(feature selection)

  4)Boosting构造用于对badcase的修改

  只需要增加新的分类器,不需要变化原有分类器

  由于adaboost算法是一种结束简略,运用也很简略的算法。Adaboost算法通过组合弱分类器而得到强分类器,一同具有分类过失率上界跟着操练增加而安稳下降,不会过拟合等的性质,应当说是一种很适合于在各种分类场景下运用的算法。

 

 ELISA试剂盒:http://www.shxrsw.net            http://www.hdbsw.com   
posted @ 2016-11-09 08:55  秋雨飘飘01  阅读(2017)  评论(0编辑  收藏  举报