随机森林(Random Forest)算法原理

随机森林(Random Forest)算法原理随机森林 RandomForest 算法原理集成学习 Ensemble 思想 自助法 bootstrap 与 bagging 集成学习 ensemble 思想是为了解决单个模型或者某一组参数的模型所固有的缺陷 从而整合起更多的模型 取长补短 避免局限性 随机森林就是集成学习思想下的产物 将许多棵决策树整合成森林 并合起来用来预测最终结果 首先 介绍自助法 bootstra

随机森林(Random Forest)算法原理

集成学习(Ensemble)思想、自助法(bootstrap)与bagging

集成学习(ensemble)思想是为了解决单个模型或者某一组参数的模型所固有的缺陷,从而整合起更多的模型,取长补短,避免局限性。随机森林就是集成学习思想下的产物,将许多棵决策树整合成森林,并合起来用来预测最终结果。


这里写图片描述


首先,介绍自助法(bootstrap),这个奇怪的名字来源于文学作品 The Adventures of Baron Munchausen(吹牛大王历险记),这个作品中的一个角色用提着自己鞋带的方法把自己从湖底下提了上来。因此采用意译的方式,叫做自助法。自助法顾名思义,是这样一种方法:即从样本自身中再生成很多可用的同等规模的新样本,从自己中产生和自己类似的,所以叫做自助,即不借助其他样本数据。自助法的具体含义如下:

如果我们有个大小为N的样本,我们希望从中得到m个大小为N的样本用来训练。那么我们可以这样做:首先,在N个样本里随机抽出一个样本x1,然后记下来,放回去,再抽出一个x2,… ,这样重复N次,即可得到N的新样本,这个新样本里可能有重复的。重复m次,就得到了m个这样的样本。实际上就是一个有放回的随机抽样问题。每一个样本在每一次抽的时候有同样的概率(1/N)被抽中。

这个方法在样本比较小的时候很有用,比如我们的样本很小,但是我们希望留出一部分用来做验证,那如果传统方法做train-validation的分割的话,样本就更小了,bias会更大,这是不希望的。而自助法不会降低训练样本的规模,又能留出验证集(因为训练集有重复的,但是这种重复又是随机的),因此有一定的优势。

至于自助法能留出多少验证,或者说,m个样本的每个新样本里比原来的样本少了多少?可以这样计算:每抽一次,任何一个样本没抽中的概率为 (1-1/N),一共抽了N次,所以任何一个样本没进入新样本的概率为(1-1/N)N。那么从统计意义上来说,就意味着大概有(1-1/N)N这么大比例的样本作为验证集。当N→inf时,这个值大概是1/e,36.8%。以这些为验证集的方式叫做包外估计(out of bag estimate)

bagging的名称来源于 ( Bootstrap AGGregatING ),意思是自助抽样集成,这种方法将训练集分成m个新的训练集,然后在每个新训练集上构建一个模型,各自不相干,最后预测时我们将这个m个模型的结果进行整合,得到最终结果。整合方式就是:分类问题用majority voting,回归用均值。


这里写图片描述

bagging和boosting是集成学习两大阵营,之后在总结两者的异同。

决策树(Decision Tree)与随机森林(Random Forest)

决策树是用树的结构来构建分类模型,每个节点代表着一个属性,根据这个属性的划分,进入这个节点的儿子节点,直至叶子节点,每个叶子节点都表征着一定的类别,从而达到分类的目的。

常用的决策树有ID4,C4.5,CART等。在生成树的过程中,需要选择用那个特征进行剖分,一般来说,选取的原则是,分开后能尽可能地提升纯度,可以用信息增益,增益率,以及基尼系数等指标来衡量。如果是一棵树的话,为了避免过拟合,还要进行剪枝(prunning),取消那些可能会导致验证集误差上升的节点。

