深度学习中模型好坏的所有评价指标汇总(混淆矩阵、recall、precision、F1score、AUC面积、ROC曲线、ErrorRate)

导航

  • 0、混淆矩阵
  • 1、AUC面积
  • 2、ROC曲线
  • 3、F1score

0、混淆矩阵

  • true positives (TP): 在这些情况下,我们预测“yes”(他们有这种病),并且他们确实有这种病。// 正确的将其预测为正样本
  • true negatives (TN): 我们预测“no”,事实上他们确实没有患病。//正确的将其预测为负样本
  • false positives (FP): 我们预测“yes”,但是他们实际上并没有患病。(也称为“第一类错误”。) // 错误的将其预测为正样本
  • false negatives (FN): 我们预测“no”,但他们确实有这种疾病。(也称为“第二类错误”。) // 错误的将其预测为负样本

  • 假正率 / 假阳性率 FPR:预测为正例但实际为负例的样本占所有负例样本(真实结果为负样本)的比例。// 假阳性率:错误的将其预测为正样本的个数占所有负样本的比例

    • FPR=FP / (FP+TN)

  • 召回率recall / 敏感度Sensitivity / 真正率 TPR:预测为正例且实际为正例的样本占所有正例样本(真实结果为正样本)的比例。// 正确的将其预测为正样本的个数占所有正样本的比例

    • TPR=TP / (TP+FN)

  • 特异度Specificity正确的将其预测负样本的个数占所有负样本的比例

    • Specificity=TN / (TN+FP)

  • 阳性预测值Positive predictive value PPV/ precision正确的将其预测为正样本的个数占所有预测为正样本的比例 // 预测为正样本中,有多少是真正的正样本

    • PPV / Precision=TP / (TP+FP)

  • 阴性预测值Negative predictive value NPV正确的将其预测为负样本的个数占所有预测为负样本的比例 // 预测为负样本中,有多少是真正的负样本

    • NPV=TN / (FN+TN)

  • 解析上表

    • 总共有40个正样本,20个负样本;
    • 其中,有38个正样本被预测为正样本,有2个正样本被预测为负样本;
    • 其中,有18个负样本被预测为负样本,有2个负样本被预测为正样本;
    • 其中,假正率FPR为 2/(2+18)=0.1
    • 其中,召回率 / 敏感度 / 真正率TPF为 38/(38+2)=0.95

  • 医学领域

    • 敏感度/召回率 更关注漏诊率(有病之人不能漏)
    • 特异度 更关注误诊率(无病之人不能误)
    • 假正率 / 假阳性率 = 1 - 特异度,假阳性越多,误诊越多
    • 阳性预测值 / 精确率,是看预测为阳性中,有多少是真阳性
    • 阴性预测值是看预测为阴性中,有多少是真阴性

