2017-07-19 213 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