谁能解释如何计算多类数据集的准确性、敏感性和特异性?
2 回答
每个类别的敏感度可以从其计算
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.
您可以从下面的链接打印分类报告,您将获得模型的整体准确性。
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'])
