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 ...
随机推荐
- UESTC 771 最大容积(前缀后缀和)
题目链接:http://acm.uestc.edu.cn/#/problem/show/771 最大容积 Time Limit: 3000/1000MS (Java/Others) Memor ...
- sdf SimpleDateFormat 不是线程安全的,
我经常用一个public static SimpleDateFormat sdf; 今天发现报“java.lang.NumberFormatException: multiple points”的异常 ...
- offsetTop、clientTop、scrollTop、offsetTop各属性介绍
HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth scrollHeight: 获取对象的滚动高度. scrollLeft:设置或获取位于对 ...
- maven bundle
今天引入了几个bundle到pom,尽然说missing,我还以为是nexus组织下载.把type=bundle去掉可以下载,后来同事给了我这个连接https://issues.apache.org/ ...
- CodeForces 660A Co-prime Array
水题.放个1就可以了.暴力的找数字也是很快的. #include<cstdio> #include<cstring> #include<cmath> #includ ...
- Xcode8 去除系统日志输出
Edit Scheme-> Run -> Arguments, 在Environment Variables里边添加 OS_ACTIVITY_MODE = disable
- 4、手把手教你Extjs5(四)主界面上加入顶部和底部区域
这一节为主界面加一个顶部区域和底部区域.一个管理系统的界面可以粗分为顶部标题部分.中间数据展示和处理的部分.底部备注和状态部分. 在增加这二个区域之前,我们先在MainModel.js中加入一些数据. ...
- 学习c++语言应该牢记的50条准则,同样学习其他语言也一样
1.把C++当成一门新的语言学习(和C没啥关系!真的.): 2.看<Thinking In C++>,不要看<C++变成死相>: 3.看<The C++ Programm ...
- Memcached源码分析之memcached.c
memcached.c 由于代码太多,在此省略了部分代码,例如UPD连接,二进制协议,某些错误输出和调试输出等,建议从main函数开始看起. #include "memcached.h&qu ...
- ASIHTTPRequest异步请求 分类: ios技术 2015-03-01 09:33 48人阅读 评论(0) 收藏
我们运行程序,如果网速很慢,查询的时候会一直黑屏,直到请求结束画面才出现,这样用户体验很不好.因此同步请求一般只是在某个子线 程中使用,而不在主线程中使用.异步请求的用户体验要比同步请求好,因此一般情 ...