集成树模型系列之一——随机森林

随机森林一般会被认为集成树模型的开端,虽然现在工业或者比赛中都很少会被应用,但是我们学习集成树模型都绕不过它,它的一些思想被广泛地应用到后面的集成树模型中。
随机森林这个取名非常地贴切,涵括了它最重要的2个特征:“随机”,“森林”。

随机森林的"森林"

森林顾名思义肯定涵盖了很多棵树,随机森林也恰是很多棵决策数组合而成的。那么它是怎么组合而成的呢?我们先引入几个概念:

一:bagging和boosting。

1:Bagging即套袋法,在多数情况下,bagging 方法提供了一种非常简单的方式来对单一模型(同一个算法在不同的训练集上训练多个模型)进行改进,而无需修改背后的算法。其算法过程如下:
1):从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)
2):每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)
3):对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)
平常我们说的五折验证可以认为是采用的bagging方法(当然他们们的数据不是独立的,各个数据集生成的模型是完全独立的,可以并行训练模型,并且数据集随机划分),在我认为:从更广义地地方来说多个相互独立的模型的结果加权起来用的就是bagging方法。

2:boosting是通过一定的方式将基础模型进行线性的组合,更强调的模型的结合,因为往往各个模型之间不是相互独立的,这一个模型会依赖上一个模型的结果。主流的boosting模型有GBDT(我们之后会简单讲述)。

二:偏差和方差

1:偏差大一般代表欠拟合,方差大一般代表过拟合。偏差反应模型的拟合能力,方差更反应的是模型的鲁棒性。
一般我们会说:bagging可以降低方差,boosting一般用于降低偏差。
这是因为bagging是选取各种模型的结果然后线性加权,各个模型之间是独立的,可以有E[∑(xi)n]=E[xi]E[\frac{\sum(x_i)}{n}]=E[x_i]E[n∑(xi​)​]=E[xi​],通过bagging融合之后并不能很明显地降低偏差。但是由于var(∑(xi)n)=var(xi)nvar(\frac{\sum(x_i)}{n})=\frac{var(x_i)}{n}var(n∑(xi​)​)=nvar(xi​)​,因此可以明显地降低方差。与此同时,boosting是采用forward-stagewise这种贪心法去最小化损失函数,比如常见地GBDT是下一棵树直接去拟合上一棵树的损失函数,这种方法肯定会带来bais的降低,同时由于各个模型之间并不独立并不能较少偏差。

随机森林的"随机"

一些概念介绍完了,我先用一句话定义下随机森林,随机森林是一种采用了bagging方法将决策树模型集成起来的集成模型。关于集成的概念我们了解,那么接下来介绍下"随机"。
随机森林的随机可以分别两个方面:
1:数据的随机
2:特征的随机

一:数据随机

随机森林会并行地生成很多棵决策树,每棵决策树的训练数据都是从整体数据中随机选择部分数据。

二:特征随机

为了最后训练决策树之间的差异性变大,除了数据随机之外,决策树还加了一个特征随机,每个决策树的训练都只采用了部分的特征。

注:数据随机和特征随机的思想,xgb模型中也应用到了(根据subsample和colsample_bytree参数设置比例),主要是防止过拟合。

关于随机森林的介绍就到此结束。总结一下:随机森林是采用bagging的方法将多棵决策树结果线性加权起来,各棵树中的训练数据和特征都是从总体数据和特征中随机抽取的。

下面介绍一下sklearn中随机森林的实现方法:

 from sklearn.ensemble import RandomForestClassifierfrom sklearn.datasets import make_classificationX, y = make_classification(n_samples=1000, n_features=4,
n_informative=2, n_redundant=0,random_state=0, shuffle=False)clf = RandomForestClassifier(max_depth=2, random_state=0)
clf.fit(X, y)RandomForestClassifier(...)print(clf.predict([[0, 0, 0, 0]]))

更多关于随机森林的细节可以学习sklearn.ensemble._forest.py中的源代码。

随机森林的优缺点

优点:
1:与传统决策树模型相比,它结合了多个决策树模型的结果,模型地效果会更好。
2:与xgb等梯度提升树相比,它由于可以并行地生成树,不需要像梯度提升树模型那样需要等第一棵树生成完再生成下一棵树,因此速度更快。
缺点:
1:与xgb等梯度提升树相比,效果会差一些。同样也是因此,一般在数据挖掘地比赛中我们很少会使用随机森林。

集成树第一章随机森林介绍完毕,下期将介绍GBDT模型的基本原理和详细介绍xgboost的原理。
我想留个问题和大家一起探讨下:
1:plantsgo在kaggle中率先使用的嫁接是基于bagging或者boosting,或者什么都不是。

