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:导入数据
数据准备2:设置训练集及测试集
方法1:两颗树看具体的实现方式
方法2:10课树,循环实现方式
方法3:通过随机森林直接建立5课树的实现方式,最简单。
参考文章地址:
http://developer.51cto.com/art/201509/491308.htm
http://www.****.net/article/2015-03-02/2824069