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

Roz*_*Roz 3 python classification scikit-learn supervised-learning

我有一个三类问题,我可以使用以下代码报告每个类的精确度和召回率:

from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))
Run Code Online (Sandbox Code Playgroud)

这为我提供了表格格式中 3 个类别中每一个类别的精确度和召回率。

我的问题是现在如何才能获得这 3 个类别中每一个类别的敏感性和特异性?我查看了 sklearn.metrics,没有找到任何报告敏感性和特异性的内容。

Stu*_*olf 7

如果我们检查分类报告的帮助页面

\n
\n

请注意,在二元分类中,正类的召回率\n也称为 \xe2\x80\x9csensitivity\xe2\x80\x9d;负类的回忆是\n\xe2\x80\x9c特异性\xe2\x80\x9d。

\n
\n

因此,我们可以将 pred 转换为每个类的二进制文件,然后使用 的召回结果precision_recall_fscore_support

\n

使用一个例子:

\n
from sklearn.metrics import classification_report\ny_true = [0, 1, 2, 2, 2]\ny_pred = [0, 0, 2, 2, 1]\ntarget_names = [\'class 0\', \'class 1\', \'class 2\']\nprint(classification_report(y_true, y_pred, target_names=target_names))\n
Run Code Online (Sandbox Code Playgroud)\n

好像:

\n
              precision    recall  f1-score   support\n\n     class 0       0.50      1.00      0.67         1\n     class 1       0.00      0.00      0.00         1\n     class 2       1.00      0.67      0.80         3\n\n    accuracy                           0.60         5\n   macro avg       0.50      0.56      0.49         5\nweighted avg       0.70      0.60      0.61         5\n
Run Code Online (Sandbox Code Playgroud)\n

使用sklearn:

\n
from sklearn.metrics import precision_recall_fscore_support\nres = []\nfor l in [0,1,2]:\n    prec,recall,_,_ = precision_recall_fscore_support(np.array(y_true)==l,\n                                                      np.array(y_pred)==l,\n                                                      pos_label=True,average=None)\n    res.append([l,recall[0],recall[1]])\n
Run Code Online (Sandbox Code Playgroud)\n

将结果放入数据框中:

\n
pd.DataFrame(res,columns = [\'class\',\'sensitivity\',\'specificity\'])\n\n    class   sensitivity specificity\n0   0   0.75    1.000000\n1   1   0.75    0.000000\n2   2   1.00    0.666667\n
Run Code Online (Sandbox Code Playgroud)\n