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

标签 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
  • 灵敏度是指测试正确检测异常事件的能力。为什么灵敏度如此之低,并且与如此高 (70%) 的准确度 acc_1 不同。

  • 此计算是否正确?各个类别的准确度和灵敏度之间有什么区别?

我的计算有错误吗?

最佳答案

你的计算是正确的。我认为,鉴于您的准确性相对较高,敏感性和特异性之间的不平衡才是让您感到困惑的地方。这是正常的,也是分类器的常见问题,尤其是当两个类之间没有均匀划分时。作为一个思想实验,想象一下你的分类器随意决定每个样本都被标记。这将为您提供 1400/1500 = 0.9333 的总体准确度,在您研究敏感性和特异性之前,这可能看起来非常好,而这一切都是由于类别大小的差异所致。

由于这一点,以及当您的灵敏度非常低时,准确度会很高,因此显示 F1 分数可能更具代表性:https://en.wikipedia.org/wiki/F1_score

关于matlab - 从混淆矩阵计算灵敏度和特异性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51513311/

相关文章:

matlab - 带动画的实时脚本

MATLAB 连接维度不等的矩阵

machine-learning - 训练错误——有什么意义?

opencv - 有没有办法检测中间的空心圆?

keras - 传递给 keras fit 生成器函数的每个 epoch 的步长值

Matlab 代码不会绘制函数的一部分

matlab - Frangi 滤波器用作边缘检测器

python - PCA 分析后的特征/变量重要性

machine-learning - 用于预测建模的地面真相和特征提取

math - 模型的预测概率与置信水平相同吗?