如何从插入符号::predict()中获取类的概率和预测?

jhkqcmku  于 2023-04-09  发布在  其他
关注(0)|答案(2)|浏览(100)

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

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来计算,但我想知道是否有一种内置的方法可以同时获得两者?

dwbf0jvd

dwbf0jvd1#

我把我的评论变成了一个答案。一旦你生成了概率的预测表,你实际上不需要运行两次预测函数来获得类。你可以通过应用一个简单的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包中的管道操作符。

pdsfdshx

pdsfdshx2#

另一种解决方法:

#Generate class probabilities
y_val_probs = model.predict(x_val,return_proba = True)
#Get the list of classes from the predictor
classes = predictor.preproc.get_classes()
#convert probabilites to classes
y_val_pred = [classes[np.argmax(pred)] for pred in y_val_probs]

相关问题