1、AUC(Area under curve)

  • 常用于二分类模型

  • 理解1:ROC曲线下的面积

  • 理解2:随机抽出一对样本(一个正样本,一个负样本),然后用训练得到的分类模型来对这两个样本进行预测,预测得到正样本的概率大于负样本概率的概率

  • 优点:

    • 它不受类别不平衡问题的影响,不同的样本比例不会影响AUC的评测结果。
    • 在训练时,可以直接使用AUC作为损失函数
  • 计算方式1:

    • 在有M个正样本,N个负样本的数据集里。一共有MN对样本(一对样本即,一个正样本与一个负样本)。统计这MN对样本里,正样本的预测概率大于负样本的预测概率的个数
    • 假设有4条样本。2个正样本,2个负样本,那么M*N=4。
      即总共有4个样本对。分别是:
      (d,b),(d,a),(c,b),(c,a)
      在(d,b)样本对中,正样本d预测的概率大于负样本b预测的概率(也就是d的得分比b高),记为1
      同理,对于(c,b)。正样本c预测的概率小于负样本b预测的概率,记为0
      因此,AUC=(1+1+1+0)/4 = 0.75
  • 计算方式2:

    • 对预测概率从高到低排序

    • 对每一个概率值设一个rank值(最高的概率的rank为n,第二高的为n-1)

    • rank实际上代表了该score(预测概率)超过的样本的数目
      为了求的组合中正样本的score值大于负样本,如果所有的正样本score值都是大于负样本的,那么第一位与任意的进行组合score值都要大,我们取它的rank值为n,但是n-1中有M-1是正样例和正样例的组合这种是不在统计范围内的(为计算方便我们取n组,相应的不符合的有M个),所以要减掉,那么同理排在第二位的n-1,会有M-1个是不满足的,依次类推,故得到后面的公式M*(M+1)/2,我们可以验证在正样本score都大于负样本的假设下,AUC的值为1

    • 除以M*N
      -

    • tips:相等概率得分的样本,无论正负,谁在前,谁在后无所谓。

    • 正样本为狗:数量为4;

    • 负样本为其他:数量为3

    • 由于只考虑正样本的rank值:

    • 对于正样本b,其rank值为(5+4+3+2)/4 = 7/2

    • 对于正样本c,其rank值为(5+4+3+2)/4 = 7/2

    • 对于正样本f,其rank值为 6

    • 对于正样本g,其rank值为 7

    • AUC={ 6+7+7/2+7/2- [ 4*(4+1) ] /2 } / (4*3) =0.834
  • python实现

    import numpy as np
    from sklearn.metrics import roc_curve
    from sklearn.metrics import aucy = np.array([1,1,0,0,1,0,1,0,])
    pred = np.array([0.77, 0.8, 0.6, 0.1,0.4,0.9,0.66,0.7])fpr, tpr, thresholds = roc_curve(y, pred, pos_label=1)
    print("AUC:",auc(fpr, tpr))
    
    AUC: 0.5625
    

2、ROC曲线(receiver operating characteristic curve)

  • 用来衡量一个二分类学习器的好坏;
  • 如果一个学习器的ROC曲线能将另一个学习器的ROC曲线完全包住,则说明该学习器的性能优于另一个学习器;
  • 纵坐标:TPR= TP/(TP+FN) (真正率 / 召回率 / 敏感度 )
  • 横坐标:FPR= FP/(FP+TN) (假正率 / 假阳性率)
  • python实现


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import sklearn.metrics as metricsdef plot_ROC(labels,preds,savepath):"""Args:labels : ground truthpreds : model predictionsavepath : save path """# fpr1, tpr1, threshold1 = metrics.roc_curve(labels, preds)  ###计算真正率和假正率fpr, tpr, thresholds = roc_curve(y, pred, pos_label=1)roc_auc1 = metrics.auc(fpr, tpr)  ###计算auc的值,auc就是曲线包围的面积,越大越好plt.figure()lw = 2plt.figure(figsize=(10, 10))plt.plot(fpr, tpr, color='darkorange',lw=lw, label='AUC = %0.2f' % roc_auc1)  ###假正率为横坐标,真正率为纵坐标做曲线plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')plt.xlim([-0.05, 1.05])plt.ylim([-0.05, 1.05])plt.xlabel('1 - Specificity')plt.ylabel('Sensitivity')# plt.title('ROCs for Densenet')plt.legend(loc="lower right")# plt.show()plt.savefig(savepath) #保存文件
if __name__=="__main__":y = np.array([1,1,0,0,1,0,1,0,])pred = np.array([0.77, 0.8, 0.6, 0.1,0.4,0.9,0.66,0.7])savepath="./ROC.jpg"plot_ROC(y, pred, savepath)

结果如下图所示:

绘制两个模型的ROC曲线

