Функция perfcurve в Matlab ложно, утверждает AUC = 1, когда две записи явно ошибочно классифицированы для разумных значений отсечки. Если я запускаю одни и те же данные через матрицу путаницы с отсечкой 0,5, точность по праву ниже 1. MWE содержит данные из одной из моих складок. Я заметил проблему, потому что я видел идеальный auc с меньшей точностью, чем мои результаты.Функция Matlab perfcurve ложно утверждает ROC AUC = 1
Я использую Matlab 2016a и Ubuntu 16.4 64bit.
% These are the true classes in one of my test-set folds
classes = transpose([ones(1,9) 2*ones(1,7)])
% These are predictions from my classifier
% Class 1 is very well predicted
% Class 2 has two records predicted as class 1 with threshold 0.5
confidence = transpose([1.0 1.0 1.0 1.0 0.9999 1.0 1.0...
1.0 1.0 0.0 0.7694 0.0 0.9917 0.0 0.0269 0.002])
positiveClass = 1
% Nevertheless, the AUC yields a perfect 1
% I understand why X, Y, T have less values than classes and confidence
% Identical records are dealt with by one point on the ROC curve
[X,Y,T,AUC] = perfcurve(classes, confidence, positiveClass)
% The confusion matrix for comparison
threshold = 0.5
confus = confusionmat(classes,(confidence<threshold)+1)
accuracy = trace(confus)/sum(sum(confus))
Но Рух выполняет зачистку через обрезания в любом случае. Так что если вы посмотрите на выход X, Y и T на консоли, например: 0.9917 0.7694 – user7019377
@ user7019377 Он прокладывает все возможные обрезания и обнаруживает, что один из них имеет идеальное разделение, поэтому вы получаете AUC = 1. – Calimo
Пороги 0.9917 и 0.7694 в T, например, приведут к классификации этих примеров класса 2 как класс 1. Тем не менее Y говорит о совершенной TPR (специфичность), и X не говорит о FPR (отличная чувствительность). (Нажатый ввод слишком скоро случайно, не удается найти кнопку редактирования, так как я здесь новый.) – user7019377