如何在Python中的多类分类中计算Accuracy,FPR,FNR的平均值?

时间:2019-05-11 08:20:52

标签: python machine-learning multiclass-classification

我正在使用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 :(得分:0)

准确度是正确的预测总数除以预测总数。现在,假设您有一个数据集,其中包含测试集中的4个类的45个条目。

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)