十分钟掌握分类算法的评估指标(上)

简介: 什么是评估指标?评估指标是针对模型性能优劣的一个定量指标。一种评价指标只能反映模型一部分性能,如果选择的评价指标不合理,那么可能会得出错误的结论,故而应该针对具体的数据、模型选取不同的的评价指标。针对不同类型的学习任务,我们有不同的评估指标,这里我们来介绍最常见的分类算法的一些评估指标。常用的分类任务评价指标有准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1 Score、P-R曲线(Precision-Recall Curve)、ROC、AUC等。

什么是评估指标?


评估指标是针对模型性能优劣的一个定量指标。一种评价指标只能反映模型一部分性能,如果选择的评价指标不合理,那么可能会得出错误的结论,故而应该针对具体的数据、模型选取不同的的评价指标

针对不同类型的学习任务,我们有不同的评估指标,这里我们来介绍最常见的分类算法的一些评估指标。常用的分类任务评价指标有准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1 Score、P-R曲线(Precision-Recall Curve)、ROC、AUC等。


基本概念-混淆矩阵


混淆矩阵(confusion matrix)是一个评估分类问题常用的工具,对于 k 元分类,其实它就是一个k x k的表格,用来记录分类器的预测结果。对于常见的二分类,它的混淆矩阵是 2x2 的。

在二分类中,可以将样本根据其真实结果和模型的预测结果的组合划分为真阳性(true positive,TP)、真阴性(true negative,TN)、假阳性(false positive,FP)、假阴性(false negative,FN)。根据 TP、TN、FP、FN 即可得到二分类的混淆矩阵,如下图所示。

网络异常,图片无法展示
|

  • TP:True Positives, 表示 真实值为正例 且被 分类器判定为正例(预测值) 的样本数
  • FP:False Positives, 表示 真实值为负例 且被 分类器判定为正例(预测值) 的样本数
  • FN:False Negatives, 表示 真实值为正例 但被 分类器判定为负例(预测值) 的样本数
  • TN:True Negatives, 表示真实值为负例且被 分类器判定为负例(预测值) 的样本数

注意:

第一个字母表示真实值与预测值划分正确与否, T 表示判定正确(True), F 表示判定错误 (False)。

第二个字母表示分类器判定结果(预测结果), P 表示判定为正例, N 表示判定为负例。


分类算法的评估指标


准确率(Accuracy)

准确率指分类正确的样本占总样本个数的比例。准确率是针对所有样本的统计量。它被定义为:

Accuracy=TP+TNTP+FP+TN+FN=正确预测的样本数所有的样本数Accuracy=\frac{TP+TN}{TP+FP+TN+FN}=\frac{正确预测的样本数}{所有的样本数}Accuracy=TP+FP+TN+FNTP+TN=

准确率能够清晰的判断我们模型的表现,但有一个严重的缺陷: 在正负样本不均衡的情况下,占比大的类别往往会成为影响 Accuracy 的最主要因素,此时的 Accuracy 并不能很好的反映模型的整体情况。

例如,一个测试集有正样本99个,负样本1个。模型把所有的样本都预测为正样本,那么模型的Accuracy为99%,看评价指标,模型的效果很好,但实际上模型没有任何预测能力。

精确率(Precision)

精确率又称为查准率,是针对预测结果而言的一个评价指标。指在分类正确的正样本个数占分类器判定为正样本的样本个数的比例。精确率是对部分样本的统计量,侧重对分类器判定为正类的数据的统计。它被定义为:

Precision=TPTP+FP=分类正确的正样本个数被分类器判定为正样本的样本个数Precision=\frac{TP}{TP+FP}=\frac{分类正确的正样本个数}{被分类器判定为正样本的样本个数}Precision=TP+FPTP=

多标签:

Precision=∑l=1LTPl∑l=1L(TPl+FPl)=Label预测为l且分类正确的正样本个数被分类器判定为Label为l的样本个数Precision=\frac{\sum_{l=1}^LTP_l}{\sum_{l=1}^L(TP_l+FP_l)}=\frac{Label预测为l且分类正确的正样本个数}{被分类器判定为Label为l的样本个数}Precision=l=1L(TPl+FPl)l=1LTPl=LabellLabell

召回率(Recall)

召回率指分类正确的正样本个数占真正的正样本个数的比例。召回率也是对部分样本的统计量,侧重对真实的正类样本的统计。它被定义为:

Recall=TPTP+FN=分类正确的正样本个数真正的正样本个数Recall=\frac{TP}{TP+FN}=\frac{分类正确的正样本个数}{真正的正样本个数}Recall=TP+FNTP=