随机森林实际上是一种特殊的bagging方法,它将决策树用作bagging中的模型。首先,用bootstrap方法生成m个训练集,然后,对于每个训练集,构造一颗决策树,在节点找特征进行分裂的时候,并不是对所有特征找到能使得指标(如信息增益)最大的,而是在特征中随机抽取一部分特征,在抽到的特征中间找到最优解,应用于节点,进行分裂。随机森林的方法由于有了bagging,也就是集成的思想在,实际上相当于对于样本和特征都进行了采样(如果把训练数据看成矩阵,就像实际中常见的那样,那么就是一个行和列都进行采样的过程),所以可以避免过拟合。

prediction阶段的方法就是bagging的策略,分类投票,回归均值。

2018年02月23日23:47:44

reference:

http://www.scholarpedia.org/article/Ensemble_learning

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/200022.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午11:41
下一篇 2026年3月20日 上午11:42


相关推荐

  • 不安装cudnn可不可以_cuDNN安装「建议收藏」

    不安装cudnn可不可以_cuDNN安装「建议收藏」这个系列写了好几篇文章,这是相关文章的索引,仅供参考:去年上半年配置了一台GTX1080深度学习主机:深度学习主机攒机小记,然后分别写了两篇深度学习环境配置的文章:深度学习主机环境配置:Ubuntu16.04+NvidiaGTX1080+CUDA8.0和深度学习主机环境配置:Ubuntu16.04+GeForceGTX1080+TensorFlow,得到了很多同学留言,不过这个一年…

    2022年5月6日
    188
  • 使用 UDP 数据包发送消息

    使用 UDP 数据包发送消息使用 UDP 数据包发送短的文本消息实现是很简单的并且提供可一个非常轻量级的消息传递通道 但是这种模式有很大的缺陷 就是不保证的数据的可靠性 有可能会存在丢包的情况 甚至严重的情况就是服务器不可用的时候 会完全丢失你的消息 不过这个任务会在有些情况下十分有作用 你不关心消息是否丢失 你不想要终止程序只是因为消息无法传递 server pyimportsock 8081s socket socket socket AF INET socket SOCK DGRAM

    2026年3月16日
    2
  • 【转载】三方框架整理

    【转载】三方框架整理github 地址系统控件 TextView 一个功能强大的 TextView 可以满足日常大部分布局方式 Facebook 开源文本布局库 一个对齐 TextView 文本的库 自适应大小和行的 TextView Android 修改 6 0 系统文本选择菜单 歌词显示控件 支持多行显示 拖曳播放 自动识别歌词文件的编码 非常实用的省略控件 无 emoji 截断之乱码 无 charactersty 截断之不雅 歌词风格的 TextView 利用 Gradient 渐变实现 通过

    2026年3月26日
    1
  • openfeign配置代理服务器

    openfeign配置代理服务器第一步 配置文件允许覆盖 Beanspring main allow bean definition overriding true 第二步 配置 Beanpackagec ciih refine config importokhttp importorg springframew cloud commons httpclient DefaultOkHtt importorg springframew cloud

    2026年3月20日
    2
  • c语言获取PCI信息,C语言-遍历pci设备

    c语言获取PCI信息,C语言-遍历pci设备目录前言 pci 简介后记前言最近楼主比较苦逼啊 主管布置了一道访问 pci 的作业 这个作业使用 io 方式还可以非常浪地将所有的东西都给读取出来 虽然不能读取出 pci e 设备的所有信息 但是还是可以将 256 位的其他东西给读出来的 本文将先从 io 访问模式进行对 pci 访问的设置 在这里我所使用的包含了 dos 和 Linux 这样可以看到这 2 个的系统代码的不同 pci 简介 PCI 总线是一种高性能 32 位或者 64 位的多路

    2026年3月17日
    2
  • Pytest(1)安装与入门[通俗易懂]

    Pytest(1)安装与入门[通俗易懂]pytest介绍pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它

    2022年7月30日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号