为机器学习模型选择正确的度量评估(第二部分)

2024-06-21 09:38

本文主要是介绍为机器学习模型选择正确的度量评估(第二部分),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”


作者:Alvira Swalin

编译:ronghuaiyang

前戏

今天是第二部分,分类的度量。


本系列的第二部分将重点讨论分类指标

在第一部分中,我们讨论了回归中使用的一些重要指标、它们的优缺点和用例。这一部分将着重于分类中常用的度量标准,为什么我们应该在上下文中选择其中的一些。

640?wx_fmt=png

定义

在讨论每种方法的优缺点之前,让我们首先了解分类问题中使用的基本术语。如果你已经熟悉这些术语,可以跳过本节。

640?wx_fmt=png

召回率或敏感性或TPR(真阳率):在全部真实阳性中正确识别为阳性的项目数量- TP/(TP+FN)

特异性或TNR(真阴率):在总的阴性中正确识别为阴性的项目数量- TN/(TN+FP)

精度:在确定为阳性的总项目中,正确确定为阳性的项目数量- TP/(TP+FP)

假阳率或I型错误:在全部真阴性中错误识别为阳性的项目数量- FP/(FP+TN)

假阴率或II类错误:在全部真阳性中错误识别为阴性的项目数量- FN/(FN+TP)

640?wx_fmt=jpeg

  • 混淆矩阵

640?wx_fmt=png

  • F1分数:是给出的精度和召回率的调和平均值

    F1 = 2PrecisionRecall/(Precision + Recall)

  • 准确性:分类正确总项目的百分比- (TP+TN)/(N+P)

ROC-AUC Score

ROC-AUC分数的概率解释是,如果你随机选择一个正样本和一个负样本,根据分类器,正样本排在负样本前面的概率由AUC给出。在这里,排序是根据预测值的顺序确定的。

640?wx_fmt=png

在数学上,它是由灵敏度曲线(TPR) vs FPR(1-specificity)下的面积来计算的。理想情况下,我们希望有高敏感性和高特异性,但在现实场景中,敏感性和特异性之间总是存在权衡。


ROC-AUC的一些重要特征是:

  • 取值范围从0到1。而对于平衡数据,随机分类器的auc评分为0.5

  • ROC-AUC评分独立于设定的分类阈值,因为它只考虑每个预测的秩,不考虑其绝对值。F1分数不一样,在概率输出的情况下,它需要一个阈值。

Log-Loss

Log-loss是一种精度度量,它结合了概率置信度的思想,由以下二元类的表达式给出:

640?wx_fmt=png

它考虑到你的预测的不确定性基于它与实际标签的差异。在最坏的情况下,假设所有观测值都是0.5。所以log-loss就变成-log(0.5)= 0.69。因此,我们可以说,考虑到实际概率,任何大于0.6的模型都是非常糟糕的。

案例1

Log-loss 和 ROC 和 F1的对比

640?wx_fmt=png

考虑情形1(平衡数据),看起来模型1在预测绝对概率方面做得更好,而模型2在根据观测值的真实标签对其进行排序方面做得最好。让我们用实际分数来验证:

640?wx_fmt=png

如果考虑log-loss,模型2给出log-loss的高值是最糟糕的,因为绝对概率与实际标签有很大的差异。但这与F1和AUC评分完全不一致,其中模型2的准确率为100%。此外,你还需要注意,随着阈值的不同,F1分数也在变化,默认阈值0.5更倾向于模型1而不是模型2。

由以上例子得出的推论(平衡数据集):

如果你关心的是绝对概率差,那就用log-loss吧

  • 如果你只关心最后的类预测,你不想调整阈值,去AUC评分

  • f1分数对阈值很敏感,在比较模型之前,你需要先对其进行优化

案例2

如何处理不均衡数据集?

640?wx_fmt=png

这两种模型的唯一区别是它们对观测结果13和14的预测。模型1是在样本13(标签为0)的分类上做的更好,而模型2在样本14(标签为1)的分类上做的更好。我们的目标是看哪个模型实际捕获的不同分类不平衡类更好(样本很少的类别,这里是标签1)。在欺诈检测/垃圾邮件检测等问题,正样本很少,我们希望我们的模型能够正确地预测阳性类,因此我们有时会更喜欢那些能够对这些阳性标签进行分类的模型。

