菜鸟初次接触Adaboost,虽然算法流程比较清晰简单,但对于其中的理论,存在着不少疑惑之处,如下所示:

1)如何训练得到的弱分类器,我们需要训练出多少个弱分类器进行后续的计算?对若分类器有什么要求吗?

2)加法模型有什么好处?

3)最后得到的强分类器是如何体现出分类效果的?迭代次数是不是需要最终err为0才迭代结束?

4)该算法存在过拟合现象吗?

5)我们可不可以对迭代的过程进行实例化?可不可以用几何直观的方式去体现出来?

6)Adaboost有哪些具体的实际应用?

本文主要针对这6个问题进行叙述,若存在错误之处,恳请大神们不吝指出。

问题1

对于Adaboost的弱分类函数,众多博客基本是上直接给出训练后的线性函数(感觉那些博客里简单的事例都能目测出几个弱分类函数),可能是为了方便理解读者Adaboost的过程,这些细枝末节没有进行详细赘述,但是对于菜鸟而言,还是需要知道这个弱分类器是怎么得来的,因为这是后面进行Adaboost的前提,因此本文想尝试剖析其过程。本文打算用一些简单的数据进行计算(借鉴的这篇博客的数据https://blog.csdn.net/guyuealian/article/details/70995333),如下所示:

序号 1 2 3 4 5 6 7 8 9 10
样本点X (1,5) (2,2) (3,1) (4,6) (6,8) (6,5) (7,9) (8,7) (9,8) (10,2)
类别Y 1 1 -1 -1 1 -1 1 1 -1 -1

作图如下:

从图中可以看出,我们几乎很难找到一条直线将蓝色(1)与橙色(-1)的点进行完全分开,但是我们可以找到一些线性的弱分类器,进行弱分类,很显然,我们可以找到的弱分类器肯定不止一个,理论上是可以找到无穷多个,但是我们在实际应用中总不能找无穷多个吧,肯定是希望用最少的个数达到想要的效果,对于Adaboost而言,很多的博客中都是找了3个弱分类器,不知道这样选择的个数有什么依据(不知道是不是自己调研得不够全面)。大胆猜测,可能是因为先尝试个数为3的情况,发现效果理想就没继续尝试为4,5,6...的情况。对于弱分类器的基本要求,(1)需要每一个弱分类器满足准确率超过50%,并且弱分类器的准确率直接影响后面的Adaboost的迭代次数;(2)弱分类器之间的差异性不能太小,如果差异太小,进行组合的实际价值不大,对准确率的提高不会明显。

问题2

对于这个问题,进行了简单的初步理解,由于模型是加法模型,在计算损失函数极小值问题的时候可以进行简化,采用的是向前分步方法,即:每次计算的时候都只学习一个基函数和系数,这样可以简化目标函数的形式,利于计算。

问题3

强分类器是通过公式:

对其进行效果的评价的,得到的强分类器可以进行验证其效果如何。

对于迭代次数,首先需要预设一个很小的错误率,当错误率低于这个阈值时,迭代结束。

问题4

是存在过拟合现象的,维基百科的原话是:In some problems it can be less susceptible to the overfitting problem than other learning algorithms. 并不是说不存在过拟合问题,只是过拟合问题没其他的学习算法那么严重。

问题5

我们拟采用之前问题1中的数据,进行实例化,看看该过程是怎么回事。

算法流程主要是这样的:

  • 给权值进行初始化,D1=[1/N,1/N,1/N,1/N,1/N,1/N,1/N,1/N,1/N,1/N]=[1/10,1/10,1/10,1/10,1/10,1/10,1/10,1/10,1/10,1/10],即:
序号 1 2 3 4 5 6 7 8 9 10
样本点X (1,5) (2,2) (3,1) (4,6) (6,8) (6,8) (7,9) (8,7) (9,8) 10,2)
类别Y 1 1 -1 -1 1 -1 1 1 -1 -1
D1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1
  • 给出3个弱分类器为H1(x=3.5),H2(x=7.5),H3(y=4)

