【发布时间】:2014-11-01 03:44:28
【问题描述】:
TL;DR:
我可以在原始文件中标记什么 randomForest 调用以避免重新运行 strong> predict 函数获取预测的分类概率,而不仅仅是可能的类别?
详情:
我正在使用randomForest 包。
我有一个类似的模型:
model <- randomForest(x=out.data[train.rows, feature.cols],
y=out.data[train.rows, response.col],
xtest=out.data[test.rows, feature.cols],
ytest=out.data[test.rows, response.col],
importance= TRUE)
其中out.data 是一个数据框,feature.cols 是数字和分类特征的混合,而response.col 是一个TRUE / FALSE 二进制变量,我将其强制输入factor 以便@ 987654332@ 模型会正确地将其视为分类。
一切运行良好,变量model 已正确返回给我。但是,我似乎找不到要传递给randomForest 函数的标志或参数,因此model 以TRUE 的概率 或FALSE。相反,我得到了简单的预测值。也就是说,如果我查看model$predicted,我会看到类似的内容:
FALSE
FALSE
TRUE
TRUE
FALSE
.
.
.
相反,我希望看到类似的内容:
FALSE TRUE
1 0.84 0.16
2 0.66 0.34
3 0.11 0.89
4 0.17 0.83
5 0.92 0.08
. . .
. . .
. . .
我可以得到以上,但为了做到这一点,我需要做一些类似的事情:
tmp <- predict(model, out.data[test.rows, feature.cols], "prob")
[test.rows 捕获模型测试期间使用的行号。此处未显示详细信息,但很简单,因为测试行 ID 会输出到 model。]
然后一切正常。 问题是模型很大,运行时间很长,甚至预测本身也需要一段时间。由于预测 应该 完全没有必要(我只是想在测试数据集上计算 ROC 曲线,应该已经计算过的数据集),我是希望跳过这一步。 我可以在原始文件中标记什么 randomForest 调用以避免重新运行 @ 987654345@ 功能?
【问题讨论】:
-
randomForest函数可用于任何类型的分析;这个问题可以从reproducible example 中受益,该reproducible example 准确地显示了您使用一些样本/代表性数据运行的内容。我想如果你只做predict(model, type="prob")它会更快。在这里,您需要从适合的模型中进行预测,因此无需传入newdata=参数。但是由于您没有提供任何测试方法,因此很难说这是否能解决您的问题。 -
所以你没有注意到随机森林对象的投票组件吗?文档中有很清楚的描述。
-
谢谢,@joran ...我认为“投票”可能只是表示概率。 (例如,如果观察者经历的 300 / 500 棵树投票“真”,那么它将给出 60% 的真值。)但是,这在统计上似乎并不“严格”,因为 IID 是由代理假设的。由于接近度和其他数据可用,我认为可以通过以某种方式调整权重来提取更精确的概率。我想这还没有完成。感谢您的确认!
-
你的评论让我觉得你应该花一些时间阅读一些关于随机森林的参考资料,尤其是 Breiman 的原始论文(参考 pckg 文档)。正如
votes的文档所述,比例是针对OOB(out of bag)投票,所以每个案例只在一个不在引导样本中的树上运行。关于 OOB 错误率的计算方式还有一些其他细微之处(请参阅oob.times),但votes中的内容相当严格...... -
...有一些关于 OOB 错误率的批评,但我再次建议阅读有关该主题的 RF 文献。
标签: r machine-learning random-forest predict