准确率Precision&召回率Recall
from sklearn.metrics import precision_recall_curve
precision, recall, thresholds = precision_recall_curve(gt_mask.flatten(), scores.flatten())
混淆矩阵:
实际 | 预测 | |
正 | 负 | |
正 | TP(真正类) | FN(假负类) |
负 | FP(假正类) | TN(真负类) |
precision=tp / (tp + fp):准确率,正类预测为正类占所有预测正类的比例。
recall=tp / (tp + fn):召回率,也就是tpr,正类预测为正类占所有正类的比例。
所以二者不可能都高,需要找一个平衡点,找平衡点需要做PRC曲线,横轴recall,纵轴precision。F1就是这个常见的平衡点指标(2*precision*recall/(precision+recall))。
ROCAUC
roc
from sklearn.metrics import roc_curve
fpr, tpr, thresholds = roc_curve(gt_list, img_scores)
参数:标签,评价分数(也就是每个样本预测为正的概率),正样本标签(默认是0)。返回结果:fpr,tpr,thresholds。
fpr:负正类率,负类预测为正类占所有负类的比例。
tpr:真正类率,正类预测为正类占所有正类的比例。
threshold:阈值
auc
from sklearn.metrics import roc_auc_score
img_roc_auc = roc_auc_score(gt_list, img_scores)
结果是怎么来的
threshold是每个样本的评价分数,也就是每个样本预测为正的概率值,概率值有了,那这个样本是把他定为正样本还是负样本呢。所以规定,当threshold取其中一个样本的概率值时,大于这个threshold的概率值定义为正类,小于则定义为负类,由此稍微推理一下,threshold越小,fpr,tpr也越大,threshold越大,fpr,tpr越小。这样,将所有样本的概率值都做一遍阈值,以fpr横轴,tpr竖轴的曲线得以绘制,即roc曲线。
auc就是roc曲线下的面积,由上述所知,auc当然越接近1越好咯。
参考
ROC曲线与AUC计算总结_饕餮争锋的博客-CSDN博客_roc曲线与aucsklearn中绘制 ROC 曲线的函数 roc_curve() 解释_Stephen__W的博客-CSDN博客_roc_curveROC曲线和AUC面积理解_Microstrong0305的博客-CSDN博客_auc曲线AUC详解_ac7的博客-CSDN博客_auc详解
其他评价指标
参考
precision,recall and precision-recall curve_tangzy_的博客-CSDN博客