集成树模型系列之一——随机森林相关推荐

  1. R语言随机森林模型:计算随机森林模型的特征重要度(feature importance)并可视化特征重要度、使用少数重要特征拟合随机森林模型(比较所有特征模型和重要特征模型在测试集上的表现差异)

    R语言随机森林模型:计算随机森林模型的特征重要度(feature importance)并可视化特征重要度.使用少数重要特征拟合随机森林模型(比较所有特征模型和重要特征模型在测试集上的表现差异) 目录

  2. XGBOOST集成树模型的原理梳理

    0 前言 xgboost本身是集成树模型,在了解其原理之前,先对树模型的机器学习基础知识做一定介绍. 监督学习元素 (1)学习模型(即已知x,求出y的模型表达式) 比如:线性模型: 逻辑回归模型: ( ...

  3. 机器学习系列|基于随机森林的生存分析模型-R实战

    机器学习系列|基于随机森林的生存分析模型-R实战 随机生存森林 随机生存森林通过训练大量生存树,以表决的形式,从个体树之中加权选举出最终的预测结果. 构建随机生存森林的一般流程为: Ⅰ. 模型通过&q ...

  4. 决策树系列之随机森林

    1.基本概念:Bagging.Booststraping.OOB数据 Booststraping: 有放回样本: Bagging: 全称Boostrapping aggregation 步骤: 1.从 ...

  5. python模型训练 warm_start_随机森林入门攻略(内含R、Python代码)

    简介 近年来,随机森林模型在界内的关注度与受欢迎程度有着显著的提升,这多半归功于它可以快速地被应用到几乎任何的数据科学问题中去,从而使人们能够高效快捷地获得第一组基准测试结果.在各种各样的问题中,随机 ...

  6. 集成树模型(Ensemble)

    介绍下rf,adaboost,gbdt,xgboost的算法原理?(注意adaboost,gbdt,xgboost的区别) RF的算法原理: 随机森林是有很多随机得决策树构成,它们之间没有关联.得到R ...

  7. 科罗拉多州立大学发布CSU-MLP模型,用随机森林预测中期恶劣天气

    本文首发自 HyperAI超神经微信公众号~ 内容一览:近期,来自美国科罗拉多州立大学与 SPC 的相关学者联合发布了一个基于随机森林的机器学习模型 CSU-MLP,该模型能够对中期 (4-8天) 范 ...

  8. 树模型(四):随机森林

    1 两个随机 (1)样本有放回随机抽取固定数目 (2)构建决策树时,从M个特征中随机抽取m个(m << M) 2 对Bagging的改进 1)Random forest是选与输入样本的数目 ...

  9. 模型训练之决策树、随机森林、提升树

    训练模型 目录 1.导入工具包: 2.实验数据生成 3.数据集划分 4.树模型的使用 4.1 Decision Tree 4.2 Random Forest 4.3 LightGBM 5.分类模型评价 ...

最新文章

  1. webstorm设置注释颜色_简单5步了解相关矩阵的注释热图
  2. 记住一个道理:只要自己变优秀了,其他的事情才会跟着好起来。
  3. 不得不爱,Visual Studio Code十大超酷特性
  4. Activiti+Oracle,在数据量大的时候报错:无法支持1000列以上
  5. python 数据逆时针旋转270度_Python自动耍俄罗斯方块
  6. linux修改文件夹名称_1.3.2 对 Hello Word! 程序代码进行编辑修改
  7. wordpress模板-单栏多色调全站pajx个人博客模板 idevs主题
  8. 【SpringBoot】SpringBoot+druid+Myibatis集成
  9. 【ACM ICPC 2011–2012, Northeastern European Regional Contest】Interactive Permutation Guessing【交互题】
  10. Displaytag的使用四
  11. php调用纯真ip,PHP调用纯真IP数据库返回具体地址
  12. 【vue 四级联动】
  13. 对近来安庆天气特征的总结(夏季)
  14. C语言 判断一个数是不是质数(素数)
  15. CSS 设置 border 边框不占元素宽高
  16. django {%url %}传递参数 url 传参 报错
  17. 使用java数据结构编写代码
  18. 亚马逊雨林大火为何上不了热搜?我们都被某些媒体给忽悠了!
  19. 如何把几个excel合并成一个
  20. 测试小白的软件测试知识(适用于面试前突击)

热门文章

  1. VaR模型中的风险因子和估值框架
  2. MySQL入门教程(详细,多图例,多示例)
  3. 05JS实现弹性相册
  4. 202020 公文系统安装技巧
  5. “一见钟情” 文证通证件识别让旅行证件不再寂寞
  6. PTA L1-016 查验身份证(15分)
  7. c++开源爬虫-Larbin简介
  8. 链路聚合-负载分担方式
  9. 计算机主板的典型布局,主板布局
  10. Topic 15. 临床预测模型之决策曲线 (DCA)