我们可以明显的看出,三个弱分类器的err都为0.1+0.1+0.1+0.1=0.4,所以我们可以任意挑一个弱分类器,那就先用H1:

在H1的情况下,误差率e1=0.4,我们可以使用公式计算得到:

此时所得的强分类器为G1(x)=sign(0.2027H1),作图如下:

从图中可以看出,迭代一次后的分类效果并没有提高。

  • 更新权值D:
序号 1 2 3 4 5 6 7 8 9 10
样本点X (1,5) (2,2) (3,1) (4,6) (6,8) (6,8) (7,9) (8,7) (9,8) 10,2)
类别Y 1 1 -1 -1 1 -1 1 1 -1 -1
D2 1/12 1/12 1/8 1/12 1/8 1/12 1/8 1/8 1/12 1/12

再重新计算每个弱分类器的误差率

当弱分类器为H1时,err=1/8+1/8+1/8+1/8=1/2;

当弱分类器为H2时,err=1/8+1/12+1/12+1/8=5/12;

当弱分类器为H3时,err=1/12+1/12+1/12+1/12=1/3;

可见,误差率最小的是H3,因此下一次迭代选用H3:

在H3的情况下,误差率e2=1/3,我们可以使用公式计算得到:

此时所得的强分类器为G2(x)=sign(0.2027H1+0.3466H3),作图如下:

我们来仔细分析一下,两条直线分成四个区域,我分别命名为1,2,3,4象限,并分别计算出G2(x)的值,结果如下图所示:

我们从图中看出,虽然又迭代了一次,但似乎准确率并没有提高,1象限误判了一个点,2象限没有点,3象限误判了两个点,4象限误判了一个点,总共还是误判了4个点,准确率似乎没有提高。

  • 更新权值D:
序号 1 2 3 4 5 6 7 8 9 10
样本点X (1,5) (2,2) (3,1) (4,6) (6,8) (6,8) (7,9) (8,7) (9,8) 10,2)
类别Y 1 1 -1 -1 1 -1 1 1 -1 -1
D3 1/16 1/16 3/16 1/16 3/16 1/16 3/16 3/16 1/16 1/16

再重新计算每个弱分类器的误差率

当弱分类器为H1时,err=3/16+3/16+3/16+3/16=3/4;

当弱分类器为H2时,err=3/16+1/16+1/16+3/16=1/2;

当弱分类器为H3时,err=1/16+1/16+1/16+1/16=1/4;

可见,误差率最小的是H3,因此下一次迭代选用H3:

在H3的情况下,误差率e3=1/4,我们可以使用公式计算得到:

此时所得的强分类器为G3(x)=sign(0.2027H1+0.3466H3+0.5493H3),作图如下:

我们可以看到并没有达到预期的效果,我们不妨大胆假设一下,就算再继续迭代下去n次,效果依然如此,为什么会出现这样的情况?症结何在呢?我想,是因我们的弱分类器没有选择好,导致出现这样的情况。我们选择的弱分类器H2一直都没选择用于迭代,可见弱分类器的选择是多么有技巧的事情啊!

