如何在随机森林模型R中获得用于每棵树的OOB样本?

问题描述 投票:1回答:1

是否有可能为每棵树获取随机森林算法使用的OOB样本?我正在使用R语言。我知道RandomForest算法使用了近66%的数据(随机选择)来成长每棵树,34%的数据作为OOB样本来测量OOB错误,但我不知道如何获取这些OOB样本每棵树?

任何的想法 ?

r random-forest
1个回答
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表示第5个观察结果包含在第3个树的袋中两次。

作为这里的一些背景,样本可以多次显示在袋中(因此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
© www.soinside.com 2019 - 2024. All rights reserved.