这可以使用“多类 ROC 曲线”来完成(参见例如this answer 了解更多详细信息)。通常,您要么单独查看每个类,甚至单独查看每对类。我将提供一个简短的R 示例来说明第一个类的外观,它不那么复杂,但仍然可以很好地了解各个类的识别效果。
你首先需要获得一些类概率(为了重现性,这是你已经拥有的):
# Computing some class probabilities for a 3 class problem using repeated cross validation
library(caret)
model <- train(x = iris[,1:2], y = iris[,5], method = 'svmLinear', trControl = trainControl(method = 'repeatedcv', number = 10, repeats = 10, classProbs = T, savePredictions = T))
# those are the class probabilities for each sample
> model$pred
pred obs setosa versicolor virginica rowIndex C Resample
[...]
11 virginica virginica 1.202911e-02 0.411723759 0.57624713 116 1 Fold01.Rep01
12 versicolor virginica 4.970032e-02 0.692146087 0.25815359 122 1 Fold01.Rep01
13 virginica virginica 5.258769e-03 0.310586094 0.68415514 125 1 Fold01.Rep01
14 virginica virginica 4.321882e-05 0.202372698 0.79758408 131 1 Fold01.Rep01
15 versicolor virginica 1.057353e-03 0.559993337 0.43894931 147 1 Fold01.Rep01
[...]
现在您可以单独查看每个类别的 ROC 曲线。对于每条曲线,FRR 表示该类的样本被预测为其他类样本的频率,而FAR 表示一些样本的频率其他类被预测为该类的样本:
plot(roc(predictor = model$pred$setosa, response = model$pred$obs=='setosa'), xlab = 'FAR', ylab = '1-FRR')
plot(roc(predictor = model$pred$versicolor, response = model$pred$obs=='versicolor'), add=T, col=2)
plot(roc(predictor = model$pred$virginica, response = model$pred$obs=='virginica'), add=T, col=3)
legend('bottomright', legend = c('setosa', 'versicolor', 'virginica'), col=1:3, lty=1)
如前所述,您还可以查看每对类的 ROC 曲线,但恕我直言,这会传输更多信息,因此掌握包含的信息更复杂/需要更长的时间.