多标签:

Recall=∑l=1LTPl∑l=1L(TPl+FNl)=Label预测为l且分类正确的正样本个数真正的Label为l样本个数Recall=\frac{\sum_{l=1}^LTP_l}{\sum_{l=1}^L(TP_l+FN_l)}=\frac{Label预测为l且分类正确的正样本个数}{真正的Label为l样本个数}Recall=l=1L(TPl+FNl)l=1LTPl=LabellLabell

Precision 与 Recall 的权衡

精确率高,意味着分类器要尽量在  “更有把握”  的情况下才将样本预测为正样本, 这意味着精确率能够很好的体现模型对于负样本的区分能力,精确率越高,则模型对负样本区分能力越强

召回率高,意味着分类器尽可能将有可能为正样本的样本预测为正样本,这意味着召回率能够很好的体现模型对于正样本的区分能力,召回率越高,则模型对正样本的区分能力越强

从上面的分析可以看出,精确率与召回率是此消彼长的关系, 如果分类器只把可能性大的样本预测为正样本,那么会漏掉很多可能性相对不大但依旧满足的正样本,从而导致召回率降低。

那么当不同模型的Recall和Precision各有优势时该如何选择模型?此时可以通过F1 Score来比较。

F1分数(F1 Score)

F1 Score是精准率和召回率的调和平均值,它同时兼顾了分类模型的准确率和召回率,是统计学中用来衡量二分类(或多任务二分类)模型精确度的一种指标。它的最大值是1,最小值是0,值越大意味着模型越好。 它定义为:

F1=2⋅Precision⋅RecallPrecision+RecallF1=2 \cdot \frac{ Precision \cdot Recall}{Precision+Recall}F1=2Precision+RecallPrecisionRecall

F-Beta Score

更一般的FβF_\betaFβ,它的物理意义就是将准确率和召回率这两个分值合并为一个分值,在合并的过程中,召回率的权重是准确率的β倍。我们定义FβF_\betaFβ分数为:

Fβ=(1+β2)⋅precisiont⋅recall(β2⋅precision)+recallF_\beta = (1 + \beta^2) \cdot \frac{precisiont \cdot recall}{(\beta^2 \cdot precision) + recall}Fβ=(1+β2)(β2precision)+recallprecisiontrecall

β\betaβ 本质上是Recall与Precision 权重比, 当 β=2\beta = 2β=2  时, F2F_2F2表明 Recall 的权重要比Precision高,其影响更大; 当 β=0.5\beta = 0.5β=0.5 时, F0.5F_0.5F0.5 表明 Recall 的权重要比Precision低, 对应的影响更小;

宏平均F1分数(Macro F1)

宏平均 F1 算法在计算 Precision 与 Recall 时,是先分别计算每个类别的Precision 与 Recall, 然后再进行平均。

Precisioni=TPiTPi+FPiPrecision_i=\frac{TP_i}{TP_i+FP_i}Precisioni=TPi+FPiTPi

Precisionmacro=∑i=1LPrecisioni∣L∣Precision_{macro}=\frac{\sum_{i=1}^L Precision_i}{|L|}Precisionmacro=Li=1LPrecisioni

Recalli=TPiTPi+FNiRecall_i=\frac{TP_i}{TP_i+FN_i}Recalli=TPi+FNiTPi

Recallmacro=∑i=1LRecalli∣L∣Recall_{macro}=\frac{\sum_{i=1}^L Recall_i}{|L|}Recallmacro=Li=1LRecalli

宏平均F1分数公式为:

F1macro=2⋅Precisionmacro⋅RecallmacroPrecisionmacro+RecallmacroF1_{macro}=2 \cdot \frac{ Precision_{macro} \cdot Recall_{macro}}{Precision_{macro}+Recall_{macro}}F1macro=2Precisionmacro+RecallmacroPrecisionmacroRecallmacro

注:Macro F1 本质上是所有类别的统计指标的算术平均值来求得的,这样单纯的平均忽略了样本之间分布可能存在极大不平衡的情况。

微平均F1分数(Micro F1)

微平均 F1 算法在计算 Precision 与 Recall 时会将所有类直接放到一起来计算。

Precisionmicro=∑i=1LTPi∑i=1LTPi+∑i=1LFPiPrecision_{micro}=\frac{ \sum_{i=1}^L TP_i}{\sum_{i=1}^L TP_i + \sum_{i=1}^L FP_i}Precisionmicro=i=1LTPi+i=1LFPii=1LTPi

