如何将随机森林预测概率转换为单个分类响应?

时间:2017-07-19 21:34:59

标签: r random-forest prediction

我有许多大的随机森林分类模型(每个运行时间约60分钟),用于使用类型=" prob"预测光栅。选项。我很满意光栅输出(每个x类作为光栅堆栈的概率)。但是,我想要一种简单的方法来将这些概率(具有x层的光栅堆栈,其中x是类的数量)转换为简单的一层分类(即仅获胜者,没有概率)。这相当于type =" response"。

这是一个简单的例子(不是栅格,但仍然适用):

library(randomForest)
data(iris)
set.seed(111)
ind <- sample(2, nrow(iris), replace = TRUE, prob=c(0.8, 0.2))
iris.rf <- randomForest(Species ~ ., data=iris[ind == 1,])
iris.prob <- predict(iris.rf, type="prob")
iris.resp <- predict(iris.rf, type="response")

使用iris.prob对象获取iris.resp的等效输出而不重新运行randomforests(在我的情况下使用许多大型栅格,需要花费太多时间)的最有效方法是什么?

提前致谢

2 个答案:

答案 0 :(得分:1)

如果您尝试确定多列的最大值,使用与iris.prob相同的通用格式,我会尝试从每行中找到最大值并返回colname。

colnames(iris.prob)[max.col(iris.prob,ties.method="first")]

another thread获得确切用法,如果这不起作用,您可以尝试其他回复

答案 1 :(得分:1)

iris.prob应包含分类结果,并将一个观察值分类在一个类别中。所以你只需要提取每行最大值的colname。

例如: iris.resp2 = colnames(iris.prob)[apply(iris.prob,1,which.max)]

iris.resp2 == as.character(iris.resp)应该每次都返回TRUE