Відповіді:
Якщо ви прокладете визначення точності (він також називається позитивним прогнозним значенням PPV) і згадуєте (він також чутливість), ви побачите, що вони відносяться до одного класу, незалежному від будь-яких інших класів:
Нагадування або сенситивність - це частка випадків, правильно визначених як належність до класу c серед усіх випадків, які справді належать до класу c .
(З огляду на те, що у нас є випадок, який справді належить до " c ", яка ймовірність прогнозувати це правильно?)
Точність або позитивне прогнозне значення PPV - це частка випадків, правильно ідентифікованих як належність до класу c, серед усіх випадків, про які класифікатор стверджує, що вони належать до класу c .
Іншими словами, із тих випадків, за якими передбачається, що належать до класу c , яка частка дійсно належить до класу c ? (З огляду на передбачення " с ", яка ймовірність правильності?)
негативне передбачувальне значення NPV тих випадків, за якими передбачається, що вони не належать до класу c , яка частка дійсно не належить до класу c ? (З огляду на передбачення "не с ", яка ймовірність бути правильною?)
Таким чином, ви можете розрахувати точність і згадати для кожного свого заняття. Для таблиць плутанини з класом це діагональні елементи, розділені на суму рядків та стовпців відповідно:
Зменшуючи дані до примусового вибору (класифікації) і не записуючи, чи були "закриті дзвінки", ви отримуєте статистичні оцінки мінімальної інформації з мінімальною точністю, крім того, що таємно припускаєте дивну функцію корисності / втрати / вартості та використовуєте довільні пороги . Набагато краще було б використовувати максимальну інформацію, яка б включала ймовірність членства в класі, а не вимушений вибір.
Найпростіший спосіб - взагалі не використовувати confusion_matrix, Використовуйте klasification_report (), він дасть вам усе, що вам колись потрібно, ура!
Редагувати:
це формат confusion_matrix ():
[[TP, FN]
[FP, TN]]
І звіт про класифікацію дає все це
Якщо ви просто хочете отримати результат, моя порада буде не думати занадто багато і використовувати інструменти, які є у вашому розпорядженні. Ось як це можна зробити в Python;
import pandas as pd
from sklearn.metrics import classification_report
results = pd.DataFrame(
[[1, 1],
[1, 2],
[1, 3],
[2, 1],
[2, 2],
[2, 3],
[3, 1],
[3, 2],
[3, 3]], columns=['Expected', 'Predicted'])
print(results)
print()
print(classification_report(results['Expected'], results['Predicted']))
Щоб отримати наступний вихід
Expected Predicted
0 1 1
1 1 2
2 1 3
3 2 1
4 2 2
5 2 3
6 3 1
7 3 2
8 3 3
precision recall f1-score support
1 0.33 0.33 0.33 3
2 0.33 0.33 0.33 3
3 0.33 0.33 0.33 3
avg / total 0.33 0.33 0.33 9
Далі наводимо приклад матриці плутанини в багатьох класах, припускаючи, що мітки нашого класу - A, B і C
A / P A B C Сума
A 10 3 4 17
B 2 12 6 20
C 6 3 9 18
Сума 18 18 19 55
Тепер обчислюємо три значення для Precision і Recall кожне і називаємо їх Pa, Pb і Pc; і аналогічно Ra, Rb, Rc.
Ми знаємо точність = TP / (TP + FP), тому для Pa справжній позитивний буде фактичним A, прогнозованим як A, тобто 10, решта двох комірок у цьому стовпці, будь то B або C, роблять помилково позитивним. Тому
Pa = 10/18 = 0,55 Ra = 10/17 = 0,59
Тепер точність і відкликання для класу B - це Pb і Rb. Для класу B справжній позитивний фактичний B, прогнозований як B, тобто комірка, що містить значення 12, а решта двох комірок у цьому стовпчику роблять помилково позитивними, так
Pb = 12/18 = 0,67 Rb = 12/20 = 0,6
Аналогічно Pc = 9/19 = 0,47 Rc = 9/18 = 0,5
Загальна продуктивність класифікатора визначатиметься середньою точністю та середнім відкликанням. Для цього ми помножуємо значення точності для кожного класу на фактичну кількість примірників цього класу, потім додаємо їх і ділимо на загальну кількість примірників. Подібно до ,
Середня точність = (0,55 * 17 + 0,67 * 20 + 0,47 * 18) / 55 = 31,21 / 55 = 0,57 Avg Recall = (0,59 * 17 + 0,6 * 20 + 0,5 * 18) / 55 = 31,03 / 55 = 0,56
Я сподіваюся, що це допомагає