pROC multiclass.roc - одномерный регистр. Как рассчитывается AUC в этом случае? - PullRequest
1 голос
/ 08 июля 2019

Ясно, как работает метод Hand and Till (из вероятностей классов) в многомерном случае, и я проверил это по некоторому коду, который я написал.Т.е. я использовал задачу 3 класса и получаю тот же результат, что и pROC.Когда я преобразовываю задачу 3 класса в задачу 2 класса (объединяя 2 класса), я получаю те же результаты, что и pROC (все еще использующий multiclass.roc).Однако, когда я передаю multiclass.roc ответ с 3 классами, 3 уровнями, но только одним вектором вероятностей классов, я получаю другой результат.

Я знаю, что это обрабатывается по-другому;https://rdrr.io/cran/pROC/man/multiclass.html говорит: «Функция multiclass.roc может обрабатывать два типа наборов данных: одно- и многовариантные. В одномерном случае передается один вектор-предиктор и оцениваются все комбинации ответов».Однако я не смог найти объяснения тому, что здесь происходит.Очевидно, что это связано с количеством классов в ответе (поскольку это единственные другие данные), но мне было бы очень интересно узнать, что делает pROC в таком случае.

Вот мои результаты(Я написал AUC_mc):

pROC: одномерный класс 3: 0,8494, класс 3 против остальных (2 класс): 0,9118
AUC_mc: класс 3 против остальных (2 класс): 0,9118

pROC: одномерный класс 1: 0,9721, класс 1 против остальных (2 класс): 0,9693
AUC_mc: класс 1 против остальных (2 класс): 0,9692823

#
# Here the probabilities for only 1 class are passed to pROC.   
# When there are 2 classes in the domain that's fine  
# When there are 3 classes in the domain then I get a different result
#
roc = multiclass.roc(test.df$response, probabilities[,n], levels=levels(test.df$response))

PROC: 3класс: 0,9568
AUC_mc: 3 класс: 0,9567698

roc = multiclass.roc(test.df$response, probabilities[,], levels=levels(test.df$response))

Большое спасибо

1 Ответ

0 голосов
/ 17 июля 2019

В одномерном случае pROC проверяет все сравнения 1 к 1. Там нет 1 для остальных сравнений. Таким образом, для 3 классов у вас есть 3 кривых Рока: 1 против 2; 1 против 3; и 2 против 3.

Вы можете найти исходный код в мультиклассе. R :

rocs <- utils::combn(levels, 2, function(X, response, predictor, percent, ...) {
    roc(response, predictor, levels=X, percent=percent, auc=FALSE, ci=FALSE, ...)
[...]

Функция utils :: combn генерирует все комбинации элементов levels, взятых 2 одновременно.

Я постараюсь улучшить документацию, чтобы лучше отразить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...