考虑这样的情况,标记数据的数量为 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.5714
和 acc_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
灵敏度是指测试正确检测异常事件的能力。为什么灵敏度如此之低,并且与如此高 (70%) 的准确度
acc_1
不同。此计算是否正确?各个类别的准确度和灵敏度之间有什么区别?
我的计算有错误吗?
最佳答案
你的计算是正确的。我认为,鉴于您的准确性相对较高,敏感性和特异性之间的不平衡才是让您感到困惑的地方。这是正常的,也是分类器的常见问题,尤其是当两个类之间没有均匀划分时。作为一个思想实验,想象一下你的分类器随意决定每个样本都被标记。这将为您提供 1400/1500 = 0.9333 的总体准确度,在您研究敏感性和特异性之前,这可能看起来非常好,而这一切都是由于类别大小的差异所致。
由于这一点,以及当您的灵敏度非常低时,准确度会很高,因此显示 F1 分数可能更具代表性:https://en.wikipedia.org/wiki/F1_score
关于matlab - 从混淆矩阵计算灵敏度和特异性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51513311/