2017-07-19 210 views
0

我有许多大的随机森林分类模型(每个~60分钟的运行时间),用于使用type =“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(在我的情况下,与许多大型栅格,将花费太多时间)?

在此先感谢

+0

一旦您运行了'iris.rf','predict'功能就不需要您重新运行该模型。一旦模型运行,预测速度应该更快,因为它们只是使用模型的输出来计算概率或响应。你是否试图找出运行预测的最有效方法是什么?或者你是否正试图弄清楚如何从'type =“prob”''中得到相同的值,以便从'type =“response”'中获取? –

+0

是的,我同意。但是我没有访问模型(iris.rf) - 只有输出概率(iris.prob)。需要一种简单的方法将概率对象转换为单个分类对象 – treetopdewdrop

+0

好的,所以有人已经运行了模型以及'iris.prob',并且您试图在不运行模型的情况下复制'iris.resp'?我知道运行该模型需要花费很多小时,而我只是试图找出问题 –

回答

1

如果你正在试图确定多个列的最大,具有相同的一般格式为iris.prob我会试着从每行最大并返回colname的。

​​

得到了确切的使用率从another thread所以如果这是行不通的,你可以尝试另一种反应

1

iris.prob应该包含的分类结果,与一个观察归入一个类别的概率。所以你只需要提取每行最大值的colname。

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

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

+0

谢谢,这是一般的想法。但是,这种方法在大型栅格堆栈上非常缓慢。试图最大限度地提高效率。 – treetopdewdrop

+0

嗯...所以我不知道我能帮忙,它已经非常优化,因为它只是在已经计算好的矩阵和向量上以向量化的方式使用内置函数!我的意思是对于具有1M行和100列的723 Mb矩阵,我的计算机上的时间少于5秒。我希望你能找到答案;)!祝你好运 – kdallaporta