Recallmicro=∑i=1LTP∑i=1LTP+∑i=1LFNRecall_{micro}=\frac{ \sum_{i=1}^L TP}{ \sum_{i=1}^L TP + \sum_{i=1}^L FN}Recallmicro=i=1LTP+i=1LFNi=1LTP

微平均F1分数公式为:

F1micro=2⋅Precisionmicro⋅RecallmicroPrecisionmicro+RecallmicroF1_{micro}=2 \cdot \frac{ Precision_{micro} \cdot Recall_{micro}}{Precision_{micro}+Recall_{micro}}F1micro=2Precisionmicro+RecallmicroPrecisionmicroRecallmicro

Macro 与 Micro 的区别

Macro 相对 Micro 而言,小类别起到的作用更大。例如,对于一个四分类问题有:

  • class A: 1 TP, 1 FP
  • class B: 10 TP , 90 FP
  • class C: 1 TP, 1 FP
  • class D: 1 TP, 1 FP

那么对于 Precision 的计算如下:

PA=PC=PD=PE=0.5,PB=0.1P_A=P_C=P_D=P_E=0.5,P_B=0.1PA=PC=PD=PE=0.5PB=0.1

Pmicro=0.5+0.1+0.5+0.54=0.4P_{micro}=\frac{0.5+0.1+0.5+0.5}{4}=0.4Pmicro=40.5+0.1+0.5+0.5=0.4

Pmicro=1+10+1+12+100+2+2=0.123P_{micro}=\frac{1+10+1+1}{2+100+2+2}=0.123Pmicro=2+100+2+21+10+1+1=0.123

我们看到,对于 Macro 来说, 小类别相当程度上拉高了 Precision 的值,而实际上, 并没有那么多样本被正确分类,考虑到实际的环境中,真实样本分布和训练样本分布相同的情况下,这种指标明显是有问题的, 小类别起到的作用太大,以至于大样本的分类情况不佳。 而对于 Micro 来说,其考虑到了这种样本不均衡的问题, 因此在这种情况下相对较佳

总结如下:

  1. 如果你的类别比较均衡,则随便使用Micro或者Macro;
  2. 如果你认为大样本的类别应该占据更重要的位置, 使用Micro;
  3. 如果你认为小样本也应该占据重要的位置,则使用 Macro;
  4. 如果 Micro << Macro , 则意味着在大样本类别中出现了严重的分类错误;
  5. 如果 Macro << Micro , 则意味着小样本类别中出现了严重的分类错误。

加权F1分数(Weighted F1)

为了解决 Macro 无法衡量样本均衡问题,一个很好的方法是求加权的 Macro, 因此 Weighted F1 出现了。

加权F1算法是Macro算法的改良版,是为了解决Macro中没有考虑样本不均衡的原因,在计算  Precision 与 Recall 时候,各个类别的 Precision 与 Recall要乘以该类在总样本中的占比来求和。

Precisioni=TPiTPi+FPiPrecision_i=\frac{TP_i}{TP_i+FP_i}Precisioni=TPi+FPiTPi

Precisionweighted=∑i=1L(Precisioni×wi)∣L∣Precision_{weighted}=\frac{\sum_{i=1}^L (Precision_i \times w_i)}{|L|}Precisionweighted=Li=1L(Precisioni×wi)

Recalli=TPiTPi+FNiRecall_i=\frac{TP_i}{TP_i+FN_i}Recalli=TPi+FNiTPi

Recallweighted=∑i=1L(Recalli×wi)∣L∣Recall_{weighted}=\frac{\sum_{i=1}^L (Recall_i \times w_i)}{|L|}Recallweighted=Li=1L(Recalli×wi)

加权F1分数公式为:

F1weighted=2⋅Precisionweighted⋅RecallweightedPrecisionweighted+RecallweightedF1_{weighted}=2 \cdot \frac{ Precision_{weighted} \cdot Recall_{weighted}}{Precision_{weighted}+Recall_{weighted}}F1weighted=2Precisionweighted+RecallweightedPrecisionweightedRecallweighted

马修斯相关系数(Matthews correlation coefficient)-MCC

MCC 主要用于衡量二分类问题,其综合考虑了 TP, TN, FP, FN, 是一个比较均衡的指标, 对于样本不均衡情况下也可以使用。

MCC的取值范围在  [-1, 1] , 取值为1 表示预测与实际完全一致, 取值为0表示预测的结果还不如随机预测的结果, -1 表示预测结果与实际的结果完全不一致。

因此我们看到, MCC 本质上描述了预测结果与实际结果之间的相关系数。

