欢迎转载,转载请注明:本文出自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).

\begin{equation}n(1 - e^{-n'/n}). \end{equation}


回到random forest算法:给定一个有n个样本的训练集 {X,Y} \{X,Y\},
for b=1,…,B:
1. 从 X X中有放回的采样n个样本,组成集合{Xb,Yb}\{X_b,Y_b\};
2. 在 {Xb,Yb} \{X_b,Y_b\}上训练决策树(或者回归树);
end

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

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

\begin{equation} \hat{f} = \frac{1}{B} \sum_{b=1}^B \hat{f}_b (x') \end{equation}

单个决策树模型很容易受到噪音数据的影响,而混合模型就不容易会。但是如果在同样的数据上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√ \sqrt{p}个features;在regression任务中,推荐使用 p/3 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_i, y_i)\}_{i=1}^n 上, 预测x’的label:

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

\begin{equation} \hat{y} = \sum_{i=1}^n W(x_i, x') \, y_i. \end{equation}

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

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

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

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

\begin{equation} \hat{y} = \frac{1}{m}\sum_{j=1}^m\sum_{i=1}^n W_{j}(x_i, x') \, y_i = \sum_{i=1}^n\left(\frac{1}{m}\sum_{j=1}^m W_{j}(x_i, x')\right) \, y_i. \end{equation}

由此可见,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. 随机森林Random Forest,bagging

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld.  技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 前面机器学习方法(四)决策树讲了经 ...

  2. 【机器学习】随机森林 – Random forest

    文章目录 一.随机森林是什么? 1. 随机森林是一种集成学习算法 2. 随机森林的基学习器是决策树 二.随机森林 – Random Forest | RF 三.构造随机森林的 4 个步骤 四.随机森林 ...

  3. 初勘数据处理之预测算法(随机森林random forest)附matlab源码

    初勘数据处理之预测算法(随机森林random forest)附matlab源码 集成学习方法 集成学习方法,是整合多个分类方法的预测结果,以提高分类准确率.集成学习方法先用训练数据构建一组基分类器,再 ...

  4. 通俗解读随机森林Random Forest

    通俗解读随机森林Random Forest 写在前面 1. 什么是集成学习 2. 什么是Bagging 3 随机森林 写在前面 声明:本文主要参考的是周志华老师的<机器学习>西瓜书,参杂了 ...

  5. 【ML】随机森林(Random Forest) 从入门到放弃再到掌握

    目录 集成学习 决策树 Boosting Adaboost GBDT 梯度提升决策树是属于boosting集成学习的一种方法,通过构建多颗CART回归树,每一轮利用上一轮学习器的残差进行树的创建.该残 ...

  6. 随机森林(Random Forest)和梯度提升树(GBDT)有什么区别?

    随机森林(Random Forest)和梯度提升树(GBDT)有什么区别? 随机森林属于 集成学习 中的 Bagging(Bootstrap AGgregation 的简称) 方法. 随机森林是由很多 ...

  7. 随机森林 – Random forest

    随机森林 – Random forest 随机森林是一种由决策树构成的集成算法,他在很多情况下都能有不错的表现. 本文将介绍随机森林的基本概念.4 个构造步骤.4 种方式的对比评测.10 个优缺点和 ...

  8. 集成学习(Bagging和AdaBoost和随机森林(random forest))

    前言 集成学习的特点就是一个最终模型由很多分类器集成起来,最终通过投票或者加权的方式来获得最终结果.有两种经典的方法:bagging和adaboost. bagging bagging做法 其中: y ...

  9. 随机森林(Random Forest)面试高频题

    推荐一篇写的很好的博客:[Machine Learning & Algorithm] 随机森林(Random Forest). 一.随机森林算法的原理 随机森林算法是Bagging集成框架下的 ...

最新文章

  1. 音乐与现代计算机技术,计算机技术在音乐教学中应用与研究.doc
  2. Docker创建自己的github(Gitea)
  3. python语句x 3 3执行_Python语言中,x=2,y=3,执行x,y=y,x之后,x和y的值分别是什么?...
  4. ABAP 字符串操作
  5. Linux安装ansible自动化运维工具
  6. CSS2--字体样式
  7. C++实现各种排序以及复杂度,稳定性分析
  8. python装饰器的顺序_python中多个装饰器的执行顺序详解
  9. 【CodeForces - 1042B】Vitamins(去重方法,二进制或stlmap,水题)
  10. 新的恶意软件将后门植入微软 SQL Server 中
  11. Git的安装以及常用的命令总结
  12. import radom 和import string
  13. linux 浏览器缓存目录在哪里找,火狐浏览器缓存文件在什么位置?缓存文件位置分享...
  14. Hyperledger Fabric Service Discovery CLI(服务发现命令行工具)学习笔记
  15. 什么是CDN?CDN的技术原理是什么?
  16. 朱建辉php,“神采·朱建辉版画艺术展”在尼泊尔加德满都开幕
  17. 微信公众号开发 - 事件处理和回复消息
  18. 超详细Seaborn绘图 ——(一)barplot
  19. 高等数学(第七版)同济大学 习题11-3 (后4题)个人解答
  20. python写新年快乐程序_python turtle 书写新年快乐

热门文章

  1. typecho插件ArticleProtect-给文章加上访问权限
  2. 码农 “家” 班神器分享:人体工学键盘、明基护眼显示器BL2480T…..
  3. Java物联网方向_物联网专业课程安排——未来主要方向之一
  4. 图书馆管理系统应用程序说明书
  5. Cisco Nexus 7700 FEX双宿主割接踩坑经历
  6. 喜讯丨星舆科技连续四年入选“全国科技型中小企业”
  7. 数据结构:线性表顺序存储
  8. 2014版广西建筑资料软件下载
  9. elasticsearch ngram和edgengram分词器
  10. 【源码分享】仿网易客户端源码效果 apkbus的~