在 gbm 多项式分布中,如何使用预测来获得分类输出? [复制]
Posted
技术标签:
【中文标题】在 gbm 多项式分布中,如何使用预测来获得分类输出? [复制]【英文标题】:In gbm multinomial dist, how to use predict to get categorical output? [duplicate] 【发布时间】:2015-06-09 21:11:51 【问题描述】:我的响应是一个分类变量(一些字母表),所以我在制作模型时使用了 distribution='multinomial',现在我想根据这些字母表预测响应并获得输出,而不是概率矩阵.
但是在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')
【问题讨论】:
如何选择概率最高的响应? 【参考方案1】:predict.gbm
文档中提到:
如果 type="response" 则 gbm 转换回与 结果。目前,这将产生的唯一影响是返回 伯努利的概率和泊松的预期计数。为了 其他分布“响应”和“链接”返回相同。
正如 Dominic 所建议的,您应该做的是,通过对预测的向量输出执行 apply(.., 1, which.max)
,从生成的 predBST
矩阵中选择概率最高的响应。
这是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
【讨论】:
这真的很有帮助,非常感谢! 并转换为可以使用的类标签:colnames(predBST)[p.predBST]
非常有帮助,谢谢!以上是关于在 gbm 多项式分布中,如何使用预测来获得分类输出? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在 R 中使用 gbm 进行梯度提升,分布 =“bernoulli”
如果我从 randomforest、gbm、svm、nnet 生成预测以获得更准确的预测,如何组合结果(预测)?