1. 引入

从RandomForest的鼻祖Breiman的comments(参考1)中,可以看到他说过:对于RandomForest的validation,没有必要像其他模型一样做cross-validation了,可以直接用RandomForest在内部就提供了out-of-bag (oob) error estimate,用这种方法就可以看出RF的训练效果了。

那我们该怎么理解out-of-bag (oob) error estimate呢?

2. 原理:oob error estimate

首先解释几个概念

  1. bootstrap sampling

bootstrap sampling是自主采样法,指的是有放回的采样。这种采样方式,会导致约有36%的样本永远不会被采样到。

具体计算过程:假设有m个样本,有放回的采样,每次被采样到的概率是(1/m),每次不被采样到的概率是(1-1/m);则(1-1/m)的n次方,当n足够大是,极限为1/e(约等于36%)。

  1. Bagging

Bagging是并行集成学习方法最著名的代表,他是基于bootstrap sampling做的有放回抽样,多次抽样后组成多组训练集,来训练多个模型。

RandomForest就是基于Bagging做了一个扩展:随机选择属性(特征)。

  1. out-of-bag (oob) error

out-of-bag (oob) error是 “包外误差”的意思。

它指的是,我们在从x_data中进行多次有放回的采样,能构造出多个训练集。根据上面1中bootstrap sampling的特点,我们可以知道,在训练RF的过程中,一定会有约36%的样本永远不会被采样到。

注意,这里说的“约36%的样本永远不会被采样到”,并不是针对第k棵树来说的,是针对所有树来说,36%的样本永远不会在任何一棵树的训练集中出现过。

那这36%的样本,就是out-of-bag (oob) data,包外数据。

用这个包外数据来做evaluation,就相当于用测试集来做evaluation。所以RF不需要再用测试集来做evaluation了。

3. 编程:oob error estimate

上面解释清楚了oob error estimate的原理,这里给一段示例代码来说明他的用法。

from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
# step-01: get data
data = load_iris()
x_data=data.data
y_data=data.target
# step-02: train rf
clf = RandomForestClassifier(random_state=0, oob_score=True)
clf.fit(x_data,y_data)
# step-03: oob error estimate
print(clf.oob_score_)# 0.9333333333333333

这里注意4点:

  1. 不需要再划分训练集和测试集
  2. RandomForestClassifier的参数oob_score要设置为True(默认为False)
  3. RandomForestClassifier的参数bootstrap要设置为True(默认为True)
  4. 通过访问RandomForestClassifier对象的实例变量oob_score_就能得到1-oob_error的值

4. 总结

本文描述了参考1中对RandomForest的关键部分out-of-bag (oob) error estimate的理解,也给出了参考代码。

参考

  1. https://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm
  2. 周志华《机器学习》2.2节“评估方法”
  3. 周志华《机器学习》8.3节“Bagging与随机森林”

RandomForest中的包外误差估计out-of-bag (oob) error estimate相关推荐

  1. R语言使用randomForest包构建随机森林模型(Random forests)、使用importance函数查看特征重要度、使用table函数计算混淆矩阵评估分类模型性能、包外错误估计OOB

    R语言使用randomForest包中的randomForest函数构建随机森林模型(Random forests).使用importance函数查看特征重要度.使用table函数计算混淆矩阵评估分类 ...

  2. clisp语言中的包

    1. 包简介 clisp中的包就像一个名字空间一样,可在包中定义变量.函数等 包的另一个作用分离不同功能的模块代码组织. 包具有导入导出的概念,有特定关键字实现这个功能. make-package 包 ...

  3. [跟我学UML] UML包图中的包引入和包合并

    缩略语     UIS     UML Infrastructure Specification   UML基础结构规范     UML    Unifed Modeling Language     ...

  4. 如何读取jar包外的properties和log4j.properties等配置文件

    一般在项目中使用properties配置文件的时候都将相关的properties文件放在src目录下,在将该app打包生成jar后,相应的properties配置文件生... 一般在项目中使用prop ...

  5. Java如何读取JAR包外的properties文件及打成jar包后无法读取到jar包内的properties文件

    项目中,经常把一部分功能独立出来,做一个java  project,然后打成jar包供其他项目引用.这时候,如果jar包中需要读取配置文件信息,则很少把该配置打进jar包,因为它不方便修改,更多都是采 ...

  6. 如何读取jar包外的properties文件和log4j.properties

    2019独角兽企业重金招聘Python工程师标准>>> 时间有限,不做排版和具体讲述问题产生的过程,下面是我的解决方案,已证实有效,其中Log4jP = "log4j.pr ...

  7. c++读取txt文件中的数字_在Python中读取包中的数据文件的三种方式

    我们知道,写Python代码的时候,如果一个包(package)里面的一个模块要导入另一个模块,那么我们可以使用相对导入: 假设当前代码结构如下图所示: 其中test_1是一个包,在util.py里面 ...

  8. rust笔记7 rust中的包管理

    rust相比于C++,一个优势在于有一个现代化的包管理系统,我们不用搞各种命令空间和依赖的问题.这里主要记录了一般文件打包的方式. rust中声明包的关键字是mod,如果是公共的,则需要声明为pub ...

  9. Linux 中的包管理器是什么?它是如何工作的?

    文章目录 1.Linux 中的包管理器是什么? 2.什么是包? 3.包管理器如何工作? 4.不同类型的包管理器 1.Linux 中的包管理器是什么? Linux 发行版之间的主要区别之一是包管理系统( ...

最新文章

  1. android 数据库表格数据库数据库中,Android SQLite数据库中的表详解
  2. ARM的流水线与PC值的关系
  3. 安卓TTS语音合成经验分享(科大讯飞语音+)集成
  4. Android后台保活实践总结:即时通讯应用无法根治的“顽疾”
  5. 浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试
  6. 藤条生长为字母的动画
  7. cookie无法读取bdstoken_第二章(第12节):cookie操作
  8. java svn 版本号_eclipse中的Java文件自动根据svn版本号生成注释
  9. java cas原理_Java并发之原子变量及CAS算法-上篇
  10. oracle with as用法_as的用法那么多,你知道多少?
  11. Python写数据结构:循环队列
  12. 测试专家谈IT从业人员修炼之道
  13. 4.性能之巅 洞悉系统、企业与云计算 --- 观测工具
  14. Apache JMeter web 应用测试工具使用快速入门
  15. 170517、Redis 的安装与使用(单节点)
  16. matlab中对于xf(x)的积分,[matlab 积分]MATLAB求积分?
  17. 华为设备接口视图_华为交换机的三种视图
  18. Node-RED使用指南:5:设置管理员的登录密码
  19. 芯片在计算机中作用是什么,逻辑芯片的作用是什么
  20. 足球相关的英文专业术语(持续更新中...Ctrl+F可直接进行搜索)

热门文章

  1. flex布局(flex 居中)
  2. 运用python进行熵值法综合评价
  3. UCS(统一计算系统)[1]
  4. 按键精灵手机版 参数个数不匹配
  5. C++学习(五) 静态数据成员和静态成员函数
  6. 软件测试工程师面试一般常见问题汇总
  7. 电脑连蓝牙耳机,放音乐是用蓝牙耳机,浏览器不能用蓝牙耳机,用的扬声器,解决方案:
  8. 阿里云配置SSH密钥连接
  9. 构筑全云端数字生态,看游戏工业如何持续进化
  10. LaTeX调整三线表行间距