如何计算多类总体准确度、敏感性和特异性?

Posted

技术标签:

【中文标题】如何计算多类总体准确度、敏感性和特异性?【英文标题】:How to calculate multiclass overall accuracy, sensitivity and specificity? 【发布时间】:2019-09-02 06:16:18 【问题描述】:

谁能解释如何计算多类数据集的准确性、敏感性和特异性?

【问题讨论】:

【参考方案1】:

每个类的敏感度可以从其计算得到

TP/(TP+FN)

每个类的特异性可以从其计算出来

TN/(TN+FP)

有关概念和方程式的更多信息 http://en.wikipedia.org/wiki/Sensitivity_and_specificity

对于多类分类,您可以使用一对一的方法。

假设有三个类:C1、C2 和 C3

“TP of C1”是所有归类为C1的C1实例。

“TN of C1”是所有不属于C1的非C1实例。

“C1的FP”是所有归类为C1的非C1实例。

“C1的FN”是所有不属于C1的C1实例。

要查找 C2 或 C3 的这四个术语,您可以将 C1 替换为 C2 或 C3。

简单的一句话:

在 2x2 中,一旦您选择了一个类别为正面,另一个类别自动为负面。有 9 个类别,您基本上有 9 种不同的敏感性,这取决于您选择的 9 个类别中的哪一个为“积极”。您可以通过折叠为 2x2 来计算这些值,即 Class1 与 not-Class1,然后 Class2 与 not-Class2,依此类推。

示例:

我们得到了 7 种玻璃的混淆矩阵:

=== Confusion Matrix ===

  a  b  c  d  e  f  g   <-- classified as
 50 15  3  0  0  1  1 |  a = build wind float
 16 47  6  0  2  3  2 |  b = build wind non-float
  5  5  6  0  0  1  0 |  c = vehic wind float
  0  0  0  0  0  0  0 |  d = vehic wind non-float
  0  2  0  0 10  0  1 |  e = containers
  1  1  0  0  0  7  0 |  f = tableware
  3  2  0  0  0  1 23 |  g = headlamps

为每种类型的玻璃计算的真阳性率(敏感度),加上总体加权平均值:

=== Detailed Accuracy By Class ===

 TP Rate  FP Rate  Precision  Recall   F-Measure  MCC      ROC Area  PRC Area  Class
 0.714    0.174    0.667      0.714    0.690      0.532    0.806     0.667     build wind float
 0.618    0.181    0.653      0.618    0.635      0.443    0.768     0.606     build wind non-float
 0.353    0.046    0.400      0.353    0.375      0.325    0.766     0.251     vehic wind float
 0.000    0.000    0.000      0.000    0.000      0.000    ?         ?         vehic wind non-float
 0.769    0.010    0.833      0.769    0.800      0.788    0.872     0.575     containers
 0.778    0.029    0.538      0.778    0.636      0.629    0.930     0.527     tableware
 0.793    0.022    0.852      0.793    0.821      0.795    0.869     0.738     headlamps
 0.668    0.130    0.670      0.668    0.668      0.539    0.807     0.611     Weighted Avg.  

【讨论】:

查看结果,如果您选择不同的类作为阳性,性能明显不同。在这种情况下,选择作为整体绩效报告的正确方法是什么?【参考方案2】:

您可以从下面的链接打印分类报告,您将获得模型的整体准确性。

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report

计算多分类的敏感性和特异性

from sklearn.metrics import precision_recall_fscore_support
res = []
for l in [0,1,2,3]:
     prec,recall,_,_ = precision_recall_fscore_support(np.array(y_true)==l,
                                                  np.array(y_prediction)==l,
                                                  pos_label=True,average=None)
     res.append([l,recall[0],recall[1]])

pd.DataFrame(res,columns = ['class','sensitivity','specificity'])

【讨论】:

以上是关于如何计算多类总体准确度、敏感性和特异性?的主要内容,如果未能解决你的问题,请参考以下文章

AUC 评价指标详解,准确率(ACC),敏感性(sensitivity),特异性(specificity)计算 Python3TensorFlow2入门手册

如何从 sklearn gridsearchcv 获取敏感性和特异性(真阳性率和真阴性率)?

R语言编写自定义函数计算分类模型评估指标:准确度特异度敏感度PPVNPV数据数据为模型预测后的混淆矩阵比较多个分类模型分类性能(逻辑回归决策树随机森林支持向量机)

ROC曲线 大于阈值后如何计算HR

敏感性和特异性

sklearn:多类问题和报告敏感性和特异性