欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld

技术交流QQ群:433250724,欢迎对算法、技术感兴趣的同学加入。

前面机器学习方法(四)决策树讲了经典的决策树算法,我们讲到决策树算法很容易过拟合,因为它是通过最佳策略来进行属性分裂的,这样往往容易在train data上效果好,但是在test data上效果不好。随机森林random forest算法,本质上是一种ensemble的方法,可以有效的降低过拟合,本文将具体讲解。

Background


Decision trees are a popular method for various machine learning tasks. Tree learning “comes closest to meeting the requirements for serving as an off-the-shelf procedure for data mining”, say Hastie et al.[1], because it is invariant under scaling and various other transformations of feature values, is robust to inclusion of irrelevant features, and produces inspectable models. However, they are seldom accurate


先讲一讲decision tree[2]的好处:(1)特征数据放缩不变性;(2)面对无关特征更鲁棒;(3)得到确定的model。

但是decision tree往往不够准确,因为很容易产生over-fitting:一颗很深的树往往有low bias, high variance;而随机森林Random Forest通过对对多个决策树进行平均,可以显著降低variance来减少过拟合。RF带来的问题是稍稍增加一点bias,以及模型的可解释性,但是获得的收益是显著提高了准确率。


bagging

bagging[4],也称为 bootstrap aggregating,是一种非常简单而通用的机器学习集成学习算法。RF需要用到bagging,但是其他的分类或者回归算法都可以用到bagging,以减少over-fitting(降低model的variance)。


Given a standard training set D of size n, bagging generates m new training sets D_i, each of size n′, by sampling from D uniformly and with replacement. This kind of sample is known as a bootstrap sample. The m models are fitted using the above m bootstrap samples and combined by averaging the output (for regression) or voting (for classification).


简单的来说,就是从原始训练数据集中,有放回的采样出若干个小集合,然后在每个小集合上train model,对所有的model output取平均(regression)或者投票(classification)。


bagging的每一个小集合中,不同的样本数量的期望满足这样一个性质[3]:

when drawing with replacement n′ values out of a set of n (different and equally likely), the expected number of unique draws is

n(1−e−n′/n).

回到random forest算法:给定一个有n个样本的训练集{X,Y},

for b=1,…,B:

1. 从X中有放回的采样n个样本,组成集合{Xb,Yb};

2. 在{Xb,Yb}上训练决策树(或者回归树);

end

训练完成后,取所有model的平均作为输出(或者用majority vote投票决定):

f^=1B∑b=1Bf^b(x′)

单个决策树模型很容易受到噪音数据的影响,而混合模型就不容易会。但是如果在同样的数据上train多棵树,也很容易得到强相关的树(或者是一样的树),那效果就不好了;上面的bootstrap sampling的方法就是让model看到不同的train data。

B是一个可调节的参数,一般来说选用几百或者几千棵树,或者通过cross-validation来选择最佳的B。另外,也可以通过观察out-of-bag error:在所有训练数据xi上的平均预测error(预测xi用的是些那没有用到xi来训练的trees。)同时观察train error和test error(out-of-bag error)会发现,在一定数量的tree之后,两种error会分开。


random subspace selection

在上面的tree bagging基础上,每一个model训练的时候对所选取的data split随机选取一部分特征子集(random subset of the features)来训练。这样做的目的也是为了让学到的tree不要太相似——如果有几个特征和output是强相关的,那么在很多tree里面,这些特征都会被挑选出来(train决策树的时候往往不会太深,这样就可能不会用到所有的feature。),或者在树的靠近根部,这样这些tree就很相似。

一般来说,在classification任务中,如有总共有p个features,那么在每一个split中选取p√个features;在regression任务中,推荐使用p/3(不小于5)个features。

以上就是random forest算法的内容,在决策树的基础上,做样本和特征的随机选择,是一种典型的集成算法。


Extensions

(1)ExtraTrees

进一步扩展RF算法,是一种叫extremely randomized trees,(ExtraTrees)的算法:在RF采取bagging和random subspace的基础上,进一步在每一棵树train决策树的时候,选取的split value采用随机生成。

原先决策树针对是连续数值的特征会计算局部split value,(一个特征可能可以产生多个split value,都计算一下,然后评估所有的特征中的哪一个split value最好,就以该特征的该split value分裂);但是现在,对每一个特征,在它的特征取值范围内,随机生成一个split value,再计算看选取哪一个特征来进行分裂(树多一层)。

(2)Relationship to nearest neighbors

RF和KNN算法在形式上有类似的地方。这两个算法都可以用下面的公式来表示:

在训练集{(xi,yi)}ni=1上, 预测x’的label:

y^=∑i=1nW(xi,x′)yi.

In k-NN, the weights are W(xi,x′)=1k if xi is one of the k points closest to x’, and zero otherwise.

In a tree, W(xi,x′)=1k′ if xi is one of the k’ points in the same leaf as x’, and zero otherwise.

而RF是对m棵树的平均,以单独的weight functions Wj

y^=1m∑j=1m∑i=1nWj(xi,x′)yi=∑i=1n⎛⎝1m∑j=1mWj(xi,x′)⎞⎠yi.