def plot_ROC_2(labels1, preds1, labels2, preds2,savepath):"""Args:labels1 : ground truthpreds1 : model predictionsavepath : save path"""plt.figure()plt.figure(figsize=(10, 10))fpr1, tpr1, threshold1 = metrics.roc_curve(labels1, preds1)  ###计算真正率和假正率roc_auc1 = metrics.auc(fpr1, tpr1)  ###计算auc的值,auc就是曲线包围的面积,越大越好plt.plot(fpr1, tpr1, color='darkorange', lw=2, label='AUC = %0.4f' % roc_auc1)  ###假正率为横坐标,真正率为纵坐标做曲线fpr2, tpr2, threshold2 = metrics.roc_curve(labels2, preds2)  ###计算真正率和假正率roc_auc2 = metrics.auc(fpr2, tpr2)  ###计算auc的值,auc就是曲线包围的面积,越大越好plt.plot(fpr2, tpr2, color='red', lw=2, label='AUC = %0.4f' % roc_auc2)  ###假正率为横坐标,真正率为纵坐标做曲线plt.xlim([-0.05, 1.05])plt.ylim([-0.05, 1.05])plt.xlabel('1 - Specificity')plt.ylabel('Sensitivity')# plt.title('ROCs for Densenet')plt.legend(loc="lower right")plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')plt.show()# plt.savefig(savepath)  # 保存文件
if __name__=="__main__":y1 = np.array([1, 1, 0, 0, 1, 0, 1, 0, ])pred1= np.array([0.77, 0.8, 0.6, 0.1, 0.4, 0.9, 0.66, 0.7])y2 = np.array([0, 1, 1, 1, 1, 1, 0, 0, ])pred2 = np.array([0.87, 0.91, 0.6, 0.67, 0.3, 0.9, 0.16, 0.8])savepath="./"plot_ROC_2(y1,pred1,y2,pred2, savepath)


3、F1score

  • 用于平衡 精准度precision召回率recall / 敏感度Sensitivity / 真正率 这两种指标,只有当这两个指标都很高时,F1才会高
  • python脚本如下
"""
Precision = tp/tp+fp
Recall = tp/tp+fn
进而计算得到:
F1score = 2 * Precision * Recall /(Precision + Recall)"""
import numpy as np
import matplotlib.pyplot as pltfig = plt.figure()  #定义新的三维坐标轴
ax3 = plt.axes(projection='3d')#定义三维数据
precision = np.arange(0.01, 1, 0.1)
recall = np.arange(0.01, 1, 0.1)
X, Y = np.meshgrid(precision, recall)   # 用两个坐标轴上的点在平面上画网格
Z = 2*X*Y/(X+Y)# 作图
ax3.plot_surface(X, Y, Z, rstride = 1, cstride = 1, cmap='rainbow')
plt.xlabel('precision')
plt.ylabel('recall')
plt.title('F1 score')
plt.show()

