Рассмотрим задачу классификации трех классов со следующей матрицей путаницы.
cm_matrix =
predict_class1 predict_class2 predict_class3
______________ ______________ ______________
Actual_class1 2000 0 0
Actual_class2 34 1966 0
Actual_class3 0 0 2000
Multi-Class Confusion Matrix Output
TruePositive FalsePositive FalseNegative TrueNegative
____________ _____________ _____________ ____________
Actual_class1 2000 34 0 3966
Actual_class2 1966 0 34 4000
Actual_class3 2000 0 0 4000
Формула, которую я использовал:
Accuracy Of Each class=(TP ./total instances of that class)
(формула, основанная на ответе здесь: Путаница при расчете точности отдельного класса)
Sensitivity=TP./TP+FN ;
Реализация этого в Matlab:
acc_1 = 100*(cm_matrix(1,1))/sum(cm_matrix(1,:)) = 100*(2000)/(2000+0+0) = 100
acc_2 = 100*(cm_matrix(2,2))/sum(cm_matrix(2,:)) = 100*(1966)/(34+1966+0) = 98.3
acc_3 = 100*(cm_matrix(3,3))/sum(cm_matrix(3,:)) = 100*(2000)/(0+0+2000) = 100
sensitivity_1 = 2000/(2000+0)=1 = acc_1
sensitivity_2 = 1966/(1966+34) = 98.3 = acc_2
sensitivity_3 = 2000/2000 = 1 = acc_3
Вопрос1) Верна ли моя формула для точности каждого класса? Для расчета точности каждого отдельного класса, скажем, для положительного класса, я должен взять TP в числителе. Точно так же для точности только отрицательного класса я должен учитывать TN в числителе в формуле для точности. Применима ли та же формула к бинарной классификации? Правильно ли моя реализация?
Вопрос2) Верна ли моя формула для определения чувствительности? Тогда почему я получаю тот же ответ, что и точность отдельных классов?
TN
, но для точности отдельного класса не должно бытьTN
, насколько я понимаю. Должно быть, я ошибся с формулой чувствительности отдельных классов для случая многоклассовой классификации. - person Sm1   schedule 17.03.2020TP+TN / TP+TN+FP+FN
. - person beaker   schedule 17.03.2020number of correct prediction / total samples
. Если нужно рассчитать точность отдельных классов, то, возможно, следует учитывать только:number of correct prediction for class1/number of samples in class
Аналогично для других классов. Я думаю, что эту формулу можно распространить на случай с несколькими классами, поскольку я наконец нашел набор инструментов. Но в этом наборе инструментов есть две проблемы: mathworks.com/matlabcentral /обмен файлами/ - person Sm1   schedule 18.03.2020switch case
под функциейgetvalues
формулу для расчета точности отдельного класса: естьfor loop
и эти переменные используютсяRefereceResult.AccuracyOfSingle=(TP ./ P)' = TP/TP+FN
; и другая точностьaccuracy=(TP)./(P+N);
Так что знаменатель другой. Я не знаю почему. (2) Формула для чувствительности приведена та же, что и для точности. - person Sm1   schedule 18.03.2020TP/TP+FN
— отзыв. Я понятия не имею, почему случайный интернет-парень назвал это точностью. - person beaker   schedule 18.03.2020