AdaBoost & AdaRank

1. AdaBoost

   

    实习了三个多月,把ML的算法都忘得差不多了,最近写论文用到了AdaBoost和AdaRank,这里重新复习总结了下,主要参考了:http://blog.csdn.net/haidao2009/article/details/7514787

    AdaBoost 是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器,即弱分类器,然后把这些弱分类器集合起来,构造一个更强的最终分类器。(很多博客里说的三个臭皮匠赛过诸葛亮)

    算法本身是改变数据分布实现的,它根据每次训练集之中的每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改权值的新数据送给下层分类器进行训练,然后将每次训练得到的分类器融合起来,作为最后的决策分类器。完整的adaboost算法如下:

    

    下面我们举一个简单的例子来看看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

 

第三步:

得到一个子分类器h

第四步:

整合所有子分类器:

    因此可以得到整合的结果,从结果中看,及时简单的分类器,组合起来也能获得很好的分类效果,在例子中所有的。

 

一些思考:

    到这里,也许你已经对adaboost算法有了大致的理解。但是也许你会有个问题,为什么每次迭代都要把分错的点的权值变大呢?这样有什么好处呢?不这样不行吗? 这就是我当时的想法,为什么呢?我看了好几篇介绍adaboost 的博客,都没有解答我的疑惑,也许大牛认为太简单了,不值一提,或者他们并没有意识到这个问题而一笔带过了。然后我仔细一想,也许提高错误点可以让后面的分类器权值更高。然后看了adaboost算法,和我最初的想法很接近,但不全是。 注意到算法最后的表到式为,这里面的a 表示的权值,是由 得到的。而a是关于误差的表达式,到这里就可以得到比较清晰的答案了,所有的一切都指向了误差。提高错误点的权值,当下一次分类器再次分错了这些点之后,会提高整体的错误率,这样就导致 a 变的很小,最终导致这个分类器在整个混合分类器的权值变低。也就是说,这个算法让优秀的分类器占整体的权值更高,而挫的分类器权值更低。这个就很符合常理了。到此,我认为对adaboost已经有了一个透彻的理解了。

 

总结:

我们可以总结下adaboost算法的一些实际可以使用的场景:

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

2)用于做分类任务的baseline

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

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

4)Boosting框架用于对badcase的修正

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

由于adaboost算法是一种实现简单,应用也很简单的算法。Adaboost算法通过组合弱分类器而得到强分类器,同时具有分类错误率上界随着训练增加而稳定下降,不会过拟合等的性质,应该说是一种很适合于在各种分类场景下应用的算法。

时间: 2024-08-24 20:00:35

AdaBoost & AdaRank的相关文章

决策树 随机森林 adaboost

? 熵.互信息? 决策树学习算法 ? 信息增益 ? ID3.C4.5.CART? Bagging与随机森林? 提升 ? Adaboost/GDBT ? 熵.互信息 熵是对平均不确定性的度量. 平均互信息:得知特征Y的信息而使得对标签X的信息的不确定性减少的程度.描述随机变量之间的相似程度.(条件熵.相对熵:差异性) ? 决策树 决策树学习采用的是自顶向下的递归方法,有监督学习. 其基本思想是以信息熵为度量构造一棵熵值下降最快的树,到叶子节点处的熵值为零,此时每个叶节点中的实例都属于同一类. 建立

Adaboost提升算法从原理到实践

