【问题标题】:caret: using random forest and include cross-validation插入符号:使用随机森林并包括交叉验证
【发布时间】:2015-06-15 05:30:08
【问题描述】:
我使用 caret 包训练了一个随机森林,包括重复的交叉验证。我想知道是否使用了如 Breiman 的原始 RF 中的 OOB,或者它是否被交叉验证所取代。如果它被替换,我是否具有与 Breiman 2001 中描述的相同的优势,例如通过减少输入数据之间的相关性来提高准确性?由于 OOB 是带替换绘制的,而 CV 是不带替换绘制的,这两个过程是否具有可比性?错误率的OOB估计是多少(基于CV)?
树木是如何生长的?是否使用了 CART?
由于这是我的第一个主题,如果您需要更多详细信息,请告诉我。非常感谢。
【问题讨论】:
标签:
random-forest
cross-validation
r-caret
【解决方案1】:
我最近也对此感到有些困惑,但阅读 Max Kuhn 的应用预测建模中的第 4 章帮助我理解了其中的区别。
如果您在 R 中使用 randomForest,您可以通过对 N 个带放回的案例进行抽样来增长许多决策树(N 是训练集中的案例数)。然后,您在 m 小于预测变量数的每个节点对 m 个变量进行采样。然后每棵树都完全生长,并且根据该节点中的案例模式将终端节点分配给一个类。新病例通过将它们发送到所有树上然后进行投票来分类;多数票获胜。
这里要注意的重点是:
如果你在 R 中使用 caret,你通常会使用 caret::train(....) 并将方法指定为 "rf" 和 trControl="repeatedcv"。如果您想摆脱困境,可以将 trControl 更改为“oob”。其工作方式如下(我将使用 10 倍 cv 重复 5 次的简单示例):训练数据集被分成大小大致相等的 10 倍,将仅使用 9 次构建许多树样本 - 所以省略了第一个折叠(被保留)。通过在树中运行案例来预测保留的样本,并用于估计绩效指标。第一个子集返回到训练集,并在保留第二个子集的情况下重复该过程,依此类推。该过程重复 10 次。整个过程可以重复多次(在我的示例中,我这样做了 5 次);对于 5 次运行中的每一次,训练数据集被分成 10 个略有不同的折叠。需要注意的是,我们使用了50个不同的保留样本来计算模型功效。
需要注意的关键点是:
您正在使用 2 种不同的重采样技术,它们会产生不同的结果,因此它们不具有可比性。 k 倍重复的 cv 往往具有低偏差(对于 k 大);其中 k 为 2 或 3,偏差很高,与 bootstrap 方法相当。 K fold cv 往往具有高方差...
【解决方案2】:
这里有很多基本问题,最好阅读一本关于机器学习或预测建模的书。这可能是你没有得到太多回应的原因。
对于caret,您还应该咨询package website,其中部分问题已得到解答。
这里有一些注意事项:
- RF 的 CV 和 OOB 估计有些不同。 This post 可能有助于解释如何。对于此应用程序,在构建模型时计算随机森林的 OOB 率,而 CV 使用在计算随机森林模型后预测的保留样本。
- 原始随机森林模型(此处使用)使用未修剪的 CART 树。同样,这是在许多教科书和论文中。
最大