- 考虑一个二分类的情况,类别为1和0,我们将1和0分别作为正类(positive)和负类(negative),则实际分类的结果有4种,表格如下:
特异度(sensitivity):负例的召回率(所有没病的人中被诊断为没病的比例)
敏感度(specificity):正例的召回率(所有有病的人中被诊断为有病的比例)
假阳率(误诊率):假阳占全部负例的比例(所有没病的人种被诊断为有病的比例)
假阴率(漏诊率):假阴占全部正例的比例(所有有病的人中被诊断为无病的比例)
准确率(accuracy):正确分类的数目占总数目的比例(所有人中被正确诊断的比例,这个受测试集中正例和负例比例影响较大)
查准率(precision):正阳占预测为阳性的比例(所有被诊断为有病的人中诊断正确的比例)
平衡错误率 (balanced error rate):相当于取相同数目的正例和负例构成test dataset时的准确率,避免测试集中正负例的比例偏差
F1-分数:敏感度和特异度的调和平均
- ROC曲线(Receiver operating characteristic curve)和AUC
当改变预测概率的阈值时,上面的评估指标会改变,改变的情况可以评估分类器的综合性能。
横轴为FPR,即负样本中预测为正例的比例,纵轴为TPR,即正样本中预测为正例的比例。当阈值为0时,这两个值都是1,当阈值为1时,这两个值都是0.如果曲线为y=x,则相当于随机猜测的效果。如果曲线在y=x上方,则正样本预测对的比例高于负样本预测错的比例,即好于随机猜测;否则比随机猜测还差。
曲线底下的面积为AUC(Area under ROC),取值区间为[0, 1]。
利用ROC曲线选择能达到曲线左上角效果的阈值作为分类阈值。
- 多分类问题
针对多分类问题,参考https://blog.csdn.net/Findingxu/article/details/99674822中的代码进行计算,
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
avg / total 0.70 0.60 0.61 5