8

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

在此处输入图像描述

4

2 回答 2

6

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

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.  
于 2020-04-11T06:01:48.203 回答
0

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

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'])
于 2021-12-22T18:19:59.330 回答