Вопрос1) Правильна ли моя формула для точности каждого класса?
Нет, вы используете формулу для Чувствительность (Напомним). См. Ниже.
Для расчета точности каждого отдельного класса, скажем, для положительного класса, я должен взять TP в числителе. Аналогично, для точности только отрицательного класса я должен учитывать TN в числителе в формуле для точности. Применима ли эта же формула к бинарной классификации? Правильно ли реализована моя реализация?
Точность - это отношение количества правильно классифицированных экземпляров к общему количеству экземпляров. TN, или число экземпляров, правильно определенных как , а не , находящихся в классе, также являются правильно классифицированными экземплярами. Вы не можете просто оставить их.
Точность также обычно используется только для оценки всего классификатора для всех классов, а не отдельных классов. Однако вы можете обобщить формулу точности для обработки отдельных классов, как это сделано здесь для вычисления средней точности классификации для мультиклассового классификатора. (См. Также ссылочную статью .)
Формула, которую они используют для каждого класса:
Как видите, она идентична обычной формуле точности, но мы учитываем только оценки TP и TN отдельного класса (знаменатель по-прежнему является общим числом наблюдений). Применяя это к вашему набору данных, мы получим:
acc_1 = (2000+3966)/(2000+34+0+3966) = 0.99433
acc_2 = (1966+4000)/(1966+0+34+4000) = 0.99433
acc_3 = (2000+4000)/(2000+0+0+4000) = 1.00000
Это, по крайней мере, имеет более интуитивный смысл, поскольку первые два класса имели неправильно классифицированные экземпляры, а третий - нет. Являются ли эти меры полезными - это другой вопрос.
Вопрос2) Правильна ли моя формула чувствительности?
Да, чувствительность задается как:
TP / TP+FN
, что представляет собой отношение правильно идентифицированных экземпляров как находящихся в этом классе к общему количеству экземпляров в классе . В двоичном классификаторе вы по умолчанию вычисляете чувствительность для положительного класса. Чувствительность к отрицательному классу - это уровень ошибок (также называемый ошибкой или ошибочно-отрицательным уровнем в статье в Википедии) и просто:
FN / TP+FN === 1 - Sensitivity
FN - не более чем TP для отрицательного класса! (Значение TP также обращено вспять.) Поэтому естественно распространить это на все классы, как вы сделали.
Тогда почему я получаю тот же ответ, что и точность отдельных классов?
Поскольку вы используете одну и ту же формулу для обоих.
Посмотрите на свою матрицу путаницы:
cm_matrix =
predict_class1 predict_class2 predict_class3
______________ ______________ ______________
Actual_class1 2000 0 0
Actual_class2 34 1966 0
Actual_class3 0 0 2000
TP для класса 1, очевидно, 2000
cm_matrix(1,1)
FN - сумма двух других столбцов в этой строке. Поэтому TP + FN - это сумма строки 1
sum(cm_matrix(1,:)
. Именно эту формулу вы использовали для точности.
acc_1 = 100*(cm_matrix(1,1))/sum(cm_matrix(1,:)) = 100*(2000)/(2000+0+0) = 100