2015-04-05 64 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