我正在研究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)