目录

问题定义

confusion matrix

Accuracy

Precision和Recall和PRC

F1和调和平均

加权F1

Micro-F1和Macro-F1

ROC和AUC

PRC对比ROC


问题定义

我们从简单到难,先定义任务为二分类,后面再推广到多分类就顺水推舟了。问题定义:

confusion matrix

模型实际预测结果
预测为Positive的样本数 预测为Negative的样本数
待预测样本的真实标签总数 P:Positive TP:True Positive FN:False Negative
N:Negative FP:False Positive TN:True Negative
  • 需预测的样本有两种标签:阳性Positive,或阴性Negative
  • 这些样本中真实标签为Positive的有P条
  • 真实标签为Negative的有N条
  • P条Positive样本有TP条被正确预测为Positive,即预测正确了,是真的Positive,
  • P条Positive样本有FN条被错误预测为Negative,即被预测错误了,是假的Negative,
  • N条Negative样本,有FP条被错误预测为Positive
  • N条Negative样本,有TN条被正确预测为Negative

上图表格也叫混淆矩阵confusion matrix,反应了模型对标签预测结果的混淆程度。

Accuracy

Accuracy:准确率,为预测正确的样本数除以预测总数,表示有多少比例的样本预测正确了。

缺点:

  • 因为分母是样本总数,所以当样本中阳性或阴性占比差距很大,即样本分布不均衡时,Accuracy偏向于占比大的那一类别,如阳性样本占 99%,只要分类器将所有样本都预测为阳性样本就能获得 99% 的准确率。
  • 反应的是整体准确率,结果太笼统,实际应用中,我们可能更加关注某一类别样本的情况。比如搜索时会关心 “检索出的信息有多少是用户感兴趣的”,“用户感兴趣的信息有多少被检测出来了” 等等。

相对应的还有错误率:

代码:

from sklearn.metrics import accuracy_scorey_pred = [0, 0, 1, 1]
y_true = [1, 0, 1, 0]
accuracy_score(y_true, y_pred) # 结果为0.5

Precision和Recall和PRC

Precision:查准率,也叫精准率或精确率,即所有预测为阳性的结果中,预测正确的(为真正例)比例。代表了阳性结果的预测准确率。

Recall:查全率,也叫召回率,即正确预测为阳性的样本数占到了真阳性样本数的比例。代表了有多少比例的真阳性被找出来了。

PRC:precision recall curve,横轴是召回率Recall,纵轴是精确率Precision。曲线上的点代表在某阈值下,模型将大于该阈值的结果判定为正样本,小于阈值的结果判定为负样本,此时对应的召回率和精确率。曲线是通过将阈值从高到低移动生成的。

两个模型性能的比较:

  • 如果一个模型的p-r曲线能被另一个模型的曲线包住,则后者的性能优于前者
  • 如果两模型曲线相交,比较曲线下面积,在一定程度上表征学习器的两个值“双高”的比例
  • 曲线下面积不容易计算,可以用“平衡点”度量(查准率=查全率的点)

F1和调和平均

F1-Score:F1分数,又称为平衡F分数(BalancedScore),它被定义为精确率和召回率的调和平均数。

F1实际为Precision和Recall的调和平均(harmonic mean)

调和平均(harmonic mean)H为:所有数字先取倒数,再算平均数,得到平均数后再取倒数,把数又倒回来。

举例:1,4,4的H为:

注意,因为0不存在倒数,所以调和平均数不适用于包含0的一组数字。

调和平均数,强调了较小值的重要性,给予较小值更高的权重。

举个通俗点的例子。小明数学得了80分,语文得了100分;小红数学90分,语文90分。评价谁考的更好?

直接算平均:小明,(80+100)/2 = 90      小红,(90+90)/2=90,这时两者一样好

但从不偏科的角度来看,是小红更好。

用调和平均值计算:小明,2/(1/80+1/100)=88.89 ;小红,2/(1/90+1/90) = 90。

所以,调和平均值比平均值更加“平均”。

电阻并联:电阻A和B并联,这时电流有两个选择,经过电阻A或经过电阻B,这两个路径是平行的,由于较小电阻对电流影响更大,所以用调和平均才是两者的并联电阻。

为什么F1使用调和平均数,而不是算术平均数?

在你训练的机器学习模型过程中,你往往希望能够兼顾精确率召回率,并使用一个统一的单值评价指标来评价你的机器学习模型的训练效果。我们之所以使用调和平均而不是算术平均,是因为在算术平均中,任何一方对数值增长的贡献相当,任何一方对数值下降的责任也相当;而调和平均在增长的时候会偏袒较小值,也会惩罚精确率召回率相差巨大的极端情况,很好地兼顾了精确率召回率

