插入符号包混淆矩阵定义具有多个类的肯定案例

时间:2018-12-10 23:17:42

标签: r classification r-caret

来自caret :: confusionMatrix的文档:

positive: an optional character string for the factor level that
corresponds to a "positive" result (if that makes sense for your
data). If there are only two factor levels, the first level will
be used as the "positive" result.

这听起来可能有可能在多类问题中定义一个肯定的案例,并因此获得一个经典的二进制混淆矩阵,其中包含正(定义的类)与负(所有其他类)。但是,在多类数据上使用正属性时,它不会更改confusionMatrix的输出。

# generate fake data
data = data.frame(measured=as.factor(rep(c('A', 'B', 'C'), c(30,40,30))),
    modeled=as.factor(rep(c('A', 'B', 'C', 'A'), c(30,10,20,40))))

# get confusion matrix
matrix = caret::confusionMatrix(data$modeled, dat$measured, positive='A')

给予

Confusion Matrix and Statistics

          Reference
Prediction  A  B  C
         A 30 10 30
         B  0 10  0
         C  0 20  0

Overall Statistics

               Accuracy : 0.4             
                 95% CI : (0.3033, 0.5028)
    No Information Rate : 0.4             
    P-Value [Acc > NIR] : 0.5379          

                  Kappa : 0.1304          
 Mcnemar's Test P-Value : 5.878e-13       

Statistics by Class:

                     Class: A Class: B Class: C
Sensitivity            1.0000   0.2500   0.0000
Specificity            0.4286   1.0000   0.7143
Pos Pred Value         0.4286   1.0000   0.0000
Neg Pred Value         1.0000   0.6667   0.6250
Prevalence             0.3000   0.4000   0.3000
Detection Rate         0.3000   0.1000   0.0000
Detection Prevalence   0.7000   0.1000   0.2000
Balanced Accuracy      0.7143   0.6250   0.3571

我只是误解了文档,还是真的有一种获取二进制矩阵的方法? 我知道,我可以自己产生所需的输出,但是如果有偷懒的机会,我会接受的。

1 个答案:

答案 0 :(得分:1)

看起来像是一种误解。碰巧有两个以上类时,positive不会在任何地方使用。首先,我们要求caret:::confusionMatrix.default进行一些“手续”,然后转到caret:::confusionMatrix.table。当有两个类时,positive会被多次使用,但在if情况下没有其他用途。

正如您所说,手工实现并不难。快速浏览,您可以简单地使用

table(data.frame(data == "A"))
#         modeled
# measured FALSE TRUE
#    FALSE    30   40
#    TRUE      0   30

其中ATRUE对应于肯定类别,FALSE对应于其他所有类别。