由此可见,RF整体也是一个近邻加权的方法( weighted neighborhood scheme)——The neighbors of x’ in this interpretation are the points x_i which fall in the same leaf as x’ in at least one tree of the forest.


References

[1] Hastie, Trevor; Tibshirani, Robert; Friedman, Jerome (2008). The Elements of Statistical Learning (2nd ed.).

[2] https://en.wikipedia.org/wiki/Random_forest

[3] Aslam, Javed A.; Popa, Raluca A.; and Rivest, Ronald L. (2007); On Estimating the Size and Confidence of a Statistical Audit.

[4] https://en.wikipedia.org/wiki/Bootstrap_aggregating

机器学习方法(六):随机森林Random Forest,bagging的更多相关文章

  1. sklearn_随机森林random forest原理_乳腺癌分类器建模(推荐AAA)

     sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  2. 机器学习(六)—随机森林Random Forest

    1.什么是随机采样? Bagging可以简单的理解为:放回抽样,多数表决(分类)或简单平均(回归): Bagging的弱学习器之间没有boosting那样的联系,不存在强依赖关系,基学习器之间属于并列 ...

  3. 随机森林random forest及python实现

    引言想通过随机森林来获取数据的主要特征 1.理论根据个体学习器的生成方式,目前的集成学习方法大致可分为两大类,即个体学习器之间存在强依赖关系,必须串行生成的序列化方法,以及个体学习器间不存在强依赖关系 ...

  4. 【机器学习】随机森林(Random Forest)

    随机森林是一个最近比较火的算法 它有很多的优点: 在数据集上表现良好 在当前的很多数据集上,相对其他算法有着很大的优势 它能够处理很高维度(feature很多)的数据,并且不用做特征选择 在训练完后, ...

  5. 【机器学习】随机森林 Random Forest 得到模型后,评估参数重要性

    在得出random forest 模型后,评估参数重要性 importance() 示例如下 特征重要性评价标准 %IncMSE 是 increase in MSE.就是对每一个变量 比如 X1 随机 ...

  6. 第九篇:随机森林(Random Forest)

    前言 随机森林非常像<机器学习实践>里面提到过的那个AdaBoost算法,但区别在于它没有迭代,还有就是森林里的树长度不限制. 因为它是没有迭代过程的,不像AdaBoost那样需要迭代,不 ...

  7. 随机森林(Random Forest)

    决策树介绍:http://www.cnblogs.com/huangshiyu13/p/6126137.html 一些boosting的算法:http://www.cnblogs.com/huangs ...

  8. 随机森林——Random Forests

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

  9. 04-10 Bagging和随机森林

    目录 Bagging算法和随机森林 一.Bagging算法和随机森林学习目标 二.Bagging算法原理回顾 三.Bagging算法流程 3.1 输入 3.2 输出 3.3 流程 四.随机森林详解 4 ...

随机推荐

  1. 从零开始学Linux系统(一)之引导流程解析

    Linux系统:分时多用户多任务的操作系统: Linux系统引导流程: inittab配置文件中: 定义了linux系统的运行的7个级别:从0~6 0.6:分别代表关机和重启,不建议设置为默认的运行级 ...

  2. Windows不能用鼠标双击运行jar文件

    Java应用程序jar文件可以由 JVM(Java虚拟机)直接执行,只要操作系统安装了JVM便可以运行作为Java应用程序的jar文件.可是,很多朋友遇到一个难题,那就是下载了jar文件以后在Wind ...

  3. Random Numbers Gym - 101466K dfs序+线段树

    Tamref love random numbers, but he hates recurrent relations, Tamref thinks that mainstream random g ...

  4. Sublime Text3 安装Markdown

    Sublime Text3是一款给力的文本编辑器,通过安装插件可以编辑Markdown文本,在编辑Markdown文本的同时可以实时预览编辑效果. 安装准备: 找到菜单栏:Preferences → ...

  5. idea中设置springboot热部署

    在idea中设置springboot热部署,项目修改的时候不用手动重启应用 1,pom中添加依赖 <dependency> <groupId>org.springframewo ...

  6. 浏览器报错:unexpected end of input 解决方法

    直接上报错代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  7. UVA 1363 Joseph's Problem

    https://vjudge.net/problem/UVA-1363 n 题意:求 Σ  k%i i=1 除法分块 如果 k/i==k/(i+1)=p 那么 k%(i+1)=k-(i+1)*p= k ...

  8. linux下安装tomcat8

    1.自己电脑下载好jdk的linux版本传到linux上或者直接用wget命令下载 安装文件放上去,用ls命令查看下载后的文件,看到apache-tomcat-8.0.28.tar.gz就是我们下载来 ...

  9. mvc BundleConfig实现对Css、Js压缩打包加载

    Bundle不是.net Framework框架中的一员,使用Bundle首先要先添加引用,如下: nuget包管理--程序包管理控制台--Install-Package Microsoft.AspN ...

  10. JAVA获取Classpath根路径的方法

    方法一: String path = Test.class.getResource("/").toString(); System.out.println("path = ...