1. 前言

随机森林 Random Forests (RF) 是由Breiman [1]提出的一类基于决策树CART的集成学习(ensemble learning)。论文 [5] 在121数据集上比较了179个分类器,效果最好的是RF,准确率要优于基于高斯核SVM和多项式LR。RF自适应非线性数据,不易过拟合,所以在Kaggle竞赛大放异彩,大多数的wining solution都用到了RF。

集成学习主要分为两大流派:Bagging与Boosting,两者在训练基分类器的思路截然不同:

  • Bagging通过bootstrap sampling(有放回地取样)方式训练基分类器,每一个基分类器互不影响,但并不相互独立;
  • Boosting则是通过重赋权(re-weighting)法迭代地训练基分类器,当前的样本权值的分布依赖于上一轮基分类器的分类结果;对于无法接受带权样本的基分类算法,则采用“重采样法”(re-sampling)来处理,即分错的样本在下一轮学习出现的次数会增加。

RF属于集成学习中的Bagging流派。若Bagging算法直接采用CART做基分类器,存在着一个问题:如果某些feature具有很强的预测性,则会被许多基分类器CART所选择,这样就增加了基分类器之间的相关性。而Bagging的泛化误差:

\[\text{Generalization error } \le \frac{\overline{\rho} (1-s^2)}{s}
\]

上式(具体含义及证明请参看论文 [1])表明:随着基分类器的相关性\(\overline{\rho}\)增加,则RF的泛化误差的上界也随之增加。为了降低基分类器的相关性,RF加入了Feature Bagging,对特征集合进行取样。

2. 详解

本小节详细介绍RF算法的细节,将从Data Bagging与Feature Bagging两个方面展开。

Data Bagging

RF对样本集bootstrap取样,与其他的Bagging算法并无二致。RF算法的整体流程如下(图来自于ESL [2]):

Feature Bagging

所谓Feature Bagging是对特征集合取样\(K\)个特征。每一棵策树的每一个结点分裂,RF都从特征集合中取样,并且每一次取样都互不影响。RF的的决策树生成算法如下(图来自于 [3]):

如果特征集合的基较小,即特征数量不足,则很难采样出相互独立的特征集合。RF采取了线性加权的方式组合(Linear Combinations of Inputs)成新feature,形成新的特征集合。Breiman把这一类RF称为Forest-RC。Breiman在论文 [1]中建议分类RF的\(K\)值应取特征总数\(p\)的对数值,而ESL [2]则建议取平方根值:

\[K = \log_2 p + 1 \quad \text{or} \quad K = \lfloor \sqrt{p} \rfloor
\]

kjw0612整理了awesome-random-forest,给出了RF在各个领域应用的最新进展。scikit-learn包的RandomForestClassifier实现了RF,既可用来做分类也可用来做回归,其中几个重要参数的说明:

n_estimators: RF的决策树的棵数,默认10;
max_features: 决策树分裂时的K值,默认为"auto"即sqrt(n_features),亦可选择"log2"即og2(n_features),或者直接指定为int值或float值;
bootstrap: 样本是否做bootstrap取样,默认为True;

3. 参考资料

[1] Breiman, Leo. "Random forests." Machine learning 45.1 (2001): 5-32.

[2] Trevor Hastie, Robert Tibshirani, Jerome H. Friedman. The elements of statistical learning. Springer, Berlin: Springer series in statistics, 2009.

[3] Zhou, Zhi-Hua. Ensemble methods: foundations and algorithms. CRC press, 2012.

[4] Leo Breiman and Adele Cutler, Random Forests.

[5] Fernández-Delgado, Manuel, et al. "Do we need hundreds of classifiers to solve real world classification problems." J. Mach. Learn. Res 15.1 (2014): 3133-3181.