马修斯相关系数公式为:

MCC=TP×TN−FP×FN(TP+FP)×(TP+FN)×(TN+FP)×(TN+FN)MCC = \frac{TP \times TN - FP \times FN}{\sqrt{(TP + FP) \times (TP + FN) \times (TN + FP) \times (TN +FN)}}MCC=(TP+FP)×(TP+FN)×(TN+FP)×(TN+FN)TP×TNFP×FN

MCC=预测正确的样本−预测错误的样本预测为正样本数×真正正样本数×真正负样本数×预测为负样本数MCC = \frac{ 预测正确的样本 - 预测错误的样本 }{\sqrt{预测为正样本数\times 真正正样本数 \times 真正负样本数 \times 预测为负样本数}}MCC=×××


相关文章
|
3月前
|
数据采集 算法 数据可视化
基于Python的k-means聚类分析算法的实现与应用,可以用在电商评论、招聘信息等各个领域的文本聚类及指标聚类,效果很好
本文介绍了基于Python实现的k-means聚类分析算法,并通过微博考研话题的数据清洗、聚类数量评估、聚类分析实现与结果可视化等步骤,展示了该算法在文本聚类领域的应用效果。
109 1
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
64 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
在 Python 编程中,算法的性能至关重要。本文将带您深入了解算法复杂度的概念,包括时间复杂度和空间复杂度。通过具体的例子,如冒泡排序算法 (`O(n^2)` 时间复杂度,`O(1)` 空间复杂度),我们将展示如何评估算法的性能。同时,我们还会介绍如何优化算法,例如使用 Python 的内置函数 `max` 来提高查找最大值的效率,或利用哈希表将查找时间从 `O(n)` 降至 `O(1)`。此外,还将介绍使用 `timeit` 模块等工具来评估算法性能的方法。通过不断实践,您将能更高效地优化 Python 程序。
60 4
|
4月前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
【7月更文挑战第23天】在Python编程中,掌握算法复杂度—时间与空间消耗,是提升程序效能的关键。算法如冒泡排序($O(n^2)$时间/$O(1)$空间),或使用Python内置函数找最大值($O(n)$时间),需精确诊断与优化。数据结构如哈希表可将查找从$O(n)$降至$O(1)$。运用`timeit`模块评估性能,深入理解数据结构和算法,使Python代码更高效。持续实践与学习,精通复杂度管理。
64 9
|
3月前
|
机器学习/深度学习 算法 搜索推荐
支付宝商业化广告算法问题之在DNN模型中,特征的重要性如何评估
支付宝商业化广告算法问题之在DNN模型中,特征的重要性如何评估
|
4月前
|
机器学习/深度学习 数据采集 算法
Python实现贝叶斯岭回归模型(BayesianRidge算法)并使用K折交叉验证进行模型评估项目实战
Python实现贝叶斯岭回归模型(BayesianRidge算法)并使用K折交叉验证进行模型评估项目实战
133 1
|
5月前
|
机器学习/深度学习 算法
GBDT算法超参数评估(二)
GBDT算法超参数评估关注决策树的不纯度指标,如基尼系数和信息熵,两者衡量数据纯度,影响树的生长。默认使用基尼系数,计算快速,而信息熵更敏感但计算慢。GBDT的弱评估器默认最大深度为3,限制了过拟合,不同于随机森林。由于Boosting的内在机制,过拟合控制更多依赖数据和参数如`max_features`。相比Bagging,Boosting通常不易过拟合。评估模型常用`cross_validate`和`KFold`交叉验证。
|
5月前
|
算法 物联网 调度
操作系统调度算法的演进与性能评估
本文深入探讨了操作系统中进程调度算法的发展轨迹,从早期的先来先服务(FCFS)到现代的多级队列和反馈控制理论。通过引用实验数据、模拟结果和理论分析,文章揭示了不同调度策略如何影响系统性能,特别是在响应时间、吞吐量和公平性方面。同时,本文也讨论了在云计算和物联网等新兴领域,调度算法面临的挑战和未来的发展方向。
|
29天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
6天前
|
算法 数据安全/隐私保护 索引
OFDM系统PAPR算法的MATLAB仿真,对比SLM,PTS以及CAF,对比不同傅里叶变换长度
本项目展示了在MATLAB 2022a环境下,通过选择映射(SLM)与相位截断星座图(PTS)技术有效降低OFDM系统中PAPR的算法实现。包括无水印的算法运行效果预览、核心程序及详尽的中文注释,附带操作步骤视频,适合研究与教学使用。
下一篇
无影云桌面