VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > python教程 >
  • python基础教程之集成学习之AdaBoost算法

本站最新发布   Python从入门到精通|Python基础教程
试听地址  
https://www.xin3721.com/eschool/pythonxin3721/


1. 回顾Boosting提升算法

AdaBoost是典型的Boosting算法,属于Boosting家族的一员。在说AdaBoost之前,先说说Boosting提升算法。Boosting算法是将“弱学习算法“提升为“强学习算法”的过程,主要思想是“三个臭皮匠顶个诸葛亮”。一般来说,找到弱学习算法要相对容易一些,然后通过反复学习得到一系列弱分类器,组合这些弱分类器得到一个强分类器。Boosting算法要涉及到两个部分,加法模型和前向分步算法。

模型为加法模型就是我们最终的强分类器是若干个弱分类器加权平均而得到的(弱分类器线性相加而成)。

前向分步就是我们在训练的过程中,下一轮迭代产生的分类器是在上一轮的基础上训练得来的。我们的算法是通过一轮轮的弱学习器学习,利用前一个强学习器的结果和当前弱学习器来更新当前的强学习器的模型。也就是说

第k-1轮的强学习器为:fk1(x)=i=1k1αiGi(x)

而第k轮的强学习器为:fk(x)=i=1kαiGi(x)

上两式一比较可以得到:fk(x)=fk1(x)+αkGk(x)

可见强学习器的确是通过前向分步学习算法一步步而得到的。

2. 集成学习之AdaBoost算法

Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。这里的集合起来的策略是通过提高前一轮分类器分类错误的样本的权值,降低分类分类正确的样本权值,对于那些没有本分类正确的样本会得到后面分类器更多的关注。然后可以产生很多的弱分类器,通过多数加权投票组合这些弱分类器,加大误差率小的分类器,减少误差率大的分类器,使其在表决中起到较少的作用。

该算法其实是一个简单的弱分类算法提升过程,这个过程通过不断的训练,可以提高对数据的分类能力。整个过程如下所示:
1. 先通过对N个训练样本的学习得到第一个弱分类器;
2. 将分错的样本和其他的新数据一起构成一个新的N个的训练样本,通过对这个样本的学习得到第二个弱分类器 ;
3. 将1和2都分错了的样本加上其他的新样本构成另一个新的N个的训练样本,通过对这个样本的学习得到第三个弱分类器;
4. 最终经过提升的强分类器。即某个数据被分为哪一类要由各分类器权值决定。
由Adaboost算法的描述过程可知,该算法在实现过程中根据训练集的大小初始化样本权值,使其满足均匀分布,在后续操作中通过公式来改变和规范化算法迭代后样本的权值。样本被错误分类导致权值增大,反之权值相应减小,这表示被错分的训练样本集包括一个更高的权重。这就会使在下轮时训练样本集更注重于难以识别的样本,针对被错分样本的进一步学习来得到下一个弱分类器,直到样本被正确分类[36]。在达到规定的迭代次数或者预期的误差率时,则强分类器构建完成。

只要是boosting算法,都要解决以下这4个问题:(结合Adaboost算法原理理解怎么解决)

1)如何计算学习误差率e?

2)如何得到弱学习器权重系数αα?

3)如何更新样本权重D?

4) 使用何种结合策略?  

3. Adaboost算法原理

假设一个二分类训练样本集:

 

T={(x,y1),(x2,y2),...(xm,ym)}

 

训练集的在第k个弱学习器的输出权重为:

 

D(k)=(wk1,wk2,...wkm);w1i=1m;i=1,2...m

 

第k个弱分类器Gk(x)在训练集上的加权误差率为: