python图像分类项目-05评估模型

环境 :mac py3.7 anaconda jupyter

项目教程及代码来自:同济子豪兄

https://github.com/TommyZihao/Train_Custom_Dataset

https://www.bilibili.com/video/BV1bP411j7NK

一、学习总结

获取测试集预测结果并保存下来后(df或csv),需制作混淆矩阵来评估模型准确度

关于分类的混淆矩阵,先从最简单的二分类(positve — negative )混淆矩阵讲起。

真实\预测

预测是猫 Positive

预测不是猫 Negative

是猫Actual Positive

分类正确:是猫 True Positive

分类错误:不是猫 False Negative

不是猫Actual Negative

分类错误:是猫 False Positive

分类正确:不是猫 True Negative

评估标准1: 总准确度Acuraccy =(TP+TN)/(TP+FN+FP+TN)

查准率 Precision = TP/(TP+FP) # TP/TP同列

从模型做出的所有预测出发,描述预测的正确率。(被预测为猫的项是否真的是猫)

查全率Recall = TP/(TP+FN) # TP/TP同行

从真实情况出发,描述Actual positive的项被positive覆盖的程度。(所有真的是猫的项,是否都被预测为是猫)

评估标准2: F1-score = (2*Precision*Recall)/(Precision+Recall) # 两者的调和平均数

0-1 。越接近1,模型越好。

评估标准3:PR曲线的AP。以Precision为纵轴,Recall为横轴作图。AP为得到的曲线下方覆盖的面积

曲线越向右上角突出越好。AP:0-1,越接近1越好。

TPR = Recall = TP/(TP+FN)

FPR = FP/(FP+TN)

评估标准4:ROC曲线的AreaUnderCurve(AUC)。使用不同阈值(解释详见https://b23.tv/jEk5z5E)下的TPR(纵轴)与FPR(横轴)绘制得到曲线。AUC为曲线覆盖的面积。

AUC:0-1,越大越好

对于实际多分类的混淆矩阵:

这是一个小例子,总计64项

真实分类\预测分类

类1

类2

类3

类1

15

2

3

类2

6

12

0

类3

0

4

22

Accurancy = 主对角线和/总和 = 49/64 = 76.56%

每一类的Precision与Recall需单独算

例如对于类2而言

真实分类\预测分类

类1

类2

类3

类1

15 TN

2 FP

3 TN

类2

6 FN

12 TP

0 FN

类3

0 TN

4 FP

22 TN

precision = 12/18 =0.66 recall = 12/18 = 0.66

F1-score = 0.66

多分类的 F1-score为每个类的F1-score的均值。此例为0.75

二、关键代码

迅速获取P,S与f1-score

from sklearn.metrics import classification_report

print(classification_report(df['标注类别名称'], df['top-1-预测名称'], target_names=classes))

生成混淆矩阵的代码

from sklearn.metrics import confusion_matrix

confusion_matrix_model = confusion_matrix(df['真实类别名称'], df['top-1-预测名称'])

获得某类AP值

from sklearn.metrics import average_precision_score

# 二分类标注-索引+布尔序列

y_test = (df['标注类别名称'] == specific_class)

# 二分类预测置信度

y_score = df['某类-预测置信度']

AP = average_precision_score(y_test, y_score, average='weighted')

获得某类auc值

from sklearn.metrics import roc_curve, auc

# 二分类标注-索引+布尔序列

y_test = (df['标注类别名称'] == specific_class)

# 二分类预测置信度

y_score = df['某类-预测置信度']

fpr, tpr, threshold = roc_curve(y_test, y_score)

AUC = auc(fpr,tpr)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值