深度学习的性能评价指标---图像分类的评价指标

图像分类的评价指标

    图像分类的概念:是一个模式分类的问题,将不同的图像(注意单位,是一张图像,最后理解的如手写体的图像集)划分到不同的类别、单标签分类问题就是每一张图都有唯一的类别;

    单标签分类的评价指标有:准确率(Accuracy),精确率(Precision),召回率(Recall),F1-score,混淆矩阵,ROC曲线和AUC;

 在计算这些指标之前,需要先计算几个基本的指标:

TP:正样本且分类为正样本的数目为(True Positive)

FN:标签为正样本分类为负样本的数目(Flase Negative)

FP:标签是负样本分类为正样本的数目(Flase Positive)

TN:标签是负样本且分类为负样本的数目(True Negative)

总结出来,如下表所示:

4个基本指标和评价指标的关系:

首先主要看以下四个评价指标(准确率(Accuracy),精确率(Precision),召回率(Recall),F1-score)和上面4个基本指标的关系

准确率(Accuracy)、精确率(Precision)和召回率(Recall)

 

 一些和准确率和召回率指标相关的解释:

1)准确率(Accuracy)中的TOP-1和TOP-5

 2)精确率(Precision)和召回率(Recall)的关系及PR曲线

      召回率越高,精确率越低。例如概率阈值T的影响(概率阈值T是一个设定的在【0,1】范围的值,使用该值判断网络预测出的结果是正类还是负类),当T小,导致召回率的升高,分类精确度下降,当T大,精确度升高,召回率降低。如果样本中包含很多的类,那么预测类别就输预测概率最大的那一类。

       精确率(Precision)和召回率(Recall)共同组成的曲线是PR曲线。PR曲线中的P代表的是precision(精准率),R代表的是recall(召回率),其代表的是精准率与召回率的关系,一般情况下,将recall设置为横坐标,precision设置为纵坐标。

      PR曲线功能说明:一条PR曲线要对应一个阈值(统计学的概率)。通过选择合适的阈值(比如K%)对样本进行合理的划分,概率大于K%的样本为正例,小于K%的样本为负例,样本分类完成后计算相应的精准率和召回率,最后我们会得到对应关系,如下图所示。

曲线越靠近右上角说明性能越好,可以根据曲线和坐标轴包围的面积来定量评估 

 

 F1-score:

 举例:

      F1-score的作用:在众多学习器对数据进行学习后,如果其中一个学习器的PR曲线A完全包住另一个学习器B的PR曲线,则可断言A的性能优于B。但是A和B发生交叉,那性能该如何判断呢?我们可以根据曲线下方的面积大小来进行比较,但更常用的是平衡点F1。平衡点(BEP)是P=R时的取值(斜率为1),F1值越大,我们可以认为该学习器的性能较好。

混淆矩阵

     功能当想知道类别之间相互误分的情况,就是查看是否有特定的类别相互混淆,就可以绘制混淆矩阵画出分类的详细预测结果。对于包含多个类别的任务,混淆矩阵很清晰的反应了各个类别之间错分概率;其实就是把所有类别的预测结果与真实结果按类别放置到了同一个表里,在这个表格中我们可以清楚看到每个类别正确识别的数量和错误识别的数量。

假设有n个类别,混淆矩阵的大小为n*n

    混淆矩阵可以清晰的反映出真实值与预测值相互吻合的部分,也可以反映出与预测值不吻合的部分,越好的分类器,混淆矩阵对角线上的值越大。

可以参考博文中对混淆矩阵的解释,例子比较不错

机器学习之混淆矩阵

