随机森林和预测


14

我正在尝试了解随机森林的工作原理。我对树木的构建方式有所了解,但无法理解“随机森林”如何对袋装样本进行预测。有人可以给我一个简单的解释吗?

Answers:


17

森林中的每棵树都是从训练数据中的观察值的引导样本中构建的。引导程序样本中的那些观察结果将构建树,而引导程序样本中的那些观察结果则不构成自付费用(或OOB)样本。

应该清楚的是,用于构建树的数据中的案例与OOB样本中的案例具有相同的变量。为了获得对OOB样本的预测,每棵样本都沿着当前树向下传递,并遵循树的规则,直到到达终端节点为止。得出该特定树的OOB预测。

此过程重复很多次,每棵树都根据训练数据和对新OOB样本的预测在新的引导样本上进行训练。

随着树数量的增加,OOB样本中的任何一个样本都将不止一次,因此,样本在OOB中的N棵树的预测的“平均值”将用作每个训练样本的OOB预测。树1,...,N。通过“平均”,我们使用预测的均值来进行连续响应,或者可以将多数票用于分类响应(多数票是对该集合的多数票的类别。树1,...,N)。

例如,假设我们对10棵树上的训练集中的10个样本具有以下OOB预测

set.seed(123)
oob.p <- matrix(rpois(100, lambda = 4), ncol = 10)
colnames(oob.p) <- paste0("tree", seq_len(ncol(oob.p)))
rownames(oob.p) <- paste0("samp", seq_len(nrow(oob.p)))
oob.p[sample(length(oob.p), 50)] <- NA
oob.p

> oob.p
       tree1 tree2 tree3 tree4 tree5 tree6 tree7 tree8 tree9 tree10
samp1     NA    NA     7     8     2     1    NA     5     3      2
samp2      6    NA     5     7     3    NA    NA    NA    NA     NA
samp3      3    NA     5    NA    NA    NA     3     5    NA     NA
samp4      6    NA    10     6    NA    NA     3    NA     6     NA
samp5     NA     2    NA    NA     2    NA     6     4    NA     NA
samp6     NA     7    NA     4    NA     2     4     2    NA     NA
samp7     NA    NA    NA     5    NA    NA    NA     3     9      5
samp8      7     1     4    NA    NA     5     6    NA     7     NA
samp9      4    NA    NA     3    NA     7     6     3    NA     NA
samp10     4     8     2     2    NA    NA     4    NA    NA      4

其中NA意味着样本在该树的训练数据中(换句话说,它不在OOB样本中)。

NA每行非值的平均值给出整个森林的每个样本的OOB预测

> rowMeans(oob.p, na.rm = TRUE)
 samp1  samp2  samp3  samp4  samp5  samp6  samp7  samp8  samp9 samp10 
  4.00   5.25   4.00   6.20   3.50   3.80   5.50   5.00   4.60   4.00

将每棵树添加到森林后,我们可以计算出包括该树在内的OOB错误。例如,以下是每个样本的累计平均值:

FUN <- function(x) {
  na <- is.na(x)
  cs <- cumsum(x[!na]) / seq_len(sum(!na))
  x[!na] <- cs
  x
}
t(apply(oob.p, 1, FUN))

> print(t(apply(oob.p, 1, FUN)), digits = 3)
       tree1 tree2 tree3 tree4 tree5 tree6 tree7 tree8 tree9 tree10
samp1     NA    NA  7.00  7.50  5.67  4.50    NA   4.6  4.33    4.0
samp2      6    NA  5.50  6.00  5.25    NA    NA    NA    NA     NA
samp3      3    NA  4.00    NA    NA    NA  3.67   4.0    NA     NA
samp4      6    NA  8.00  7.33    NA    NA  6.25    NA  6.20     NA
samp5     NA     2    NA    NA  2.00    NA  3.33   3.5    NA     NA
samp6     NA     7    NA  5.50    NA  4.33  4.25   3.8    NA     NA
samp7     NA    NA    NA  5.00    NA    NA    NA   4.0  5.67    5.5
samp8      7     4  4.00    NA    NA  4.25  4.60    NA  5.00     NA
samp9      4    NA    NA  3.50    NA  4.67  5.00   4.6    NA     NA
samp10     4     6  4.67  4.00    NA    NA  4.00    NA    NA    4.0

通过这种方式,我们可以看到预测是如何在森林中的N棵树上累积到给定迭代的。如果跨行读取,则最右边的非NA值是我在上面为OOB预测显示的值。这就是可以跟踪OOB性能的方式-可以基于在N棵树上累积的OOB预测为OOB样本计算RMSEP。

请注意,所示的R代码​​并非取自R 的randomForest程序包中的randomForest代码的内部-我只是敲了一些简单的代码,以便一旦确定了每棵树的预测后就可以进行后续操作。

因为每棵树都是从引导程序样本中构建的,并且随机森林中有大量树木,因此每个训练集观察值都在一个或多个树的OOB样本中,所以可以为所有树提供OOB预测训练数据中的样本。

我已经解决了一些OOB案例缺少数据等问题,但是这些问题也与单个回归树或分类树有关。还请注意,林中的每棵树仅使用mtry随机选择的变量。


好答案加文!当您撰写时"To get predictions for the OOB sample, each one is passed down the current tree and the rules for the tree followed until it arrives in a terminal node",您对这些内容有一个简单的解释rules for the tree吗?sample如果我了解样本是groups树木将数据划分到其中的观测值,我是否能正确理解行?
user1665355 2013年

@ user1665355我假设您了解如何构建回归树或分类树?RF中的树没有什么不同(也许在停止规则中除外)。每棵树将训练数据分为具有相似“值”的样本组,以用于响应。最能预测(即最小化“错误”)的变量和拆分位置(例如pH> 4.5)形成树中的第一个拆分或规则。然后依次考虑该拆分的每个分支,并确定新的拆分/规则,以最小化树的“错误”。这是二进制递归分区算法。分割是规则。
恢复莫妮卡-G.辛普森

@ user1665355是的,很抱歉,我来自一个样本为观察值的字段,该行位于数据集中。但是,当您开始谈论引导程序样本时,它是一组N个观测值,是从训练数据中替换而来的,因此具有N行或观测值。稍后,我将尝试清理术语。
恢复莫妮卡-G.辛普森

谢谢!我对RF非常陌生,因此可能对一些愚蠢的问题感到抱歉:)我想我几乎理解您所写的所有内容,很好的解释!我只是想知道最能预测(即最小化“错误”)的变量和拆分位置(例如pH> 4.5)形成树中的第一个拆分或规则……我不明白错误是什么。:/我正在阅读并试图理解http://www.ime.unicamp.br/~ra109078/PED/Data%20Minig%20with%20R/Data%20Mining%20with%20R.pdf。在第115-116页上,作者使用RF选择variable importance技术指标。
user1665355 2013年

“错误”取决于所安装的树的类型。偏差是连续(高斯)响应的常用度量。在rpart软件包中,基尼系数是分类响应的默认值,但是对于其他模型,还有其他系数。如果您要成功部署它,则应该对树和RF有所了解。变量不一致性度量是不同的-它们通过查看使用该变量适合树木和不使用该变量时发生了多少变化来度量数据集中每个变量的“重要性”。
恢复莫妮卡-G.辛普森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.