欢迎转载,转载请注明:本文出自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. 复习java数据库操作的总结

    以前学习java数据库操作,学得那叫糊里糊涂,各种JDBC常用的类和接口根本是傻傻分不清啥是干嘛的.只是套着用用吧. 不过这次好歹清楚些了,呜呜,学习有阶段性,多次重复才有好效果,多么痛的领悟. 工程 ...

  2. Problem B. Harvest of Apples 莫队求组合数前缀和

    Problem Description There are n apples on a tree, numbered from 1 to n.Count the number of ways to p ...

  3. bzoj1177 [Apio2009]Oil 二维前缀最大值,和

    [Apio2009]Oil Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 2300  Solved: 932[Submit][Status][Disc ...

  4. getQueryString----获取url中得参数

    /** * 获取url中得参数 * @param name * @returns {null} */ window.getQueryString = function (name) { var reg ...

  5. php中相关函数

    1.php标准风格 <?php //这是标准风格 echo '推荐标准风格'; ?> 2.php中文乱码 .html:<meta http-equiv="Content-T ...

  6. 51Nod 1083 矩阵取数问题 | 动态规划

    #include "bits/stdc++.h" using namespace std; #define LL long long #define INF 0x3f3f3f3f3 ...

  7. centos设置tomcat开机启动

    1.编辑开机启动脚本 vi /etc/init.d/tomcat8 #!/bin/bash # tomcat8:start|stop|restart # chkconfig: 345 90 10 # ...

  8. 归并排序Merge sort2

    原理,把原始数组分成若干子数组,对每一个子数组进行排序, 继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组 举例 无序数组[6 2 4 1 5 9] 先看一下每个步骤下的状态, ...

  9. bzoj1862/1056: [Zjoi2006]GameZ游戏排名系统

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1862 http://www.lydsy.com/JudgeOnline/problem.ph ...

  10. 不可思议的OOM

    本文发现了一类OOM(OutOfMemoryError),这类OOM的特点是崩溃时java堆内存和设备物理内存都充足,下文将带你探索并解释这类OOM抛出的原因. 关键词:  OutOfMemoryEr ...