当R 接近于1, P 接近于 0 时。采用调和平均数的F1值接近于0;而如果采用算数平均数F1的值为0.5;显然采用调和平均数能更好的评估算法的性能。等效于评价R和P的整体效果。

梯度贡献视角分析:

对函数,其图象关于平面对称。分别求f ( x , y ) 对x 和y的偏导数:

当x < y 时,,梯度grad z在x方向增长比y方向快。

当y  > x 时,,梯度grad z在y方向增长比x方向快。

调和平均在增长的时候会偏袒较小值。

加权F1

β 可以用来给召回率和精度更多或者更少的权重。

当 时,成为F1-Score,这时召回率和精确率都很重要,权重相同。

当有些情况下我们认为精确率更为重要,那就调整 β 的值小于 1 ,如果我们认为召回率更加重要,那就调整 β的值大于1,比如F2-Score。

G分数是另一种统一精确率和的召回率系统性能评估标准,G分数被定义为召回率和精确率的几何平均数。

Micro-F1和Macro-F1

最后看Micro-F1和Macro-F1。

在一个多标签分类任务中,可以对每个“类”,计算F1,显然我们需要把所有类的F1合并起来考虑。

这里有两种合并方式:

第一种Micro-F1:先计算出每个类别的Precision和Recall,得到多个Precision和Recall,基于他们直接算F1。

第二种Macro-F1:先计算出每个类别的Precision和Recall,再对每个类别对应的这组Precision和Recall,计算F1,得到多个F1,再算他们的平均。

ROC和AUC

  • 真阳率(True Positive Rate,TPR),表示预测为阳性而且预测对了,它真的为阳性的样本数,占真实阳性样本总数的比例。或者说,所有真阳性中,模型正确预测为阳性样本的比例,等同于召回率Recall。

  • 假阳率(False Positive Rate,FPR),表示预测为阳性而且预测错了,它实际为阴性的样本数,占真实阴性样本总数的比例: 或者说,所有真阴性中,模型模型错误地将其预测为阳性样本的比例。

ROC(Receiver Operating Characteristic):假阳率FPR为横坐标,真阳率TPR为纵坐标,因为真假阳率的分母都是不变的,当确定一个判定阳性的阈值时,就可以基于该阈值,确定预测结果中真阳样本数和假阳样本数,即确定一组(FPR,TPR),得到一个坐标点 (FPR,TPR)。

将阈值从0不但增大,可以得到一系列的坐标点,他们可以连线,画出来如下。红线是随机乱猜模型的ROC曲线,如果模型的ROC越靠左上角,分类器越佳。

AUC(Area Under Curve)就是ROC曲线下的面积。

两模型的比较:

  • 若一个模型的ROC把另一模型的ROC包住,前者的性能优于后者
  • 若曲线相交,比较曲线下面积
>>> import numpy as np
>>> from sklearn.metrics import roc_auc_score
>>> y_true = np.array([0, 0, 1, 1])
>>> y_scores = np.array([0.1, 0.4, 0.35, 0.8])
>>> roc_auc_score(y_true, y_scores)
0.75

PRC对比ROC

与 PRC相比,ROC 曲线有一个特点:当正负样本的分布发生变化时,ROC 曲线形状能基本保持不变,而 P-R 曲线的形状一般会发生比较剧烈的变化。因此,当数据不均匀时,ROC 曲线更能够反映模型好坏。而这背后的原因是:

  • P-R 曲线关注的是真实的正例总数中实际预测对的比例,以及预测为正例的总数中,实际预测对的比例。即只关心下面红色部分

P:Positive TP:True Positive FN:False Negative
N:Negative FP:False Positive TN:True Negative
  • ROC 曲线关注的是真实的正例和负例中(分别对应 TPR 和 FPR),被预测为正例的比例。即关心了四个部分。

P:Positive TP:True Positive FN:False Negative
N:Negative FP:False Positive TN:True Negative

