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

假设有这样一种情况,标记为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.70Specificity = TN/(TN+FP) = 1100/(1100+300) = 0.78
  • 敏感性指的是测试正确检测异常事件的能力。为什么敏感性如此低,并且与准确率acc_1(70%)如此不同?

  • 这个计算是否正确?个体类别准确率与敏感性之间有什么区别?

我的计算是否有误?


回答:

你的计算是正确的。我认为敏感性和特异性之间的不平衡让你感到困惑,因为你的准确率相对较高。这是正常的,也是分类器的一个常见问题,特别是当两个类别之间没有均匀分布时。作为一个思想实验,想象一下你的分类器只是任意决定每个样本都被标记。这将给你一个总体准确率1400/1500 = 0.9333,这看起来非常好,直到你调查敏感性和特异性,一切都是由于类别大小差异造成的。

因此,由于敏感性非常低时准确率误导性地高,展示F1分数可能更具代表性:https://en.wikipedia.org/wiki/F1_score

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注