sklearn:多 class 问题和报告的敏感性和特异性
sklearn: multi-class problem and reporting sensitivity and specificity
我有一个三 class 问题,我可以使用以下代码报告每个 class 的精确度和召回率:
from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))
这为我提供了 table 格式的 3 个 class 中的每一个的精确度和召回率。
我的问题是现在如何获得 3 个 classes 中每一个的敏感性和特异性?我查看了 sklearn.metrics,但没有找到任何报告敏感性和特异性的信息。
如果我们检查 help page for classification report:
Note that in binary classification, recall of the positive class is
also known as “sensitivity”; recall of the negative class is
“specificity”.
因此我们可以将每个 class 的 pred 转换为二进制,然后使用 precision_recall_fscore_support
.
的召回结果
举个例子:
from sklearn.metrics import classification_report
y_true = [0, 1, 2, 2, 2]
y_pred = [0, 0, 2, 2, 1]
target_names = ['class 0', 'class 1', 'class 2']
print(classification_report(y_true, y_pred, target_names=target_names))
看起来像:
precision recall f1-score support
class 0 0.50 1.00 0.67 1
class 1 0.00 0.00 0.00 1
class 2 1.00 0.67 0.80 3
accuracy 0.60 5
macro avg 0.50 0.56 0.49 5
weighted avg 0.70 0.60 0.61 5
使用 sklearn:
from sklearn.metrics import precision_recall_fscore_support
res = []
for l in [0,1,2]:
prec,recall,_,_ = precision_recall_fscore_support(np.array(y_true)==l,
np.array(y_pred)==l,
pos_label=True,average=None)
res.append([l,recall[0],recall[1]])
将结果放入数据框中:
pd.DataFrame(res,columns = ['class','sensitivity','specificity'])
class sensitivity specificity
0 0 0.75 1.000000
1 1 0.75 0.000000
2 2 1.00 0.666667
我有一个三 class 问题,我可以使用以下代码报告每个 class 的精确度和召回率:
from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))
这为我提供了 table 格式的 3 个 class 中的每一个的精确度和召回率。
我的问题是现在如何获得 3 个 classes 中每一个的敏感性和特异性?我查看了 sklearn.metrics,但没有找到任何报告敏感性和特异性的信息。
如果我们检查 help page for classification report:
Note that in binary classification, recall of the positive class is also known as “sensitivity”; recall of the negative class is “specificity”.
因此我们可以将每个 class 的 pred 转换为二进制,然后使用 precision_recall_fscore_support
.
举个例子:
from sklearn.metrics import classification_report
y_true = [0, 1, 2, 2, 2]
y_pred = [0, 0, 2, 2, 1]
target_names = ['class 0', 'class 1', 'class 2']
print(classification_report(y_true, y_pred, target_names=target_names))
看起来像:
precision recall f1-score support
class 0 0.50 1.00 0.67 1
class 1 0.00 0.00 0.00 1
class 2 1.00 0.67 0.80 3
accuracy 0.60 5
macro avg 0.50 0.56 0.49 5
weighted avg 0.70 0.60 0.61 5
使用 sklearn:
from sklearn.metrics import precision_recall_fscore_support
res = []
for l in [0,1,2]:
prec,recall,_,_ = precision_recall_fscore_support(np.array(y_true)==l,
np.array(y_pred)==l,
pos_label=True,average=None)
res.append([l,recall[0],recall[1]])
将结果放入数据框中:
pd.DataFrame(res,columns = ['class','sensitivity','specificity'])
class sensitivity specificity
0 0 0.75 1.000000
1 1 0.75 0.000000
2 2 1.00 0.666667