python - 如何在 Python 中计算多类分类中的 Accuracy、FPR、FNR 的平均值?
问题描述
我正在研究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 ?!! 或者我应该怎么做?请帮忙。
解决方案
准确率是正确预测总数除以预测总数。现在假设您有一个包含 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
。
如果将正确预测的总数相加,即 45 个中的 35 个,则准确度为35/45 = 0.77
所以两种方法都不一样。取平均准确率的方法,即你正在做的事情只有在所有类都平衡的情况下才有效,否则它是错误的方法。
您应该计算正确预测的总数并将其除以预测总数,即correct / (correct+wrong)
推荐阅读
- java - java.io.IOException:异步 http 客户端调用的对等错误重置连接
- mysql - 如何知道是否曾经在表中插入过一行
- php - 权限用户和角色
- protractor - isEnabled() 函数在量角器中不起作用
- hybris - 在 WCMS/catalog (hybris) 上看不到 mystore 目录
- javascript - 在 Js 文件中导入 jQuery 插件
- r - 对具有许多列条件的数据框进行子集化
- google-assistant-sdk - 我可以在没有树莓派的情况下在 python 程序中使用谷歌助手库吗?
- xamarin.forms - Xamarin.Forms 中的 MasterDetailPage 已更改?
- javascript - Javascript async await with Promise all 并获取返回的 [object promise]