Как рассчитать среднее значение точности, FPR, FNR в мультиклассовой классификации в Python? - PullRequest
0 голосов
/ 11 мая 2019

Я работаю над многоклассовой классификацией в python (4 класса). Чтобы получить результаты каждого класса отдельно, я использовал следующий код:

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
cnf_matrix = cm
FP = cnf_matrix.sum(axis=0) - np.diag(cnf_matrix)  
FN = cnf_matrix.sum(axis=1) - np.diag(cnf_matrix)
TP = np.diag(cnf_matrix)
TN = cnf_matrix.sum() - (FP + FN + TP)

FP = FP.astype(float)
FN = FN.astype(float)
TP = TP.astype(float)
TN = TN.astype(float)

# Sensitivity, hit rate, recall, or true positive rate
TPR = TP/(TP+FN)
print('TPR : ',TPR)

# Specificity or true negative rate
TNR = TN/(TN+FP)
print('TNR : ',TNR)

# Precision or positive predictive value
PPV = TP/(TP+FP)
print('PPV : ',PPV)

# Fall out or false positive rate
FPR = FP/(FP+TN)
print('FPR : ',FPR)
# False negative rate
FNR = FN/(TP+FN)
print('FNR : ',FNR)
# Overall accuracy
ACC = (TP+TN)/(TP+FP+FN+TN)
print('ACC : ',ACC)

Я получил следующие результаты:

TPR :  [0.98398792 0.99999366 0.99905393 0.99999548]
TNR :  [0.99999211 0.99997989 1.         0.99773928]
PPV :  [0.99988488 0.99996832 1.         0.99810887]
FPR :  [7.89469529e-06 2.01061605e-05 0.00000000e+00 2.26072224e-03]
FNR :  [1.60120846e-02 6.33705530e-06 9.46073794e-04 4.52196090e-06]
ACC :  [0.99894952 0.99998524 0.99999754 0.99896674]

Теперь я хочу вычислить среднее значение каждой метрики ?! Должен ли я просто добавить четыре значения друг к другу, после этого разделить результаты на 4? например, для точности (ACC): (0.99894952 + 0.99998524 + 0.99999754 + 0.99896674) / 4? !! Или что мне делать именно? Помогите пожалуйста.

1 Ответ

0 голосов
/ 11 мая 2019

Точность - это общее количество правильных прогнозов, деленное на общее количество прогнозов. Теперь предположим, что у вас есть набор данных с 45 записями в наборе тестов с 4 классами.

class 1: 10 rows
class 2: 10 rows
class 3: 10 rows
class 4: 15 rows

Теперь для каждого класса точность равна

class 1: 1 (10/10)
class 2: 1 (10/10)
class 3: 1 (10/10)
class 4: 0.33 (5/15)

Теперь, если вы суммируете всю точность и разделите ее на 4, т.е. ваш подход, ответ будет 0.83.

Если вы суммируете общее количество правильных предсказаний, то есть 35 из 45, точность будет 35/45 = 0.77

Так что оба метода не одинаковы. Метод получения средней точности, т. Е. То, что вы делаете, будет работать, только если все классы сбалансированы, иначе это неправильный метод.

Вы должны рассчитать общее количество правильных прогнозов и разделить его на общее количество прогнозов, т.е. correct / (correct+wrong)

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