从混淆矩阵计算灵敏度和特异性

时间:2018-07-25 07:35:30

标签: matlab machine-learning classification

考虑标记数据的数量为0 = 1400且标记为1 = 100的情况。标记为0的数据表示正常操作条件,标记为1的数据表示异常。仅针对异常事件才触发警报。

假设针对二进制分类获得了以下混淆矩阵

cmMatrix = 

                    predicted 0  predicted 1
           truth 0    1100 (TN)      300 (FP)
           truth 1    30 (FN)         70 (TP)


cmMatrix = [1100,300;30,70];
acc_0  = 100*(cmMatrix(1,1))/sum(cmMatrix(1,:));
acc_1  = 100*(cmMatrix(2,2))/sum(cmMatrix(2,:));

将给出acc_0 = 78.5714acc_1 = 70

从1400个正常事件中读取混乱矩阵,将1100个正确识别为正常,将300个错误识别为异常。 然后,在100个异常事件中,有70个被正确检测为异常,而30个被错误检测为异常。 我想计算第1类的灵敏度和特异性,因为这是异常事件检测中的主要关注点。这就是我的做法

Sensitivity = TP/(TP+FN) = 70/(70+30 ) = 0.70
Specificity = TN/(TN+FP) = 1100/(1100+300) = 0.78
  • 灵敏度是指测试正确检测异常事件的能力。为什么灵敏度如此之低并且与精度acc_1如此之高(70%)不同。

  • 此计算正确吗?各个班级的准确性和敏感性之间有何区别?

我在计算中是否犯了错误?

1 个答案:

答案 0 :(得分:2)

您的计算是正确的。我认为灵敏度和特异性之间的不平衡会令您感到困惑,因为您的准确性相对较高。这是正常现象,并且是分类器的常见问题,尤其是当两个类之间没有平均分配时。作为一个思想实验,假设您的分类器是任意决定每个样本都被标记的。这将使您总体获得1400/1500 = 0.9333的准确性,在您调查敏感性和特异性之前,这可能看起来非常好,这全都归因于类大小的差异。

因此,当您的灵敏度非常低时,准确性会令人误解,因此显示F1分数可能更具代表性:https://en.wikipedia.org/wiki/F1_score