640?wx_fmt=png

显然在这种情况下log-loss是失败的,因为根据log-loss,这两个模型的性能是相同的。这是因为log-loss函数是对称的,不区分类。

F1评分和ROC-AUC评分均优于模型2和模型1。我们可以用这两种方法来处理类不平衡。但我们还需要进一步研究,看看他们对待类别不平衡的方式有何不同。

640?wx_fmt=png

在前面的例子中,我们看到正样本的标签很少。在第二个例子中,负样本标签很少。让我们看看F1分数和ROC-AUC如何区分这两种情况。

640?wx_fmt=png

ROC-AUC score处理少量负标签的方式与处理少量正标签的方式相同。这里需要注意的一件有趣的事情是,F1分数对于模型3和模型4几乎是相同的,因为正标签的数量很大,它只关心正标签的错误分类。

从上面的例子中得出的推论:

  • 如果你关系的是一个数量较少的类,而与它是正的还是负的无关,那么选择ROC-AUC分数。

什么时候用F1比ROC-AUC好?

当你的正类的数量很少,那么F1分数更有意义。这是欺诈检测中常见的问题,因为正面标签很少。我们可以通过下面的例子来理解这个语句。

我们可以看到,模型(1)在10K大小的数据集中预测100个真实阳性数据中的5个阳性,而另一个模型(2)预测100个真实阳性数据中的90个阳性。显然,在这种情况下,模型(2)比模型(1)做得更好。让我们看看F1分数和ROC-AUC分数是否能够捕捉到这种差异。

模型(1)F1评分= 2(1)(0.1)/1.1 = 0.095

模型(2)F1评分= 2(1)(0.9)/1.9 = 0.947

是的,F1分数的差异反映了模型的性能。

模型(1)的ROC-AUC = 0.5

模型(2)的ROC-AUC = 0.93

ROC-AUC也给模型1打了一个不错的分数,但这并不能很好地反映模型1的性能。因此,对于不平衡的数据集,在选择ROC-AUC时要非常小心。

对于多分类你应该用什么样的度量?

我们还有另外三种类型的非二进制分类:

多类:分类任务有两个以上的类,使输入被分类为其中一个类,并且只能分为一个类。示例:将一组水果图像分成以下任意一类—苹果、香蕉和橙子。

多标签:将样本分类为一组目标标签。例如:将博客标记为一个或多个主题,如技术、宗教、政治等。标签是孤立的,它们之间的关系并不重要。

层次分类:每个类别都可以与类似的类别分组在一起,创建元类,这些元类又可以分组,直到我们到达根级别(包含所有数据的集合)。例如文本分类和物体分类。有关更多细节,请参考这个博客

在本博客中,我们将只讨论第一类。

640?wx_fmt=png

正如你在上表中所看到的,我们大致有两种指标类型—微观平均和宏观平均,我们将讨论每种指标的优缺点。多类最常用的度量标准是F1分数、平均精度、log损失。目前还没有完善的针对多类的ROC-AUC评分。

多类的log-loss定义为:

640?wx_fmt=png

在微观平均法中,将不同集合的系统的真阳性、假阳性和假阴性相加,然后应用它们得到统计数据。

在宏观平均中,取系统在不同集合上的精度和召回率的平均值


如果存在类不平衡问题,最好使用微观平均值

640?wx_fmt=png— END—

英文原文:https://medium.com/usf-msds/choosing-the-right-metric-for-evaluating-machine-learning-models-part-2-86d5649a5428

640?wx_fmt=jpeg

请长按或扫描二维码关注本公众号

喜欢的话,请给我个好看吧640?wx_fmt=gif


这篇关于为机器学习模型选择正确的度量评估(第二部分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080866

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选

golang1.23版本之前 Timer Reset方法无法正确使用

《golang1.23版本之前TimerReset方法无法正确使用》在Go1.23之前,使用`time.Reset`函数时需要先调用`Stop`并明确从timer的channel中抽取出东西,以避... 目录golang1.23 之前 Reset ​到底有什么问题golang1.23 之前到底应该如何正确的

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