Bagging决策树:Random Forests
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的泛化误差:
\]
上式(具体含义及证明请参看论文 [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]则建议取平方根值:
\]
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的更多相关文章
- Bootstrap,Bagging and Random Forest Algorithm
Bootstrap Method:在统计学中,Bootstrap从原始数据中抽取子集,然后分别求取各个子集的统计特征,最终将统计特征合并.例如求取某国人民的平均身高,不可能测量每一个人的身高,但却可以 ...
- 以Random Forests和AdaBoost为例介绍下bagging和boosting方法
我们学过决策树.朴素贝叶斯.SVM.K近邻等分类器算法,他们各有优缺点:自然的,我们可以将这些分类器组合起来成为一个性能更好的分类器,这种组合结果被称为 集成方法 (ensemble method)或 ...
- 随机森林——Random Forests
[基础算法] Random Forests 2011 年 8 月 9 日 Random Forest(s),随机森林,又叫Random Trees[2][3],是一种由多棵决策树组合而成的联合预测模型 ...
- 第七章——集成学习和随机森林(Ensemble Learning and Random Forests)
俗话说,三个臭皮匠顶个诸葛亮.类似的,如果集成一系列分类器的预测结果,也将会得到由于单个预测期的预测结果.一组预测期称为一个集合(ensemble),因此这一技术被称为集成学习(Ensemble Le ...
- 壁虎书7 Ensemble Learning and Random Forests
if you aggregate the predictions of a group of predictors,you will often get better predictions than ...
- CF Gym 102028G Shortest Paths on Random Forests
CF Gym 102028G Shortest Paths on Random Forests 抄题解×1 蒯板子真jir舒服. 构造生成函数,\(F(n)\)表示\(n\)个点的森林数量(本题都用E ...
- Ensemble Learning 之 Bagging 与 Random Forest
Bagging 全称是 Boostrap Aggregation,是除 Boosting 之外另一种集成学习的方式,之前在已经介绍过关与 Ensemble Learning 的内容与评价标准,其中“多 ...
- Aggregation(1):Blending、Bagging、Random Forest
假设我们有很多机器学习算法(可以是前面学过的任何一个),我们能不能同时使用它们来提高算法的性能?也即:三个臭皮匠赛过诸葛亮. 有这么几种aggregation的方式: 一些性能不太好的机器学习算法(弱 ...
- bootstrap && bagging && 决策树 && 随机森林
看了一篇介绍这几个概念的文章,整理一点点笔记在这里,原文链接: https://machinelearningmastery.com/bagging-and-random-forest-ensembl ...
随机推荐
- 首页布局时div的宽度设置要注意
- TextView 设置图片
TextView 设置图片 2012-05-17 15:12:38| 分类: Android | 标签:android textview图片 |举报|字号 订阅 Drawable im ...
- [转]hibernate三种状态详解
本文来自 http://blog.sina.com.cn/u/2924525911 hibernate 三种状态详解 (2013-04-15 21:24:23) 转载▼ 分类: hibernate ...
- IP组播技术介绍及实现例子
引 言 近年来,随着Internet的迅速普及和爆炸性发展,在Internet上产生了许多新的应用,其中不少是高带宽的多媒体应用,譬如网 络视频会议.网络音频/视频广播.AOD/VOD.股市行情发布. ...
- mousewheel,DOMMouseScroll判断滚轮滚动方向
firefox使用DOMMouseScroll,其他浏览器使用mousewheel 首先绑定一个滚动事件 //firefox使用DOMMouseScroll,其他浏览器使用mousewheel$(do ...
- WebRequestManager对象的使用
WebRequestManager可以喝WebRequest对象一起使用. WebRequestManager对象的add_completedRequest方法,可以用来处理所有WebRequest对 ...
- RabbitMQ消息队列(九):Publisher的消息确认机制
在前面的文章中提到了queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consum ...
- problem 202,263、232、21、231
[263]Ugly Number Write a program to check whether a given number is an ugly number. Ugly numbers are ...
- hack:选择符前缀法,样式属性前缀法
选择符前缀法 <style> *html .test{width:100px;} /*only for IE6*/ *+html .test{width:100px;}/*for IE6 ...
- java中的double
代码如下: Double d1 = 0.35; Double d2 = 0.1; System.out.println(d1+d2); 结果很不幸不是0.45,而是0.4499999999999999 ...