1. 因为上次我跟大家分享了决策树,我正好接着决策树来分享两个和决策树相关的**集成学习(ensemble learning)算法**,它们分别是**Bagging**(直译就是“装袋”)和**RandomForest**(随机森林)。<br /> 那么什么是集成学习,简单的说就是构建并结合多个学习器来完成学习任务,比如我们可以结合多个决策树来完成任务学习和预测。<br /> 关于集成学习需要明确的两点是:<br />** 1)个体学习器:**集成学习可以看做多个个体学习器通过某种方法相结合,当所有的个体学习器都是一种机器学习算法时,比如都是决策树,那么个体学习器被称为“基学习器”(当然学习器可能是不同类型的,比如决策树和SVM,这个不展开说)。<br />** 2)弱学习器**:将多个模型集成一般会获得比单一模型更强的泛化性能,这对“弱学习器”尤其明显,弱学习器就是泛化性能略优于随机猜测的学习器(准确率略高于50%)。为什么要用弱学习器呢,直观上分析,所谓三个臭皮匠顶一个诸葛亮,就是说这些学习器不能太差,而且也不能太相似,因此也能得出,要想集成学习效果好,我们希望分类器最好能够兼顾准确性和多样性,然而所谓鱼和熊掌不可兼得,这两个特性也不可兼得,高准确性会导致低多样性。因此如何产生“和而不同”的个体学习器,是集成学习研究的核心。从经验上讲,大家还是喜欢拿比较强的学习器来集成,我对此理解的是有差异性的个体学习器比准确性的个体学习器更难获得。<br /> 无论如何,我们现在得到了一堆个体学习器,那么该如何将它们集成呢,我们来介绍其中一种方法,就是个体学习器之间不存在强依赖关系,可同时生成的并行化方法:BaggingRandomForest。后面我们会介绍强依赖串行生成方法boosting.

Bagging

    Bagging的思想其实非常简单了,就是“投票法则”,比如做一个选择题,有ABCD四个选项,其中答案C是正确的(其实是因为C的描述最长啦),然后有5位同学进行投票,其中3名同学投了C,另外两名投了A和D,那么我们以少数服从多数原则,选择C选项,哎正确。那我们来介绍一下Bagging的大致步骤:<br />(1)按照之前的分析,我们要想获得泛化能力强的集成模型,个体学习器要尽可能的相互独立,即有较大的差异性,而且希望个体学习器不能太差,那么我们想到的方式就是,如果有![](https://cdn.nlark.com/yuque/__latex/6f8f57715090da2632453988d9a1501b.svg#card=math&code=m&id=GsUko)个个体学习器,我们从原始样本集![](https://cdn.nlark.com/yuque/__latex/f623e75af30e62bbd73d6df5b50bb7b5.svg#card=math&code=D&id=V0x9x)中采样![](https://cdn.nlark.com/yuque/__latex/6f8f57715090da2632453988d9a1501b.svg#card=math&code=m&id=qpbY3)个样本集来去训练这些学习器,但是是**有放回的采样**,为什么是有放回的,不是要求差异大嘛,每个样本集互不同不就行了,别忘了我们的另一个条件就是这些学习器不能太差,如果采样的每个子集都不相同,则可能导致每个学习器只学习到了一小部分数据,甚至不足以有效学习,导致效果太差。因此第一步就是有放回的采样![](https://cdn.nlark.com/yuque/__latex/6f8f57715090da2632453988d9a1501b.svg#card=math&code=m&id=CTbdf)个样本集,训练![](https://cdn.nlark.com/yuque/__latex/6f8f57715090da2632453988d9a1501b.svg#card=math&code=m&id=vaLYB)个个体学习器。<br />(2)然后这些学习器对每个样本属于哪一类进行投票,选择投票最多的那个类别作为预测类别。

RandomForest

    有了Bagging的介绍之后,我们来介绍随机森林,它其实是Bagging思想的一个应用,就是应用在决策树上。随机森林是一个非常强大的集成模型,它在很多任务中都展现了强大的性能。然而随机森林并不是一个很复杂的模型,它就是一堆决策树在一起的投票的结果(试验过决策树的都知道,决策树在实际任务上表现性能其实一般),这再次印证了三个臭皮匠顶一个诸葛亮的俗语。<br />        那随机森林是如何做集成的呢,它就是直接套用了Bagging的模板,只不过把个体分类器换成了决策树,那随机体现在哪呢?之前在说决策树的时候,我们提到最重要的一点是在构建决策树时,即采用属性划分时,要根据公式(信息增益或者基尼系数)计算出最优的划分属性,但随机森林中的决策树不是这样的,它是首先根据公式**选择**![](https://cdn.nlark.com/yuque/__latex/8277e0910d750195b448797616e091ad.svg#card=math&code=d&id=tpENk)**个最优属性集合**,**然后从这**![](https://cdn.nlark.com/yuque/__latex/8277e0910d750195b448797616e091ad.svg#card=math&code=d&id=KJ75m)**个属性随机选择一个属性进行划分**,随机就体现在这,这也就大大增加了决策树个体学习器之间的差异性,同时个体学习器保留不坏的准确性,所以这两点使得随机森林具有强大的泛化能力。

生活感悟

最近在申请那个互联网+比赛项目嘛,其实开始有两个人还有老师,我们定的方向是很死的,就是要设计一个服务软件,这个软件只包含一两个功能,定的报告书是8,9页;但是当我们把课题组所有同学都喊进来讨论时,思路一下子就开阔了许多,大家各种想法层出不穷,最终我们将报告书扩展到了71页,产品服务功能也非常多。大家能力都不差,而且想法各不相同,这就会使得我们生产的成果会更好,这或许和集成学习的思想如出一辙吧。