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,没有找到任何报告敏感性和特异性的内容。
如果我们检查分类报告的帮助页面:
\n\n\n请注意,在二元分类中,正类的召回率\n也称为 \xe2\x80\x9csensitivity\xe2\x80\x9d;负类的回忆是\n\xe2\x80\x9c特异性\xe2\x80\x9d。
\n
因此,我们可以将 pred 转换为每个类的二进制文件,然后使用 的召回结果precision_recall_fscore_support。
使用一个例子:
\nfrom 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))\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n使用sklearn:
\nfrom 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]])\nRun Code Online (Sandbox Code Playgroud)\n将结果放入数据框中:
\npd.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\nRun Code Online (Sandbox Code Playgroud)\n