1

我有一个关于从以下链接构建混淆矩阵的问题:Ranger Predicted Class Probability of each row in a data frame

例如,如果我有以下代码(如链接中的答案所述):

library(ranger)
library(caret)

idx = sample(nrow(iris),100)
data = iris
data$Species = factor(ifelse(data$Species=="versicolor",1,0))
Train_Set = data[idx,]
Test_Set = data[-idx,]

mdl <- ranger(Species ~ ., ,data=Train_Set,importance="impurity", save.memory = TRUE, probability=TRUE)
probabilities <- as.data.frame(predict(mdl, data = Test_Set,type='response', verbose = TRUE)$predictions)
max.col(probabilities) - 1

调用

confusionMatrix(table(Test_Set$Species, max.col(probabilities)-1))

产量:在此处输入图像描述

并且,使用这个

caret::confusionMatrix(table(max.col(probabilities) - 1,Test_Set$Species))

在此处输入图像描述

这是创建混淆矩阵的正确方法,因为灵敏度、特异性、ppv、npv 的值不同,因为 tp、tn、fp、fn 切换?

如果我要求正类为 1 而不是使用

caret::confusionMatrix(table(max.col(probabilities) - 1,Test_Set$Species), positive = '1')

我明白了在此处输入图像描述

所以,矩阵中的值是 tp = 13,tn = 36,fp = 0,fn = 1,对吗?

我对如何读取混淆矩阵的值感到困惑。

4

1 回答 1

1

我已经了解了混淆矩阵的构造以及更改类时条目的作用。

使用获得的第 0 类的混淆矩阵

caret::confusionMatrix(table(max.col(probabilities) - 1,Test_Set$Species), positive = '0')

和使用获得的第 1 类

caret::confusionMatrix(table(max.col(probabilities) - 1,Test_Set$Species), positive = '1')

是相同的,并且

在此处输入图像描述

在 0 类的情况下:tp = 36,tn = 13,fp = 1,fn = 0,在 1 类的情况下:tp = 13,tn = 36,fp = 0,fn = 1(tp 和tn 和 fp 和 fn 的切换)。

于 2020-04-29T13:35:22.700 回答