Bagging决策树:Random Forests的更多相关文章

  1. Bootstrap,Bagging and Random Forest Algorithm

    Bootstrap Method:在统计学中,Bootstrap从原始数据中抽取子集,然后分别求取各个子集的统计特征,最终将统计特征合并.例如求取某国人民的平均身高,不可能测量每一个人的身高,但却可以 ...

  2. 以Random Forests和AdaBoost为例介绍下bagging和boosting方法

    我们学过决策树.朴素贝叶斯.SVM.K近邻等分类器算法,他们各有优缺点:自然的,我们可以将这些分类器组合起来成为一个性能更好的分类器,这种组合结果被称为 集成方法 (ensemble method)或 ...

  3. 随机森林——Random Forests

    [基础算法] Random Forests 2011 年 8 月 9 日 Random Forest(s),随机森林,又叫Random Trees[2][3],是一种由多棵决策树组合而成的联合预测模型 ...

  4. 第七章——集成学习和随机森林(Ensemble Learning and Random Forests)

    俗话说,三个臭皮匠顶个诸葛亮.类似的,如果集成一系列分类器的预测结果,也将会得到由于单个预测期的预测结果.一组预测期称为一个集合(ensemble),因此这一技术被称为集成学习(Ensemble Le ...

  5. 壁虎书7 Ensemble Learning and Random Forests

    if you aggregate the predictions of a group of predictors,you will often get better predictions than ...

  6. CF Gym 102028G Shortest Paths on Random Forests

    CF Gym 102028G Shortest Paths on Random Forests 抄题解×1 蒯板子真jir舒服. 构造生成函数,\(F(n)\)表示\(n\)个点的森林数量(本题都用E ...

  7. Ensemble Learning 之 Bagging 与 Random Forest

    Bagging 全称是 Boostrap Aggregation,是除 Boosting 之外另一种集成学习的方式,之前在已经介绍过关与 Ensemble Learning 的内容与评价标准,其中“多 ...

  8. Aggregation(1):Blending、Bagging、Random Forest

    假设我们有很多机器学习算法(可以是前面学过的任何一个),我们能不能同时使用它们来提高算法的性能?也即:三个臭皮匠赛过诸葛亮. 有这么几种aggregation的方式: 一些性能不太好的机器学习算法(弱 ...

  9. bootstrap && bagging && 决策树 && 随机森林

    看了一篇介绍这几个概念的文章,整理一点点笔记在这里,原文链接: https://machinelearningmastery.com/bagging-and-random-forest-ensembl ...

随机推荐

  1. 套接字和域名系统DNS

    套接字产生的原因: 当应用进程通过传输层进行通信时 ,TCP和 UDP将面临同时为多个应用进程提供并行通信的问题.多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据. 为了区别每 ...

  2. [Big Data]Spark

    SPARK Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapRed ...

  3. Delphi中建立指定大小字体和读取该字体点阵信息的函数(转)

    源:Delphi中建立指定大小字体和读取该字体点阵信息的函数 Delphi中建立指定大小字体和读取该字体点阵信息的函数 作者:Thermometer Email:  webmaster@daheng- ...

  4. gulp用法

    转载:http://segmentfault.com/blog/laopopo/1190000000372547 http://javascript.ruanyifeng.com/tool/gulp. ...

  5. flume-1.6.0单节点部署

    这个不多说,直接上干货,部署很简单! 步骤一:flume的下载 当然,这里也可以使用wget命令在线下载,很简单,不多说. 步骤二:flume的上传 [hadoop@djt002 flume]$ ls ...

  6. JAVA基础--工厂模式

    interface Fruit{ // 定义一个水果接口 public void eat() ; // 吃水果 } class Apple implements Fruit{ public void ...

  7. ZOJ 3780 Paint the Grid Again

    拓扑排序.2014浙江省赛题. 先看行: 如果这行没有黑色,那么这个行操作肯定不操作. 如果这行全是黑色,那么看每一列,如果列上有白色,那么这一列连一条边到这一行,代表这一列画完才画那一行 如果不全是 ...

  8. NYoj1058

    水题,dfs,裸的,本来这道题没什么好写的,只是第一次写的代码慢的出奇,纪念一下那个奇怪的思路 链接:http://acm.nyist.net/JudgeOnline/problem.php?pid= ...

  9. LPC1788做U盘的时候对命令的响应

    首先是对于端点的数据处理 #ifndef __USBEP2_H_ #define __USBEP2_H_ #include "usb.h" #include "usbhw ...

  10. coreGraphs和动画

    http://www.jianshu.com/p/b71c3d450e8e http://blog.csdn.net/volcan1987/article/details/9969455 http:/ ...