1.基本思想: 综合某些专家的判断,往往要比一个专家单独的判断要好.在"强可学习"和"弱科学习"的概念上来说就是我们通过对多个弱可学习的算法进行"组合提升或者说是强化"得到一个性能赶超强可学习算法的算法.如何地这些弱算法进行提升是关键!AdaBoost算法是其中的一个代表. 2.分类算法提升的思路: 1.找到一个弱分类器,分类器简单,快捷,易操作(如果它本身就很复杂,而且效果还不错,那么进行提升无疑是锦上添花,增加复杂度,甚至上性能并没有得到提升

《机器学习实战》学习笔记:利用Adaboost元算法提高分类性能

一. 关于boosting算法的起源 boost 算法系列的起源来自于PAC Learnability(直译过来称为:PAC 可学习性).这套理论主要研究的是什么时候一个问题是可被学习的. 我们知道,可计算性在计算理论中已经有定义,而可学习性正是PAC Learnability理论所要定义的内容.另外,在计算理论中还有很大一部分精力花在研究问题是可计算的时候,其复杂度又是什么样的.因此,在计算学习理论中,也有研究可学习的问题的复杂度的内容,主要是样本复杂度 (Sample Complexity)

监督算法大比拼之BP、SVM、adaboost非线性多分类实验

写在之前: 前些文章曾经细数过从决策树.贝叶斯算法等一些简单的算法到神经网络(BP).支持向量机(SVM).adaboost等一些较为复杂的机器学习算法(对其中感兴趣的朋友可以往前的博客看看),各种算法各有优缺点,基本上都能处理线性与非线性样本集,然通观这些算法来看,个人感觉对于数据(无论线性还是非线性)的分类上来说,里面比较好的当数BP.SVM.adaboost元算法这三种了,由于前面在介绍相应算法原理以及实验的时候所用的样本以及分类情况都是二分类的,对于多分类的情况未曾涉及过,而实际情况往往

利用Adaboost提高分类性能

Adaboost为一种集成算法,是对其他算法进行组合的一种方式. 本文将通过单层决策树分类器建立一个Adaboost优化算法,即利用多个弱分类器构建一个强分类器. 弱分类器:分类器性能比随机猜测要略好,但是也不会好太多. 强分类器:分类器性能比随机猜测好很多. 下面结合代码说明Adaboost算法原理和思路: 单层决策树是一种简单的决策树,仅基于单个特征来做决策. 首先加载简单的训练数据. def loadSimpleData(): dataMat = np.mat( [ [1.0,2.1],

Spark ML下实现的多分类adaboost+naivebayes算法在文本分类上的应用

1. Naive Bayes算法 朴素贝叶斯算法算是生成模型中一个最经典的分类算法之一了,常用的有Bernoulli和Multinomial两种.在文本分类上经常会用到这两种方法.在词袋模型中,对于一篇文档$d$中出现的词$w_0,w_1,...,w_n$, 这篇文章被分类为$c$的概率为$$p(c|w_0,w_1,...,w_n) = \frac{p(c,w_0,w_1,...,w_n)}{p(w_0,w_1,...,w_n)} = \frac{p(w_0,w_1,...,w_n|c)*p(c

Adaboost算法原理分析和实例+代码(简明易懂)

Adaboost算法原理分析和实例+代码(简明易懂) [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333     本人最初了解AdaBoost算法着实是花了几天时间,才明白他的基本原理.也许是自己能力有限吧,很多资料也是看得懵懵懂懂.网上找了一下关于Adaboost算法原理分析,大都是你复制我,我摘抄你,反正我也搞不清谁是原创.有些资料给出的Adaboost实例,要么是没有代码,要么省略很多步骤,让初学者

OpenCV中的Haar+Adaboost(五):AdaBoost之DAB与GAB

之前的文章主要讲解了OpenCV中与检测相关的内容,包括Haar特征.积分图和检测分类器结构:之后的文章将逐步开始介绍训练相关的内容.而本节主要介绍AdaBoost的理论,以及AdaBoost中的DAB与GAB算法,为后续讲解奠定基础. (一) AdaBoost背景介绍 在了解AdaBoost之前,先介绍弱学习和强学习的概念: 1. 弱学习:识别错误率小于1/2,即准确率仅比随机猜测略高的学习算法 2. 强学习:识别准确率很高并能在多项式时间内完成的学习算法 显然,无论对于任何分类问题,弱学习都

用cart(分类回归树)作为弱分类器实现adaboost

在之前的决策树到集成学习里我们说了决策树和集成学习的基本概念(用了adaboost昨晚集成学习的例子),其后我们分别学习了决策树分类原理和adaboost原理和实现, 上两篇我们学习了cart(决策分类树),决策分类树也是决策树的一种,也是很强大的分类器,但是cart的深度太深,我们可以指定cart的深度使得cart变成强一点的弱分类器. 在决策树到集成学习我们提到,单棵复杂的决策树可以达到100%,而简单的集成学习只能有85%的正确率,下面我们尝试用强一点的弱分类器来看下集成学习的效果有没有提