【问题标题】:How can I get the OOB samples used for each tree in random forest model R?如何获得用于随机森林模型 R 中每棵树的 OOB 样本?
【发布时间】:2018-05-23 13:19:08
【问题描述】:

是否可以获得随机森林算法对每棵树使用的 OOB 样本? 我正在使用 R 语言。 我知道 RandomForest 算法使用几乎 66% 的数据(随机选择)来培育每棵树,并使用 34% 的数据作为 OOB 样本来测量 OOB 错误,但我不知道如何获取这些 OOB 样本每棵树?

有什么想法吗?

【问题讨论】:

标签: r random-forest


【解决方案1】:

假设您使用的是randomForest 包,您只需将keep.inbag 参数设置为TRUE

library(randomForest)
set.seed(1)
rf <- randomForest(Species ~ ., iris, keep.inbag = TRUE)

输出列表将包含一个 n×ntree 矩阵,可以通过名称 inbag 访问。

dim(rf$inbag)
# [1] 150 500

rf$inbag[1:5, 1:3]
#   [,1] [,2] [,3]
# 1    0    1    0
# 2    1    1    0
# 3    1    0    1
# 4    1    0    1
# 5    0    0    2

矩阵中的值告诉您样品在袋子中的次数。例如,上面第 5 行第 3 列中的值 2 表示对于第 3 棵树,第 5 次观察被包含在包中两次。

作为这里的背景知识,一个样本可以多次出现在袋子中(因此是 2 次),因为默认情况下,抽样是通过替换完成的。

您也可以通过replace 参数进行采样而不用替换。

set.seed(1)
rf2 <- randomForest(Species ~ ., iris, keep.inbag = TRUE, replace = FALSE)

现在我们可以验证,在不替换的情况下,任何样本被包含的最大次数是一次。

# with replacement, the maximum number of times a sample is included in a tree is 7
max(rf$inbag)
# [1] 7

# without replacemnet, the maximum number of times a sample is included in a tree is 1
max(rf2$inbag)
# [1] 1

【讨论】:

  • 只是为了确认,?randomForest 提供的文档(归因于参数keep.inbag 指出该矩阵提供了“哪些样本在哪些树中是“袋内”的(但不是多少次,如果抽样更换)”。您认为文档只是过时了吗?
猜你喜欢
  • 2014-05-05
  • 2017-05-13
  • 2020-02-28
  • 2014-04-20
  • 1970-01-01
  • 2018-05-27
  • 2013-10-26
  • 2018-06-06
  • 2020-02-25
相关资源
最近更新 更多