跟博客(https://blog.csdn.net/guyuealian/article/details/70995333)相比,该作者选择的弱分类器十分的巧妙,巧妙之处在于初始的误差率就比较低,而且,在第二次迭代的时候可以刚好让H2作为第二次迭代,这样不仅可以快速的达到预期的结果,而且不会出现本文中这样的不收敛的情况。

问题6

关于adaboost的应用十分广泛,有文本识别、图像识别等领域,特别是图像识别领域,从国外的文献看,很多年以前就已经很成熟了。

Adaboost算法的初步理解相关推荐

  1. Hamiltonian Monte Carlo抽样算法的初步理解

    Hamiltonian Monte Carlo抽样算法的初步理解 接受拒绝采样算法 MCMC回顾 Hamiltonian dynamics 拉格朗日方程 从牛顿方程出发推导拉格朗日方程 勒让德变换 哈 ...

  2. 我关于KMP算法的初步理解

    唔,时间过得好快,下学期都过了一半了,因为寒假玩去了,数据结构也没学完.后来看到KMP算法的时候,第一次一晚上就想一个问题,当然,总算是有些眉目了,下面是我对KMP算法的一些理解,当然还没有看完,但是 ...

  3. PageRank算法(网页排名算法)初步理解

    背景:pageRank 是Google CEO 拉里佩奇提出的一种算法,来计算互联网里的网站的重要性,以对搜索进行排名. pagerank 基本思想: l 数量假设:一个页面越被其他页面链接,说明他越 ...

  4. 对于树分治算法的初步理解

    树分治是基于树上问题的一种处理问题的方式 它有非常巧妙地结构,,它利用的是树的 边等效 和点的无序性 对树进行离散,抽象维护等效路径 和 子树关系的神奇算法 分治树有非常好的性质,把一些树写成分治树是 ...

  5. 初步理解pagerank算法

    初步理解pagerank算法 第一次写不是课程要求的博客,可能有不严谨的地方,如果有写错的希望能在评论区指出. 算法思想 pagerank算法用于网页排序,根据给网页的重要程度给各个网页打分,根据分数 ...

  6. Adaboost算法的理解

     基本原理 Adaboost算法基本原理就是将多个弱分类器(弱分类器一般选用单层决策树)进行合理的结合,使其成为一个强分类器. Adaboost采用迭代的思想,每次迭代只训练一个弱分类器,训练好的 ...

  7. 理解AdaBoost算法

    其它机器学习.深度学习算法的全面系统讲解可以阅读<机器学习-原理.算法与应用>,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造. 书的购买链接 书的勘误,优化,源代码资源 与随机森 ...

  8. 深入理解机器学习——集成学习(二):提升法Boosting与Adaboost算法

    分类目录:<深入理解机器学习>总目录 Boosting是一族可将弱学习器提升为强学习器的算法.这族算法的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进 ...

  9. AdaBoost算法理解

    AdaBoost的前身和今世 强可学习和弱可学习 在概率近似正确(PAC)学习框架中, 一个类如果存在: 一个多项式复杂度的学习算法,正确率略大于随机猜测(例如二分类问题中大于1/2),称弱可学习的 ...

最新文章

  1. Windows7 Scrapy框架建立
  2. 非因果滤波器 matlab,对于无阶跃响应不会过冲的无因果低通滤波器,最清晰的频率响应是什么?...
  3. 图解高内聚与低耦合,傻瓜都能看懂!
  4. 如何写出正确的二分查找?——利用循环不变式理解二分查找及其变体的正确性以及构造方式...
  5. SQL Server 2008带字段注释导入Power Designer 9.5
  6. rhino4.0安装教程
  7. 近5年133个Java面试题 你会几个?
  8. ARP,这个隐匿在计网背后的男人
  9. mysql处理sql时间格式_mysql 处理日期格式
  10. LeetCode之罗马数字转整数
  11. icem合并面网格_详解Flunet Meshing:高级网格划分工具中的“扫地僧”
  12. PMP备考资料和备考经验分享(基于PMP第六版)
  13. 尔雅通识课题库【1】
  14. 奔图m7100dw_奔图M7100dW驱动
  15. ubuntu 安装opensips osip exosip
  16. Zynq7020 PS 软件复位
  17. minimax算法(井子棋)
  18. PdfSharp -- 根据PDF模板导出PDF
  19. 禾瑞亚科触摸屏驱动程序移植过程与遇到的问题--egalax_i2c
  20. grep命令 |grep

热门文章

  1. 二叉树遍历的非递归实现
  2. System.arraycopy()详解
  3. DataStream API
  4. 2019年8月,微信朋友圈发长文字防止被折叠成一行的方法
  5. ebs各模块名称及英文缩写
  6. 什么是SSL安全证书
  7. GORM v2 关联预加载Preload和Joins的区别
  8. 全世界的程序员们,为什么都不在意“穿衣”这档事?
  9. CAD制图初学入门技巧:如何批量生成CAD填充边界?
  10. [PowerBI]DAX虚拟连接函数:TREATAS()用法介绍