2015-04-05 15 views
9

我的回答是一個分類變量(一些字母),所以我在製作模型時使用了distribution ='multinomial',現在我想要預測回答並根據這些字母獲得輸出,而不是概率矩陣。在gbm多項式dist中,如何使用預測來獲得分類輸出?

但是,在predict(model, newdata, type='response')中,其概率與type='link'的結果相同。

有沒有辦法獲得分類輸出?

BST = gbm(V1~.,data=training,distribution='multinomial',n.trees=2000,interaction.depth=4,cv.folds=5,shrinkage=0.005) 

predBST = predict(BST,newdata=test,type='response') 
+0

如何挑選具有最高概率的反應如何? – 2015-04-05 07:30:15

回答

21

predict.gbm文檔,提到:

如果type = 「響應」 則GBM轉換回相同的比例作爲 結果。目前唯一的效果是返回 伯努利的概率和泊松的預期計數。對於 其他分配「響應」和「鏈接」返回相同。

你應該做的,如星建議,是選擇從產生predBST矩陣概率最高的響應,通過對從預測輸出矢量做apply(.., 1, which.max)。 這裏是與iris數據集的代碼示例:

library(gbm) 

data(iris) 

df <- iris[,-c(1)] # remove index 

df <- df[sample(nrow(df)),] # shuffle 

df.train <- df[1:100,] 
df.test <- df[101:150,] 

BST = gbm(Species~.,data=df.train, 
     distribution='multinomial', 
     n.trees=200, 
     interaction.depth=4, 
     #cv.folds=5, 
     shrinkage=0.005) 

predBST = predict(BST,n.trees=200, newdata=df.test,type='response') 

p.predBST <- apply(predBST, 1, which.max) 

> predBST[1:6,,] 
    setosa versicolor virginica 
[1,] 0.89010862 0.05501921 0.05487217 
[2,] 0.09370400 0.45616148 0.45013452 
[3,] 0.05476228 0.05968445 0.88555327 
[4,] 0.05452803 0.06006513 0.88540684 
[5,] 0.05393377 0.06735331 0.87871292 
[6,] 0.05416855 0.06548646 0.88034499 

> head(p.predBST) 
[1] 1 2 3 3 3 3 
+0

這真的很有幫助,非常感謝! – shavendy 2015-04-06 09:56:51

+0

如何接受和/或提高答案? :-) – desertnaut 2015-04-06 21:09:46

+0

sry聲譽太低無法贊成,謝謝:) – shavendy 2015-04-08 14:17:07