我正在学习ML中的一些自学知识,我正在尝试训练K-NN模型,我的模型给了我7X7以下的混淆矩阵。我已经手动计算了两类(A和B)的准确度,但不确定是否我的方法正确与否。我希望在那里的其他人确认我的结果,以便编写程序来计算其他5个类。
Confusion Matrx :
A B C D E F G = 7 classes
[[ 238 1 2 0 41 11 0]
[ 0 25 0 0 3 1 0]
[ 21 1 32 0 17 4 0]
[ 0 0 0 7 9 3 0]
[ 7 0 0 0 3633 8 0]
[ 44 0 4 1 397 256 1]
[ 4 0 0 0 7 2 3]]
Class-A
tp = 238
fp = 76 (Rest of the 'a' column e.g 21+0+7+44+4 = 76)
tn = 4414
[25 0 0 3 1 0]
[1 32 0 17 4 0]
[0 0 7 9 3 0]
[0 0 0 3633 8 0]
[0 4 1 397 256 1]
[0 0 0 7 2 3]
Sum of all elements will be true negative = 4414
fn = 55 (Rest of the 'a' rows element e.g 1+2+0+41+11+0 =55 )
So class-A confusion matrix will something look like below
tp fp | 238 76
|
fn tn | 55 4414
Class A Accuracy = tp+tn/tp+tn+fp+fn = 4652/4768 = 0.97
Class B
tp = 25
fp = 2
tn = 4752
[ 238 2 0 41 11 0]
[ 21 32 0 17 4 0]
[ 0 0 7 9 3 0]
[ 7 0 0 3633 8 0]
[ 44 4 1 397 256 1]
[ 4 0 0 7 2 3]
fn = 4
So class-B confusion matrix will something look like below
tp fp | 2 76
|
fn tn | 4 4752
Class B Accuracy = tp+tn/tp+tn+fp+fn = 4754/4834 = 0.98
我试图在线搜索,但没有找到超过2X2矩阵的计算结果。
答案 0 :(得分:2)
对于多类情况,可以使用:
import numpy as np
cnf_matrix = np.array([[13, 0, 0],
[ 0, 10, 6],
[ 0, 0, 9]])
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)
# Specificity or true negative rate
TNR = TN/(TN+FP)
# Precision or positive predictive value
PPV = TP/(TP+FP)
# Negative predictive value
NPV = TN/(TN+FN)
# Fall out or false positive rate
FPR = FP/(FP+TN)
# False negative rate
FNR = FN/(TP+FN)
# False discovery rate
FDR = FP/(TP+FP)
# Overall accuracy
ACC = (TP+TN)/(TP+FP+FN+TN)
代码背后的想法:下图中,针对通常情况下这些指标以图形方式表示,其中包含许多类。