Adaboost算法的初步理解
菜鸟初次接触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算法的初步理解相关推荐
- Hamiltonian Monte Carlo抽样算法的初步理解
Hamiltonian Monte Carlo抽样算法的初步理解 接受拒绝采样算法 MCMC回顾 Hamiltonian dynamics 拉格朗日方程 从牛顿方程出发推导拉格朗日方程 勒让德变换 哈 ...
- 我关于KMP算法的初步理解
唔,时间过得好快,下学期都过了一半了,因为寒假玩去了,数据结构也没学完.后来看到KMP算法的时候,第一次一晚上就想一个问题,当然,总算是有些眉目了,下面是我对KMP算法的一些理解,当然还没有看完,但是 ...
- PageRank算法(网页排名算法)初步理解
背景:pageRank 是Google CEO 拉里佩奇提出的一种算法,来计算互联网里的网站的重要性,以对搜索进行排名. pagerank 基本思想: l 数量假设:一个页面越被其他页面链接,说明他越 ...
- 对于树分治算法的初步理解
树分治是基于树上问题的一种处理问题的方式 它有非常巧妙地结构,,它利用的是树的 边等效 和点的无序性 对树进行离散,抽象维护等效路径 和 子树关系的神奇算法 分治树有非常好的性质,把一些树写成分治树是 ...
- 初步理解pagerank算法
初步理解pagerank算法 第一次写不是课程要求的博客,可能有不严谨的地方,如果有写错的希望能在评论区指出. 算法思想 pagerank算法用于网页排序,根据给网页的重要程度给各个网页打分,根据分数 ...
- Adaboost算法的理解
基本原理 Adaboost算法基本原理就是将多个弱分类器(弱分类器一般选用单层决策树)进行合理的结合,使其成为一个强分类器. Adaboost采用迭代的思想,每次迭代只训练一个弱分类器,训练好的 ...
- 理解AdaBoost算法
其它机器学习.深度学习算法的全面系统讲解可以阅读<机器学习-原理.算法与应用>,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造. 书的购买链接 书的勘误,优化,源代码资源 与随机森 ...
- 深入理解机器学习——集成学习(二):提升法Boosting与Adaboost算法
分类目录:<深入理解机器学习>总目录 Boosting是一族可将弱学习器提升为强学习器的算法.这族算法的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进 ...
- AdaBoost算法理解
AdaBoost的前身和今世 强可学习和弱可学习 在概率近似正确(PAC)学习框架中, 一个类如果存在: 一个多项式复杂度的学习算法,正确率略大于随机猜测(例如二分类问题中大于1/2),称弱可学习的 ...
最新文章
- Windows7 Scrapy框架建立
- 非因果滤波器 matlab,对于无阶跃响应不会过冲的无因果低通滤波器,最清晰的频率响应是什么?...
- 图解高内聚与低耦合,傻瓜都能看懂!
- 如何写出正确的二分查找?——利用循环不变式理解二分查找及其变体的正确性以及构造方式...
- SQL Server 2008带字段注释导入Power Designer 9.5
- rhino4.0安装教程
- 近5年133个Java面试题 你会几个?
- ARP,这个隐匿在计网背后的男人
- mysql处理sql时间格式_mysql 处理日期格式
- LeetCode之罗马数字转整数
- icem合并面网格_详解Flunet Meshing:高级网格划分工具中的“扫地僧”
- PMP备考资料和备考经验分享(基于PMP第六版)
- 尔雅通识课题库【1】
- 奔图m7100dw_奔图M7100dW驱动
- ubuntu 安装opensips osip exosip
- Zynq7020 PS 软件复位
- minimax算法(井子棋)
- PdfSharp -- 根据PDF模板导出PDF
- 禾瑞亚科触摸屏驱动程序移植过程与遇到的问题--egalax_i2c
- grep命令 |grep