ensemble learning(集成学习)笔记

来源:互联网 发布:粤语软件哪个好 编辑:程序博客网 时间:2024/05/19 07:25

ensemble learning概念

通过构建并结合多个学习分类器来完成学习任务.

通常认为将多个分类器结合的学习,比单一分类器的学习要准确的多.要想得到好的集成分类器,一个是基分类器要有一定的准确性,至少不能随机扔硬币猜正反还离谱;其次要有多样性,也就是分类器间有差异性存在,这样才能保证泛化能力不至于太差.


ensemble learning的分类

依据基分类器的生成方式,将集成学习分为两大类:

1 基分类器间存在依赖关系,需串行的方式结合,例如Boosting

2 基分类器间不存在强依赖关系,可同时并行化结合的方式,例如random forest和Bagging.

Boosting

先从训练集中训练出一个基分类器,利用此分类器进行分类,根据分类结果对训练样本的分布进行调整,对于先前分错的训练样本在后续的分类中享有更多关注,然后对于调整后的训练样本,再训练第二个基分类器;就这样迭代重复进行,直至满足某个截止条件.此刻你一定想到了Adaboost.没错,它是Boosting的典型代表.

思想:本着先易后难的原则,做事情也是如果,刚毕业我们会写一写比较简答的小程序,把关注点放在比较难做的事情上,后面难点关注的多了,慢慢的就不出错了~~原来数学和生活联系的这么紧密.

算法优点:

应用于分类问题。 Adaboost分类器可以排除一些不必要的训练数据特征,并将关键放在关键的训练数据上面。

过程分析

Adaboost,一开始就提到是一种迭代算法,也是一个简单的弱分类算法提升过程,怎样个提升法呢?由于单单依靠弱分类算法还难以保证分类结果的准确性,因而Adaboost的提升过程就是通过不断的训练,提高对数据的分类能力。详细流程如下:

1. 先通过对N个训练样本(预先给定)的学习(Offline Learning)得到第一个弱分类器;(总得先有第一者产生吧~)

2. 将分错的样本(怎么知道样本被分错了呢?)和其它的新数据一起(错了就要和待审核的一起,oh~),构成一个新的N个的训练样本,重复第一步,即通过对这个样本的学习得到第二个弱分类器(体现迭代);

3. 将1和2都分错了的样本(其实就是2里分错的样本,因为1里错的样本已经全部给到2了),加上其它的新样本构成另一个新的N个的训练样本,通过对这个样本的学习得到第三个弱分类器;

4. 最终,经过提升的强分类器,即某个数据被分为哪一类要通过多数表决....(传说中的投票==)

 

存在的问题及改进方法

对于boosting算法,存在两个问题:

1. 如何调整训练集,使得在训练集上训练的弱分类器得以进行;换句话说,就是,当每次上层N个训练样本训练结束之后,如何调整训练集,将分错的样本与新数据结合起来,构成新的N个训练样本,供下一层学习。

2. 如何将训练得到的各个弱分类器联合起来形成强分类器;换句话说,要纪录每次得到的弱分类器,最后将每个样本在每个分类器中得到的数据,进行比较,投票...多数表决通过!

针对以上两个问题,Adaboost算法进行了调整:(引入了权重的概念!)

1. 使用加权后选取的训练数据代替随机选取的训练样本,这样,将训练的焦点集中在比较难分的训练数据样本上;

2. 将弱分类器联合起来,使用加权的投票机制代替平均投票机制。让分类效果好的弱分类器具有较大的权重,而分类效果差的分类器具有较小的权重。道理不言而喻!

 

关于权重的理解:

Adaboost算法中不同的训练集是通过调整每个样本对应的权重来实现的。开始时,每个样本对应的权重是相同的,即其中n为样本个数,在此样本分布下训练出一弱分类器。对于分类错误的样本,加大其对应的权重;而对于分类正确的样本,降低其权重,这样,分错的样本就被突显出来(权重大的),从而得到一个新的样本分布。

在新的样本分布下,再次对样本进行训练,又得到一个弱分类器,又加大分类错误的样本的权重。

依次类推,经过T次循环,得到T个弱分类器,把这T个弱分类器按一定的权重叠加(boost)起来,得到最终想要的强分类器!

 

Adaboost算法的具体步骤

1. 给定训练样本集S,其中X和Y分别对应于正例样本和负例样本(即两个分类结果);T为训练的最大循环次数;

2. 初始化样本权重为1/n,即为训练样本的初始概率分布(即离散型均匀分布);

3. 第一次迭代:

(1)训练样本的概率分布相当下,训练弱分类器;

(2)计算弱分类器的错误率(怎么计算呢?错误率 = 分类出错的样本个数 / 总的样本个数);

(3)选取合适阀值,使得误差最小;

(4)更新样本权重(新的样本权重替代旧的);

经过T次循环后,得到T个弱分类器,按更新的权重叠加,最终得到强分类器。

步骤总结:上述的算法步骤迭代了T次的主循环,每一次循环根据当前的权重分布对样本x定一个分布P,然后对这个分布下的所有样本使用弱学习算法得到一个弱分类器。

每一次迭代,都要对权重进行更新!更新的规则就是:减小弱分类器分类效果较好的数据的概率,增大弱分类器分类效果较差的数据的概率,最终的分类器是一个所有弱分类器的加权平均!


Bagging and Random forest

Bagging 是并行集成学习的代表.基于有放回的采样,采样出T个含m个样本的采样集,有放回的采样使得样本在采样集中有的多次出现,有的从未出现,这样既保证了训练数据的不同,使得基分类器有差异,但又不能差太多,否则若每个子集完全不同,则每个分类器只用到了一小部分训练数据,不足以进行有效学习.

Bagging的优势:

高效,而且可以不经修改地适用于多分类任务,回归任务.;此外由于它只用了63.2%的样本,剩下的部分可用来测试,便于交叉验证,提升泛化性能;


Random Forest

随机森林在构建Bagging集成的基础上,在决策树训练时引入了随机属性选择.即,传统决策树在划分属性时在当前节点的属性中选择一个最优的属性,而在随机森林中,每个决策树的每个节点,会先随机选择一个包含k个属性的子集,然后再从这k个属性中选择一个最优属性用于划分;

优势:训练效率高于bagging,因为Bagging用的是"确定性"的决策树,要对所有节点的属性进行考察,而随机森林用的是随机性决策树,只需要考察一个属性子集~~,一个是整体,一个是部分,当然效率高些~~

随机森林改进点:

  • 森林中任意两棵树的相关性:相关性越大,错误率越大;
  • 森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低。

集成策略

为什么要集成或者结合?

1.提升泛华能力

2.降低陷入局部最小值的风险

3.学习的更好

策略一

平均法:将所有基分类器的输出加权求平均;需要注意的是加权平均的权重一般是从训练数据中获得.

策略二

投票法:所有的基分类器从类别集合中预测出一个标记,若某标记得票超过阈值,则预测为该标记,这是绝对多数投票法;

若预测为得票最多的标记,这是相对多数投票法.


自己看过的比较好的资源

随机森林:http://www.cnblogs.com/maybe2030/p/4585705.html

http://www.cnblogs.com/hqqxyy/articles/3753026.html  这个也不错,标记下

0 0