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

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

ROC 曲线


在分类任务中,测试样本通常是获得一个概率表示当前样本属于正例的概率, 我们往往会采取一个阈值,大于该阈值的为正例,小于该阈值的为负例。 如果我们减小这个阈值, 那么会有更多的样本被识别为正类,这会提高正类的识别率,但同时会降低负类的识别率。

为了形象的描述上述的这种变化, 引入ROC曲线来评价一个分类器的好坏。ROC曲线也是一个全面评估模型的指标,中文名为“受试者工作特征曲线”。ROC曲线源于军事领域, 而后在医学领域应用甚广, “受试者工作特征曲线”这一名称也正是来自于医学领域。

ROC曲线的横坐标为假阳性率( False Positive Rate, FPR),即将负例错分为正例的概率 ,医学上称为误诊率; 纵坐标为真阳性率( True Positive Rate, TPR),将正例分对的概率。

横坐标:

FPR=FPFP+TN=将负样本预测正的样本数真正的负样本数FPR = \frac{FP}{FP+TN} = \frac{将负样本预测正的样本数}{真正的负样本数}FPR=FP+TNFP=

纵坐标:

TPR=TPTP+FN=将正样本预测为正的样本数真正的正样本数TPR = \frac{TP}{TP+FN}= \frac{将正样本预测为正的样本数}{真正的正样本数}TPR=TP+FNTP=

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

在ROC曲线中,设置不同的阈值,会得到不同的TPR和FPR,而随着阈值的逐渐减小,越来越多的实例被划分为正类,但是这些正类中同样也掺杂着负类,即TPR和FPR会同时增大。

  • 阈值最大时,所有的正样本预测为负样本,所有的负样本也预测为负样本,即分子都为0,所以FPR = 0, TPR = 0 ,对应坐标点为(0,0)。
  • 阈值最小时,所有的负样本预测为正样本,所有的正样本也预测为正样本,即 FPR = 1, TPR = 1,对应坐标点(1,1)。
  • 而当FPR = 0, TPR = 1时为最优分类点,分类器对应的ROC曲线应该尽可能靠近坐标轴的左上角,而对角线的位置意味着分类器的效果和随机猜测一样的差。

ROC曲线在测试集中的样本分布发生变化的时候能够保持不变。 但遗憾的是,很多时候, ROC 曲线并不能清晰的说明哪个分类器的效果更好, 而 AUC 恰恰能够对分类器做出直观的评价。

AUC-ROC曲线下的面积(area under the curve)

AUC 为ROC 曲线下的面积, 这个面积的数值介于0到1之间, 能够直观的评价出分类器的好坏, AUC的值越大, 分类器效果越好。

  • AUC = 1: 完美的分类器,采用该模型,不管设定什么阈值都能得出完美预测(绝大多数时候不存在)
  • 0.5 < AUC < 1: 优于随机猜测,分类器好好设定阈值的话,有预测价值
  • AUC = 0.5: 跟随机猜测一样,模型没有预测价值
  • AUC < 0.5 :比随机猜测还差,但是如果反着预测,就优于随机猜测。

值得一提的是,两个模型的AUC 相等并不代表模型的效果相同, 如下图所示:

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

实际场景中, AUC 的确是非常常用的一种指标。

注意:在多分类场景下的 ROC 曲线以及 AUC 值, 此时 ROC 曲线应该有多个,

而AUC 的计算如下:AUC=2∣C∣(∣C∣−1)∑i=1∣C∣AUCiAUC=\frac{2}{|C|(|C|-1)}\sum_{i=1}^{|C|}{AUC_i}AUC=C(C1)2i=1CAUCi,其中C表示类别数量。

P-R 曲线

我们知道,分类模型的最后输出往往是一个概率值,我们一般需要把概率值转换为具体的类别,对于二分类来说,我们设置一个阈值(threshold),然后大于此阈值判定为正类,反之负类。

以上评价指标(Accuracy、Precision、Recall)都是针对某个特定阈值来说的,那么当不同模型取不同阈值时,如何全面的评价不同模型?而P-R曲线则是描述精确率和召回率变化的曲线。

对于所有的正样本,如何绘制P-R曲线?

设置不同的阈值,模型预测所有的正样本,计算对应的精准率和召回率。横轴是召回率, 纵轴是精确率,如下如所示。

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

