Bagging:随机森林及Python实现

随机森林是bagging的代表

1、bagging:  

    bootstrap sampling:自助采样法。给定包含m个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时,该样本仍有可能被选中,这样,经过m次随机采样操作,我们得到含m个样本的采样集,初始训练集中有的样本在采样集里多次出现,有的则从未出现,初始训练集约有63.2%的样本出现在采样集中。

    bagging是bootstrap sampling的缩写。基于自主采样法,可以采样出T个含m个样本的采样集,然后基于每个采样集,训练处一个基学习器,再将这些基学习器进行结合,这就是bagging的基本流程。


2、什么是随机森林RF(Random Forests)

    bagging是bootstrap aggregating的缩写,采用的是随机有放回的选择训练数据然后构造分类器。   

    随机森林是bagging的一个扩展,在以决策树为基学习器构建bagging集成的基础上,进一步在决策树的训练中,引入随机属性选择。其基本思想就是构造很多棵决策树,形成一个森林,每一棵树都会给出自己的分类选择,并由此进行“投票”,森林整体的输出结果将会是票数最多的分类选项;

    在整个随机森林构建中,有两个随机过程,使随机森林很大程度上,因个体学习器之间差异度的增加,而避免过拟合现象:

  • 数据样本选择的随机:随机的从整体的训练数据中选取一部分,作为一棵决策树的构建,而且是有放回的选取;

  • 特征(x)的随机:每棵决策树的构建所需的特征是从整体的特征集随机的选取的。

  

3、随机森林工作过程:

随机森林在bagging的基础上更进一步:

  • 样本的随机:从样本集N中用Bootstrap,有放回的随机选取n个样本

  • 特征的随机:从所有属性K中随机选取k个属性,选择最佳分割属性作为节点建立CART决策树(泛化的理解,这里面也可以是其他类型的分类器,比如SVM、Logistics)

  • 重复以上两步m次,即建立了m棵CART决策树,不需要剪枝。

  • 这m个CART形成随机森林,通过投票表决结果,决定数据属于哪一类(投票机制有一票否决制、少数服从多数、加权多数)


4、随机森林的优点与缺点

优点:

  • 可积极分类、回归两类问题,并在这两个方面都有相当好的估计表现;

  • 它能够处理很高维度(feature很多)的数据,并且不用做特征选择,对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化。

  • 在对缺失数据进行估计时,随机森林是一个十分有效的方法。就算存在大量的数据缺失,随机森林也能较好地保持精确性;

  • 当存在分类不平衡的情况时,随机森林能够提供平衡数据集误差的有效方法;

  • 模型的上述性能可以被扩展运用到未标记的数据集中,用于引导无监督聚类、数据透视和异常检测;

  • 在数据集上表现良好,两个随机性的引入,使得随机森林不容易陷入过拟合。

缺点:

  • 随机森林在解决回归问题时并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续型的输出。当进行回归时,随机森林不能够作出超越训练集数据范围的预测,这可能导致在对某些还有特定噪声的数据进行建模时出现过度拟合。

  • 对于许多统计建模者来说,随机森林给人的感觉像是一个黑盒子——你几乎无法控制模型内部的运行,只能在不同的参数和随机种子之间进行尝试。


4、随机森林的上机实现程序

 本文介绍三种实现方法:第一种和第二种通过sklearn的DecisionTreeClassifier实现,第三种为sklearn的RandomForestClassifier实现,很明显,第三种方法最简单。

数据准备1:导入数据

Bagging:随机森林及Python实现

Bagging:随机森林及Python实现


数据准备2:设置训练集及测试集

Bagging:随机森林及Python实现


方法1:两颗树看具体的实现方式

Bagging:随机森林及Python实现


方法2:10课树,循环实现方式

Bagging:随机森林及Python实现

方法3:通过随机森林直接建立5课树的实现方式,最简单。

Bagging:随机森林及Python实现

参考文章地址:

http://developer.51cto.com/art/201509/491308.htm

http://www.csdn.net/article/2015-03-02/2824069