ROC曲线和AUC:

   准确率(Accuracy),精确率(Precision),召回率(Recall),F1-score都是单一数值指标,如果我们想观察分类算法在不同参数的表现,可以用一条曲线表示ROC曲线;ROC曲线可以评价一个分类器在不同阈值T下的表现。

   ROC曲线的横坐标是FPR(Flase Positive Rate),纵坐标是TPR(True Positive Rate)

  TPR=TP/(TP+FN):代表分类器预测正类中,实际正实例占所有正实例的比例

  FPR=FP/(FP+TN):代表分类器预测正类中,实际负实例占所有负实例的比例,该值越大说明预测正类中实际负类越多;

       如果想用两条ROC曲线来评判分类器的性能,则一个分类器中的roc完全包含另一个roc曲线,说明该分类器性能优于被包含的分类器   

       当要定量评估两条ROC曲线。这时候就引入AUC,AUC表示ROC曲线曲线下的面积,这个面积值不会大于1;

 

 

### 图像分类评估指标 Python 实现 对于图像分类任务,常用的评估指标包括准确率 (Accuracy)、精确率 (Precision)、召回率 (Recall)、F1 分数 (F1-Score),以及 ROC 曲线下的面积 (AUC)[^1]。 #### 准确率 (Accuracy) 准确率是指预测正确的样本占总样本的比例。计算方式如下: ```python from sklearn.metrics import accuracy_score y_true = [0, 1, 2, 2, 2] y_pred = [0, 0, 2, 2, 1] accuracy = accuracy_score(y_true, y_pred) print(f'Accuracy: {accuracy}') ``` #### 精确率 (Precision) 精确率表示被预测为正类的实例中有多少是真正的正类。其公式为 TP / (TP + FP): ```python from sklearn.metrics import precision_score precision_macro = precision_score(y_true, y_pred, average='macro') precision_micro = precision_score(y_true, y_pred, average='micro') print(f'Macro Precision: {precision_macro}') print(f'Micro Precision: {precision_micro}') ``` #### 召回率 (Recall) 召回率指的是实际为正类的情况下有多少比例被成功识别出来。计算方法为 TP / (TP + FN): ```python from sklearn.metrics import recall_score recall_macro = recall_score(y_true, y_pred, average='macro') recall_micro = recall_score(y_true, y_pred, average='micro') print(f'Macro Recall: {recall_macro}') print(f'Micro Recall: {recall_micro}') ``` #### F1 分数 (F1-Score) F1 分数综合考虑了精确率和召回率的表现,取两者调和平均值: ```python from sklearn.metrics import f1_score f1_macro = f1_score(y_true, y_pred, average='macro') f1_micro = f1_score(y_true, y_pred, average='micro') print(f'Macro F1 Score: {f1_macro}') print(f'Micro F1 Score: {f1_micro}') ``` #### AUC 和 ROC 曲线 绘制 ROC 曲线并计算曲线下面积(Area Under Curve), 即 AUC 值来衡量二元分类器性能的好坏: ```python import numpy as np from sklearn.preprocessing import label_binarize from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt # 将标签转换成one-hot编码形式 Y = label_binarize(y_true, classes=[0, 1, 2]) n_classes = Y.shape[1] # 计算每一类别对应的假阳性率(FPR)与真阳性率(TPR) fpr = dict() tpr = dict() roc_auc = dict() for i in range(n_classes): fpr[i], tpr[i], _ = roc_curve(Y[:, i], pred_proba[:, i]) roc_auc[i] = auc(fpr[i], tpr[i]) # 绘制所有类别的ROC曲线 plt.figure(figsize=(8,6)) colors = ['aqua', 'darkorange', 'cornflowerblue'] for i, color in zip(range(n_classes), colors): plt.plot(fpr[i], tpr[i], color=color, lw=2, label=f'Class {i} (area = {roc_auc[i]:.2f})') plt.plot([0, 1], [0, 1], 'k--', lw=2) plt.xlim([-0.05, 1.05]) plt.ylim([-0.05, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver Operating Characteristic for multi-class data') plt.legend(loc="lower right") plt.show() ``` 上述代码展示了如何利用 `sklearn` 库中的函数快速实现这些重要的评估指标,并通过可视化工具直观展示 ROC 曲线及其对应 AUC 的大小[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值