在上图中,我们发现:

  • 对于两个不同的分类器,A 完全包住了C, 着意味着A 的Precision 与 Recall 都高于C, A优于C。 而对比 A,B, 二者存在交叉的情况,此时采用曲线下面积大小衡量性能,面积越大,性能越好,此处的A优于B。
  • 对于同一个分类器,Precision与Recall的折中(trade off),曲线越靠近右上角性能越好,曲线下的面积叫AP分数,能在一定程度上反应模型的精确率和召回率都很高的比例。但这个值不方便计算,综合考虑精度与召回率一般使用F1值或者AUC值(因为ROC曲线很容易画,ROC曲线下的面积也比较容易计算)。

对数损失

对数损失(Logistic Loss)是对预测概率的似然估计,其标准形式为:LogLoss=−log⁡P(Y∣X)LogLoss = - \log { P(Y|X)}LogLoss=logP(YX)

LogLoss衡量的是预测概率分布和真实概率分布的差异性,取值越小越好。与AUC不同,LogLoss对预测概率敏感。

对数损失对应的二分类的计算公式为:

LogLoss=−1N∑i=1N(yi⋅log⁡pi+(1−yi)⋅log⁡(1−pi))LogLoss = - \frac{1}{N} \sum_{i=1}^N{(y_i \cdot \log{p_i}+(1-y_i) \cdot \log(1-p_i))}LogLoss=N1i=1N(yilogpi+(1yi)log(1pi))

其中N为样本数,yi∈{0,1}y_i \in { \{ 0,1 \} }yi{0,1}yiy_iyi为真实值,pip_ipi为第i个样本预测为1的概率,pip_ipi为预测值。

对数损失在多分类问题中也使用广泛,其计算公式为:

LogLoss=−1N⋅1C∑i=1N∑j=1Cyij⋅log⁡pijLogLoss = - \frac{1}{N} \cdot \frac{1}{C} \sum_{i=1}^N\sum_{j=1}^C{ y_{ij} \cdot \log{p_{ij} }}LogLoss=N1C1i=1Nj=1Cyijlogpij

其中,N为样本数,C为类别数,yijy_{ij}yij表示第i个样本的类别j的分类标签,pijp_{ij}pij表示第i个样本的类别j的概率。

LogLoss和AUC的区别

  • LogLoss主要是评估是否准确,AUC是用来评估是把正样本排到前面的能力,评估的方面不一样。
  • LogLoss主要评估整体准确性,多用于数据平衡的情况。AUC用来评估数据不平衡情况下模型的准确度。
  • 如果是平衡的分类问题,那么AUC和LogLoss都可以。


总结


通过对比上面的评估指标,总结概况如下:

  • 精确率(Precision)是指在所有系统判定的“真”的样本中,确实是真的的占比。
  • 召回率(Recall)是指在所有确实为真的样本中,被判为的“真”的占比。
  • F1值是为了综合考量精确率和召回率而设计的一个指标。
  • MCC 描述了预测结果与实际结果之间的相关系数。
  • TPR(真阳性率)的定义,跟Recall一样。
  • FPR(假阳性率),又被称为误诊率,就是所有确实为“假”的样本中,被误判真的样本。
  • ROC曲线展示的是 TPR 与 FPR的曲线;与之对应的是PR曲线,展示的是Precision 与 Recall的曲线。
  • AUC 为ROC 曲线下的面积, 这个面积的数值介于0到1之间, 能够直观的评价出分类器的好坏, AUC的值越大, 分类器效果越好。
  • 对数损失是对预测概率的似然估计,衡量的是预测概率分布和真实概率分布的差异性。

对于最终分类指标的选择,在不同数据集,不同场景,不同时间下都会有不同的选择。对于二分类问题,通常用 AUC,而对于多分类,通常看 F1 值。