算法模型评价详解:confusion matrix Accuracy Precision Recall F1 调和平均 加权F1 Micro-F1 Macro-F1 PRC ROC AUC相关推荐

  1. 今日头条推荐算法原理全文详解之一

    本次分享将主要介绍今日头条推荐系统概览以及内容分析.用户标签.评估分析,内容安全等原理. 今日头条推荐算法原理全文详解 今日头条 数据分析 产品经理 产品 好文分享 第1张 一.系统概览 推荐系统,如 ...

  2. 抖音算法推荐机制详解

    抖音算法推荐机制详解!(科普向) 众所周知抖音的流量分配是去中心化的,这种去中心化算法,让每个人都有机会爆红,可为什么别人几个粉玩抖音,就能轻松获得10w+点赞?而你怒拍几十条也枉然? 抖音的游戏规则 ...

  3. 抖音推荐算法原理全文详解

    阅读目录 一.系统概览 二.内容分析 三.用户标签 四.评估分析 五.内容安全 抖音推荐算法原理全文详解 本次分享将主要介绍今日头条推荐系统概览以及内容分析.用户标签.评估分析,内容安全等原理. 回到 ...

  4. 并联下垂控制(DROOP控制)_SIMULINK模型搭建详解

    一.前言 对于多逆变器并联,最常见以及最经典的方式是采用下垂控制(DROOP控制).通过下垂控制实现微电网的调压调频功能. 二.控制策略 采用三环控制结构:下垂功率外环+电压电流双闭环 控制部分 功率 ...

  5. 生成模型——自回归模型详解与PixelCNN构建

    生成模型--自回归模型详解与PixelCNN构建 自回归模型(Autoregressive models) 简介 PixelRNN 使用TensorFlow 2构建PixelCNN模型 输入和标签 掩 ...

  6. 今日头条推荐算法原理全文详解之四

    三.用户标签 内容分析和用户标签是推荐系统的两大基石.内容分析涉及到机器学习的内容多一些,相比而言,用户标签工程挑战更大. 今日头条推荐算法原理全文详解 今日头条 数据分析 产品经理 产品 好文分享 ...

  7. 文本分类算法TextCNN原理详解

    详情请看:膜拜大佬![原创]文本分类算法TextCNN原理详解(一) - ModifyBlog - 博客园 Textcnn 原理 与rnn lstm 的比较, Textcnn更快 textCNN的总结 ...

  8. 【直播】陈安东,但扬:CNN模型搭建、训练以及LSTM模型思路详解

    CNN模型搭建.训练以及LSTM模型思路详解 目前 Datawhale第24期组队学习 正在如火如荼的进行中.为了大家更好的学习"零基础入门语音识别(食物声音识别)"的课程设计者 ...

  9. python如何调用文件进行换位加密_python 换位密码算法的实例详解

    python 换位密码算法的实例详解 一前言: 换位密码基本原理:先把明文按照固定长度进行分组,然后对每一组的字符进行换位操作,从而实现加密.例如,字符串"Error should neve ...

最新文章

  1. Java项目:高校学生社团活动管理系统(java+springboot+freemark+jpa+mysql)
  2. 报告 | 电竞中高端人才平均年薪21.6万元,仅次于金融业
  3. 做为产品经理如何判断一个创业项目是否靠谱?
  4. 并行流 线程池_使用自定义线程池处理并行数据库流
  5. VS2010发布、打包安装程序超全超详细
  6. SPM-using Maven and Juint
  7. 用thymeleaf转化日期格式的方法
  8. 关注VS.Net 2005
  9. u3d_shader_surface_shader_2
  10. ES6的promise对象应该这样用
  11. 怎样做好一个项目经理
  12. 迅为RK3399开发板嵌入式linux开发指南
  13. 生产质量分析,助力企业掌握影响质量的全量数据
  14. java最新2019面试题
  15. Detecting Spacecraft Anomalies Using LSTMs and Nonparametric Dynamic Thresholding
  16. shader拖尾_拖尾效果 - LouisSong - 博客园
  17. Python视频制作引擎Manim安装教程2021版(科学概念可视化)
  18. 儿童节活动需要的设计感海报
  19. 快速游戏开发工具GameMaker Action Game Maker使用体验
  20. centos7磁盘清理方法

热门文章

  1. YXC | 蓝牙耳机晶振怎么选?
  2. 小白练习cocos creator——property用法记录
  3. catia利用宏批量改名的方法_catia怎么批量改名-catia利用宏批量改名的方法 - 河东软件园...
  4. C语言中常量后缀,u或U,l或L,f或F问题
  5. Chrome浏览器快速切换DOH DNS
  6. linux 支持7代cpu,Intel第七代cpu有哪些型号
  7. Excel数据分析案例三——预测销量
  8. Win10便签在哪?Win10桌面便签怎么打开和使用?
  9. 切图工具:输出512*512切片大小的切片
  10. 非常好用的开源矢量地图切片工具