提升算法之Adaboost算法

冒泡~七月的尾巴 小李又上线啦!


今天叙述一个实用的算法-adaboost算法,在进入正题之前先叙述一下提升算法的一些基本思想和一些相关的概念。

提升算法

提升算法也称为boosting算法,它是将弱学习算法提升为强学习算法的一类算法,可用来提升弱分类器的准确度。
那么这里需要补充一下弱学习和强学习的概念。
强学习:在概率近似正确(Probably Approxi mately Correct/PAC)学习的框架中,一个概念或者类,如果存在一个多项式的学习算法能够学习它,且正确率很高,称为强可学习。
弱学习:一个概念或者类,如果存在一个多项式的学习算法能够学习它,且它的学习正确率仅仅比随机猜测略好,则为弱可学习。
推导:在PAC学习框架下,一个概念是强可学习的充分必要条件是这个概念是弱可学习。
故提升方法的关键在于如何将弱学习提升转化为强学习?
那么通常情况下我们会想到弱学习互补从而来提升准确度,这边就会有两个问题:①怎么去获得不同的弱分类器?②怎么去组合这些弱分类器?
那么通常对于问题一,我们可以使用不同的弱学习算法或者不同的训练集来解决。对于问题二,则可采用多专家组合【并行结构,所有的弱分类器都给出各自的预测结果,通过组合器把预测结果转换为最终结果】,比如投票模型等,或者采用多级组合【串行结构,其中下一个分类器只在前一个分类器预测不够准的实例上进行训练或检测】,比如级联算法。

接下来先看一下boosting的一个运算过程。如下图:

从图中可以看出,Boosting算法的工作机制是首先用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。
【这实际上是一个不断改变权重训练的迭代过程】

进入正题adaboost

Adaboost

adaboost(adaptive Boosting)算法实际上就是boosting算法的一个升级版。该算法是Freund和Schapire于1995年对Boosting算法的改进得到的,其算法原理是通过调整样本权重和弱分类器权值,从训练出的弱分类器中筛选出权值系数最小的弱分类器组合成一个最终强分类器。与Boosting算法不同的是,它是使用整个训练集来训练弱学习机,其中训练样本在每次迭代的过程中都会重新被赋予一个权重,在上一个弱学习机错误的基础上进行学习来构建一个更加强大的分类器。通过下图来了解AdaBoost算法的工作过程。

训练样本由两个不同的种类(蓝球和红球)所组成。在第一幅图中所有的样本都被赋予了相同的权重,通过训练集的训练,我们可以获取到一个单层的决策树(代表图中的虚线),它通过最小化代价函数(样本不纯度)来划分两类不同的样本,其中有两个篮球和一个红球被错误的划分。在第二次训练的过程中,两被错误划分个篮球和一个被错误划分的红色被赋予更大的权重(球变得更大),同时还可以降低正确划分样本的权重,在本次训练的过程中更加专注于权重大的样本,也就是划分错误的样本。通过重复这个过程,最后直至样本划分正确。然后,得到一个弱学习机的组合,通过多数投票的方式来决定最后的预测结果。
具体步骤
1、以相同的初始值来初始化样本的权重ω,并且样本权重之和为1。
2、在m轮boosting操作中,对第j轮做如下操作
3、训练一个加权的弱学习机:C(j)=train(X,y,ω)
4、预测样本类标pred_y=predict(C(j),X)
5、计算权重错误率ε=ω*(pred_y==y)
6、计算相关系数

7、更新权重
8、归一化权重,并保证权重之和为1
9、完成最终预测

具体例子:详见AdaBoost算法详细介绍
这边插播一个在视频上看到的例子:

其思想步骤:

代码可参考: 机器学习实战之AdaBoost算法
——————————————
写累了....感觉还有好多没有写全....
下次补上吧 周末愉快
七月输出完成 八月再会!

你可能感兴趣的:(提升算法之Adaboost算法)