相关文章
|
2月前
|
数据采集 算法 数据可视化
基于Python的k-means聚类分析算法的实现与应用,可以用在电商评论、招聘信息等各个领域的文本聚类及指标聚类,效果很好
本文介绍了基于Python实现的k-means聚类分析算法,并通过微博考研话题的数据清洗、聚类数量评估、聚类分析实现与结果可视化等步骤,展示了该算法在文本聚类领域的应用效果。
|
11天前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
在 Python 编程中,算法的性能至关重要。本文将带您深入了解算法复杂度的概念,包括时间复杂度和空间复杂度。通过具体的例子,如冒泡排序算法 (`O(n^2)` 时间复杂度,`O(1)` 空间复杂度),我们将展示如何评估算法的性能。同时,我们还会介绍如何优化算法,例如使用 Python 的内置函数 `max` 来提高查找最大值的效率,或利用哈希表将查找时间从 `O(n)` 降至 `O(1)`。此外,还将介绍使用 `timeit` 模块等工具来评估算法性能的方法。通过不断实践,您将能更高效地优化 Python 程序。
28 4
|
3月前
|
算法 搜索推荐 开发者
别再让复杂度拖你后腿!Python 算法设计与分析实战,教你如何精准评估与优化!
【7月更文挑战第23天】在Python编程中,掌握算法复杂度—时间与空间消耗,是提升程序效能的关键。算法如冒泡排序($O(n^2)$时间/$O(1)$空间),或使用Python内置函数找最大值($O(n)$时间),需精确诊断与优化。数据结构如哈希表可将查找从$O(n)$降至$O(1)$。运用`timeit`模块评估性能,深入理解数据结构和算法,使Python代码更高效。持续实践与学习,精通复杂度管理。
54 9
|
2月前
|
机器学习/深度学习 算法 搜索推荐
支付宝商业化广告算法问题之在DNN模型中,特征的重要性如何评估
支付宝商业化广告算法问题之在DNN模型中,特征的重要性如何评估
|
3月前
|
机器学习/深度学习 数据采集 算法
Python实现贝叶斯岭回归模型(BayesianRidge算法)并使用K折交叉验证进行模型评估项目实战
Python实现贝叶斯岭回归模型(BayesianRidge算法)并使用K折交叉验证进行模型评估项目实战
|
4月前
|
机器学习/深度学习 算法
GBDT算法超参数评估(一)
GBDT(Gradient Boosting Decision Tree)是一种强大的机器学习技术,用于分类和回归任务。超参数调整对于发挥GBDT性能至关重要。其中,`n_estimators`是一个关键参数,它决定了模型中弱学习器(通常是决策树)的数量。增加`n_estimators`可以提高模型的复杂度,提升预测精度,但也可能导致过拟合,并增加训练时间和资源需求。
|
4月前
|
机器学习/深度学习 算法
GBDT算法超参数评估(二)
GBDT算法超参数评估关注决策树的不纯度指标,如基尼系数和信息熵,两者衡量数据纯度,影响树的生长。默认使用基尼系数,计算快速,而信息熵更敏感但计算慢。GBDT的弱评估器默认最大深度为3,限制了过拟合,不同于随机森林。由于Boosting的内在机制,过拟合控制更多依赖数据和参数如`max_features`。相比Bagging,Boosting通常不易过拟合。评估模型常用`cross_validate`和`KFold`交叉验证。
|
4月前
|
算法 物联网 调度
操作系统调度算法的演进与性能评估
本文深入探讨了操作系统中进程调度算法的发展轨迹,从早期的先来先服务(FCFS)到现代的多级队列和反馈控制理论。通过引用实验数据、模拟结果和理论分析,文章揭示了不同调度策略如何影响系统性能,特别是在响应时间、吞吐量和公平性方面。同时,本文也讨论了在云计算和物联网等新兴领域,调度算法面临的挑战和未来的发展方向。
|
1天前
|
传感器 算法 C语言
基于无线传感器网络的节点分簇算法matlab仿真
该程序对传感器网络进行分簇,考虑节点能量状态、拓扑位置及孤立节点等因素。相较于LEACH算法,本程序评估网络持续时间、节点死亡趋势及能量消耗。使用MATLAB 2022a版本运行,展示了节点能量管理优化及网络生命周期延长的效果。通过簇头管理和数据融合,实现了能量高效和网络可扩展性。
|
28天前
|
算法 BI Serverless
基于鱼群算法的散热片形状优化matlab仿真
本研究利用浴盆曲线模拟空隙外形,并通过鱼群算法(FSA)优化浴盆曲线参数,以获得最佳孔隙度值及对应的R值。FSA通过模拟鱼群的聚群、避障和觅食行为,实现高效全局搜索。具体步骤包括初始化鱼群、计算适应度值、更新位置及判断终止条件。最终确定散热片的最佳形状参数。仿真结果显示该方法能显著提高优化效率。相关代码使用MATLAB 2022a实现。
下一篇
无影云桌面