集成学习——Bootstrap Bagging AdaBoost算法

来源:互联网 发布:mysql怎么运行sql文件 编辑:程序博客网 时间:2024/06/05 18:58

集成学习是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合从而获得比单个学习器更好的学习效果的一种机器学习方法。 
简单地说,就是通过抽样等方式从原始数据集构造m个训练集,再选择一个弱分类器(比如决策树)对这些训练集进行训练得到m个分类器,在待分类数据进行分类时,同时使用这m个分类器去判断,使用多数表决或者权重联合的方式综合这m个分类器给出的分类结果,得到最终结果。 
就好比是:原始数据集是一堆书,本来这堆书是给一个人看的(一个弱分类器),他看完后学的知识,再根据他学的的知识执行任务(分类/回归)。但是现在,我们把书分开给m个人看,得到m个有知识的人(每本书可以被重复看),他们对同一件事发表自己的看法,最后的决策者通过多数表决(占比例多的结果)来决策,或者通过考虑权重的方式(比如在学习过程中发现某个人是大牛,他的意见我们就会多重视)来决策。 
Bootstrap Bagging AdaBoost这三种算法提供了两个功能: 
样本选择:怎么把大样本分成m个小样本交给m个弱分类器去训练 
分类器组合:怎样综合分类器的建议 
1. Bootstraping: 名字来自成语“pull up by your own bootstraps”,意思是依靠你自己的资源,称为自助法,它是一种有放回的抽样方法,它是非参数统计中一种重要的估计统计量方差进而进行区间估计的统计方法。其核心思想和基本步骤如下: 
- 采用重抽样技术从原始样本中抽取一定数量(自己给定)的样本,此过程允许重复抽样。 
- 根据抽出的样本计算给定的统计量T。 
- 重复上述N次(一般大于1000),得到N个统计量T。 
- 计算上述N个统计量T的样本方差,得到统计量的方差。 
应该说Bootstrap是现代统计学较为流行的一种统计方法,在小样本时效果很好。通过方差的估计可以构造置信区间等,其运用范围得到进一步延伸。 
Jackknife: 和上面要介绍的Bootstrap功能类似,只是有一点细节不一样,即每次从样本中抽样时候只是去除几个样本(而不是抽样),就像小刀一样割去一部分。 
2. Bagging方法是一个统计重采样的技术,它的基础是Bootstrap。基本思想是:利用Bootstrap方法重采样来生成多个版本的预测分类器(样本选择),然后把这些分类器进行组合。 
最终的决策采用投票方式,对回归问题采用简单平均方法对新示例进行判别(分类器组合)。 
3. AdaBoost,是英文”Adaptive Boosting”(自适应增强)的缩写,是一种机器学习方法,由Yoav Freund和Robert Schapire提出。AdaBoost方法的自适应在于:前一个分类器分错的样本会被用来训练下一个分类器。AdaBoost方法对于噪声数据和异常数据很敏感。但在一些问题中,AdaBoost方法相对于大多数其它学习算法而言,不会很容易出现过拟合现象。AdaBoost方法中使用的分类器可能很弱(比如出现很大错误率),但只要它的分类效果比随机好一点(比如两类问题分类错误率略小于0.5),就能够改善最终得到的模型。而错误率高于随机分类器的弱分类器也是有用的,因为在最终得到的多个分类器的线性组合中,可以给它们赋予负系数,同样也能提升分类效果。


维基百科

AdaBoost方法是一种迭代算法,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率。每一个训练样本都被赋予一个权重,表明它被某个分类器选入训练集的概率。如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它被选中的概率就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。通过这样的方式,AdaBoost方法能“聚焦于”那些较难分(更富信息)的样本上。在具体实现上,最初令每个样本的权重都相等,对于第k次迭代操作,我们就根据这些权重来选取样本点,进而训练分类器Ck。然后就根据这个分类器,来提高被它分错的的样本的权重,并降低被正确分类的样本权重。然后,权重更新过的样本集被用于训练下一个分类器Ck。整个训练过程如此迭代地进行下去。


以上转自维基百科关于adaboost的介绍。 
简单总结一下AdaBoost算法的思路: 
选择一个样本->训练一个分类器->根据训练结果再进行抽样->训练分类器->根据训练结果再进行抽样->训练分类器->… 
- 样本选择:可以看做是有重复的抽样,但是抽样样本有,即非等概率抽样。抽样样本的权重是在每次训练后更新的。更新权值与样本被分错的次数成正比,因为样本被分错说明当前分类器不能正确分类该样本,从而希望这个被分错的样本更多的参与其他分类器的训练,好让它能被正确分类。 
- 分类器组合:采用弱分类器的线性组合,组合权重取决于弱分类器的准确率,对于弱分类器C1(x),...,Cm(x),f(x)=aiCi


下面来自维基百科:

AdaBoost算法 
xiyi表示原始样本集D的样本点和它们的类标。用Wk(i)表示第k次迭代时全体样本的权重分布。这样就有如下所示的AdaBoost算法:

begin initial D={x1,y1,…,xn,yn},kmax(最大循环次数),Wk(i)=1/n,i=1,…,n 
k ← 0 
do k ← k+1 
训练使用按照Wk(i)采样的D的弱学习器Ck 
Ek ←对使用Wk(i)的D测量的Ck的训练误差

αk12ln1EkEkαk12ln1EkEk

Wk+1(i)Wk(i)Zk×{eαk,eαk,if hk(xi)=yiif hk(xi)yi

until k=kmax 
return Ck和αk,k=1,…,kmax(带权值分类器的总体) 
end 
注意第5行中,当前权重分布必须考虑到分类器Ck的误差率。在第7行中,Zk只是一个归一化系数,使得Wk(i)能够代表一个真正的分布,而hk(xi)是分量分类器Ck给出的对任一样本点xi的标记(+1或-1),hk(xi) = yi时,样本被正确分类。第8行中的迭代停止条件可以被换为判断当前误差率是否小于一个阈值。

最后的总体分类的判决可以使用各个分量分类器加权平均来得到:

g(x)=[k=1kmaxαkhk(x)]g(x)=[kmaxk=1αkhk(x)]

这样,最后对分类结果的判定规则是:

H(x)=sign(g(x))H(x)=sign(g(x))


简单解释一下: 
在进行第k个分类器训练时,设xri,xwj费别为第i,j个被正确,错误分类的样本,此时出错率ek=jxwj/(ixri+jxwj) 
那下一次抽样样本权重D(i+1)=D(i)ln1eiei 
第k个分类器的组合权重为12ln1ekek 
具体例子可参考: 

大数据经典算法AdaBoost 讲解


Ref: http://blog.csdn.net/shouwangzhelv/article/details/51995365

0 0