путаница в пакете каретки определяет положительный случай с несколькими классами - PullRequest
0 голосов
/ 11 декабря 2018

из документов 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 голосов
/ 13 декабря 2018

Похоже на неправильную интерпретацию.Бывает, что positive нигде не используется, когда есть более двух классов.Сначала caret:::confusionMatrix.default вызывают для некоторых "формальностей", а затем мы переходим к caret:::confusionMatrix.table.* * * * * positive * * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *1007* * * * *1007* *1007* * Как вы уже сказали, это не сложно сделать вручную.Для быстрого взгляда вы можете использовать просто

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

, где A и TRUE соответствуют положительному классу, а FALSE - всему остальному.

...