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