如何从caret :: predict()得到类概率和预测?

时间:2017-09-06 19:48:43

标签: r r-caret predict

除了预测类标签之外,是否可以在预测时返回新数据中每个观察的期望?

library(caret)
knnFit <- train(Species ~ ., data = iris, method = "knn", 
                trControl = trainControl(method = "cv", classProbs = TRUE))

x <- predict(knnFit, newdata = iris)

返回预测类的向量。

str(x)
Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

如果我想要概率:

x <- predict(knnFit, newdata = iris, type = "prob")
> head(x)
  setosa versicolor virginica
1      1          0         0
2      1          0         0
3      1          0         0
4      1          0         0
5      1          0         0
6      1          0         0

是否可以让插入符同时返回预测和概率?我知道我可以通过获取概率版本的max.col进行计算,但我想知道是否有内置的方法来获取两者?

1 个答案:

答案 0 :(得分:3)

我对答案做出评论。 生成概率预测表后,实际上并不需要运行两次预测函数来获取类。您可以通过应用简单的which.max函数(快速运行imo)来要求添加类列。这将根据哪个概率最高为每行分配列的名称(三个c("setosa", "versicolor", "virginica")中的一个)。

根据要求,您可以使用这两种信息获取此表:

library(dplyr)
predict(knnFit, newdata = iris, type = "prob") %>% 
  mutate('class'=names(.)[apply(., 1, which.max)])
# a random sample of the resulting table:
####     setosa versicolor virginica      class
#### 18       1  0.0000000 0.0000000     setosa
#### 64       0  0.6666667 0.3333333 versicolor
#### 90       0  1.0000000 0.0000000 versicolor
#### 121      0  0.0000000 1.0000000  virginica

ps:这使用来自dplyrmagrittr包裹的管道操作员。点.表示何时重用上一条指令的结果