【深度学习中模型评价指标汇总(混淆矩阵、recall、precision、F1、AUC面积、ROC曲线、ErrorRate)】相关推荐

  1. 【深度学习】深度学习中模型计算量(FLOPs)和参数量(Params)等的理解以及四种在python应用的计算方法总结

    接下来要分别概述以下内容: 1 首先什么是参数量,什么是计算量 2 如何计算 参数量,如何统计 计算量 3 换算参数量,把他换算成我们常用的单位,比如:mb 4 对于各个经典网络,论述他们是计算量大还 ...

  2. 深度学习中模型训练效果不好的原因以及防止过拟合的方法

    深度学习中模型训练效果不好的原因 1. 是否选择合适的损失函数 2. 是否选择了合适的Mini-batch size 3. 是否选择了合适的激活函数 4. 是否选择了合适的学习率 5. 优化算法是否使 ...

  3. 【深度学习】模型评价指标

    一.分类任务 分类任务一般有二分类.多分类和多标签分类. 多分类: 表示分类任务中有多个类别,但是对于每个样本有且仅有一个标签,例如一张动物图片,它只可能是猫,狗,虎等中的一种标签(二分类特指分类任务 ...

  4. 决策树及分类模型评价指标(混淆矩阵,LIFT曲线 重要)

    决策树评价指标:ROC lift(提升度):类似提纯:按照decile从高到低排列,之后计算每个decile里响应数与该decile里行数的比值得到一个response rate,另外,单独计算所有行 ...

  5. 【20210914】【机器/深度学习】模型评价指标:精确率、召回率、特异性、敏感性、F1-score、ROC曲线、AUC

    一.区分精确率.召回率和特异性.敏感性 在数据科学中,查看精确率和召回率来评估构建的模型是十分常见的.而在医学领域,通常使用特异性和敏感性来评估医学测试.这一点在兆观的论文.以及 xxx院的沟通过程中 ...

  6. 详细讲解分类模型评价指标(混淆矩阵)python示例

    前言 1.回归模型(regression): 对于回归模型的评估方法,通常会采用平均绝对误差(MAE).均方误差(MSE).平均绝对百分比误差(MAPE)等方法. 2.聚类模型(clustering) ...

  7. 深度学习之眼睛状态识别混淆矩阵的绘制

    本次实验基于自己搭建的CNN网络实现眼睛状态的分类,本来是打算迁移学习利用VGG16网络进行分类的,但是实验效果特别差,而且速度很慢,应该是博主自己的问题.而自己搭建的CNN网络的模型准确率也很高,运 ...

  8. 深度学习中模型攻击与防御(Attack DL Models and Defense)的原理与应用(李宏毅视频课笔记)

    文章目录 0 前言 1 Attack(模型攻击) 1.1 Attack on Image Recognition Network Model(对图像识别网络模型的攻击) 1.1.1 Loss Func ...

  9. 深度学习中的问题汇总(持续更新...)

    2018.10.24 1.scipy.misc module has no attribute imread image = misc.imread(filename) AttributeError: ...

最新文章

  1. SQL Server 中各个系统表的作用
  2. python使用matplotlib可视化:设置坐标轴的范围、设置主次坐标轴刻度、坐标轴刻度显示样式、坐标轴刻度数颜色、小数点位数、坐标轴刻度网格线、线条类型、数据点形状标签、文本字体、颜色、大小等
  3. 《SAP CRM管理与实施指南》一一2.2 SAP CRM基础功能
  4. 微服务组件记事本:Skywalking的ES索引 · 收藏篇
  5. . NET5正式版本月来袭,为什么说gRPC大有可为?
  6. C++之inline函数使用总结
  7. cloud foundry_实际的Reactor操作–检索Cloud Foundry应用程序的详细信息
  8. activiti-explorer 启动报错 Error creating bean with name 'demoDataConfiguration'
  9. 分享个提高自己审美的网站
  10. ios10前台收到推送_IOS - 前台时的推送弹窗效果
  11. IT前景---网络工程师规划之路
  12. Python中如何获得数组或者列表按大小排序后元素的索引列表
  13. 2022全新版千月影视源码原生播放器 投屏 选集 下载应有尽有(全开源)
  14. java高效快速读取CSV文件
  15. 《人生七年》纪录片中问的问题
  16. python学习笔记-修改pip下载源-创建虚拟环境
  17. Apache安全漏洞
  18. 【游戏程序设计】Direct 3D 三维地形系统
  19. 文化网,武汉文化网,湖北文化网——体制文化常识
  20. Piggy-Bank HDU - 1114(多重背包)

热门文章

  1. uboot支持usb功能
  2. 手持弹幕android制作,手持弹幕LED字幕屏
  3. 咸鱼的 GitHub 情报 | 20200111 期
  4. vue按钮移上去显示提示_vue 鼠标移入移出事件(移入出现按钮),element-ui表格移入移出...
  5. 海量数据挖掘MMDS week3:社交网络之社区检测:基本技巧
  6. Java文件完整性校验SHA256
  7. 数据结构:元祖、列表、字典、集合概念及区别
  8. ppt文字提取转word
  9. kitti数据集评估文档
  10. pyepics --Auto-saving: simple save/restore PVs