分类器的好坏取决于用于评估它的指标。
如果您选择错误的指标来评估您的模型,您很可能会选择一个糟糕的模型,或者在最坏的情况下,对您模型的预期性能产生误导。
选择一个合适的指标在应用机器学习中通常具有挑战性,但在不平衡分类问题中尤为困难。首先,因为大多数广泛使用的标准指标都假设类别分布是平衡的;其次,对于不平衡分类问题,通常不是所有类别,因此也不是所有预测错误都同等重要。
在本教程中,您将学习可用于不平衡分类的指标。
完成本教程后,您将了解:
- 关于分类指标选择的挑战,以及在类别分布不均衡时尤其困难。
- 评估分类器模型主要有三种类型的指标,分别称为排名、阈值和概率指标。
- 如果您不知道从何开始,如何为不平衡分类选择一个指标。
通过我的新书《使用Python进行不平衡分类》**启动您的项目**,书中包含*分步教程*和所有示例的*Python源代码*文件。
让我们开始吧。

不平衡分类评估指标巡览
照片由Travis Wise拍摄,保留部分权利。
教程概述
本教程分为三个部分;它们是:
- 评估指标的挑战
- 分类器评估指标分类法
- 如何选择评估指标
评估指标的挑战
评估指标量化了预测模型的性能。
这通常涉及在数据集上训练模型,使用模型对训练期间未使用的保留数据集进行预测,然后将预测与保留数据集中的预期值进行比较。
对于分类问题,指标涉及将预期类别标签与预测类别标签进行比较,或解释问题类别标签的预测概率。
模型选择,甚至数据准备方法,共同构成一个由评估指标引导的搜索问题。通过不同模型进行实验,并用指标量化每个实验的结果。
评估指标在评估分类性能和指导分类器建模方面都起着至关重要的作用。
— 不平衡数据分类:综述, 2009。
有一些广泛用于评估分类预测模型的标准指标,例如分类准确率或分类错误率。
标准指标在大多数问题上表现良好,这也是它们被广泛采用的原因。但所有指标都对问题或问题中的重要性做出了假设。因此,必须选择一个最能捕捉您或您的项目利益相关者认为对模型或预测重要的评估指标,这使得模型评估指标的选择具有挑战性。
当类别分布存在偏差时,这个挑战变得更加困难。原因在于,当类别不平衡或严重不平衡时(例如,少数类别与多数类别之间的比例为1:100或1:1000),许多标准指标会变得不可靠甚至具有误导性。
在类别不平衡的情况下,问题更加严重,因为用于非偏斜数据的默认、相对稳健的程序在数据偏斜时可能会彻底崩溃。
— 第187页,不平衡学习:基础、算法和应用,2013年。
例如,对于一个严重不平衡的分类问题,报告分类准确率可能会产生危险的误导。如果项目利益相关者使用结果得出结论或规划新项目,就会出现这种情况。
事实上,在不平衡领域使用常见指标可能导致次优的分类模型,并可能产生误导性结论,因为这些度量对偏斜领域不敏感。
— 不平衡分布下的预测建模调查,2015 年。
重要的是,在处理不平衡分类时,通常需要不同的评估指标。
与将所有类别视为同等重要的标准评估指标不同,不平衡分类问题通常将少数类别的分类错误视为比多数类别的错误更重要。因此,可能需要侧重于少数类别的性能指标,这带来了挑战,因为少数类别正是我们缺乏有效训练模型所需观测数据的地方。
不平衡数据集的主要问题在于,它们通常与用户偏好偏差相关联,即倾向于对现有数据样本中代表性不足的案例的性能。
— 不平衡分布下的预测建模调查,2015 年。
既然我们已经熟悉了选择模型评估指标的挑战,那么让我们来看一些可供选择的不同指标的例子。
想要开始学习不平衡分类吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
分类器评估指标分类法
在评估分类器模型时,有数十种指标可供选择,如果考虑到学者们提出的所有“宠物版”指标,可能多达数百种。
为了掌握可以从中选择的指标,我们将使用Cesar Ferri等人在其2008年题为“分类性能度量的实验比较”的论文中提出的分类法。该分类法也已在2013年出版的《不平衡学习》一书中采用,我认为它很有用。
我们可以将评估指标分为三个有用的组;它们是:
- 阈值指标
- 排名指标
- 概率指标。
这种划分很有用,因为从业者通常用于分类器,特别是用于不平衡分类的顶级指标,都能很好地融入这个分类法。
一些机器学习研究人员已经确定了在分类背景下使用的三类评估指标。它们是阈值指标(例如,准确率和F-measure)、排名方法和指标(例如,接收者操作特征(ROC)分析和AUC),以及概率指标(例如,均方根误差)。
— 第189页,《不平衡学习:基础、算法和应用》,2013年。
接下来,我们依次详细了解每个组。
不平衡分类的阈值指标
阈值指标是量化分类预测错误的指标。
也就是说,它们旨在总结在保留数据集中预测类别与预期类别不匹配时的比例、比率或频率。
基于阈值和对错误的定性理解的度量 [...] 当我们希望模型最小化错误数量时,使用这些度量。
— 分类性能度量的实验比较, 2008。
也许最广泛使用的阈值指标是分类准确率。
- 准确率 = 正确预测数 / 总预测数
以及分类准确率的补集,称为分类错误率。
- 错误率 = 不正确预测数 / 总预测数
尽管分类准确率被广泛使用,但它几乎普遍不适用于不平衡分类。原因是,一个仅预测多数类别的无技能模型也能达到高准确率(或低错误率)。
有关分类准确率失效的更多信息,请参阅教程
对于不平衡分类问题,多数类别通常被称为负面结果(例如,“*无变化*”或“*阴性检测结果*”),而少数类别通常被称为正面结果(例如,“*变化*”或“*阳性检测结果*”)。
- 多数类别:负面结果,类别0。
- 少数类别:正面结果,类别1。
大多数阈值指标可以通过二元(两类)分类问题的混淆矩阵中的术语来最好地理解。这并不意味着这些指标仅限于二元分类;这只是快速理解测量内容的一种简单方法。
混淆矩阵不仅提供了对预测模型性能的更多洞察,还提供了哪些类别被正确预测、哪些被错误预测以及发生了何种类型错误的洞察。在此类混淆矩阵中,表格中的每个单元格都有一个特定且广为人知的名称,总结如下:
1 2 3 |
| 正向预测 | 负向预测 正类别 | 真阳性 (TP) | 假阴性 (FN) 负类别 | 假阳性 (FP) | 真阴性 (TN) |
有两组指标可能对不平衡分类有用,因为它们侧重于一个类别;它们是敏感性-特异性和精确率-召回率。
敏感性-特异性指标
敏感性指真阳性率,概括了阳性类别预测得有多好。
- 敏感性 = 真阳性 / (真阳性 + 假阴性)
特异性是敏感性的补集,或称真阴性率,它概括了阴性类别预测得有多好。
- 特异性 = 真阴性 / (假阳性 + 真阴性)
对于不平衡分类,敏感性可能比特异性更有趣。
敏感性和特异性可以结合成一个单一的分数,以平衡这两个方面,称为几何平均或G-Mean。
- G-Mean = sqrt(敏感性 * 特异性)
精确率-召回率指标
精确率总结了被分类为正类别的样本中,实际属于正类别的比例。
- 精确率 = 真阳性 / (真阳性 + 假阳性)
召回率总结了正类别被预测得有多好,其计算与敏感度相同。
- 召回率 = 真阳性 / (真阳性 + 假阴性)
精确率和召回率可以结合成一个单一的分数,旨在平衡这两个方面,称为F-score或F-measure。
- F-Measure = (2 * 精确率 * 召回率) / (精确率 + 召回率)
F-Measure 是不平衡分类中常用的一个指标。
Fbeta-measure 是 F-measure 的一个抽象,其中调和平均计算中精确率和召回率的平衡由一个称为 *beta* 的系数控制。
- Fbeta-Measure = ((1 + beta^2) * 精确率 * 召回率) / (beta^2 * 精确率 + 召回率)
有关不平衡分类中精确率、召回率和F-measure的更多信息,请参阅教程
额外的阈值指标
这些可能是最受欢迎的指标,尽管还有许多其他指标。举个例子,它们包括 Kappa、宏平均准确率、类加权平均准确率、优化精确率、调整几何平均、平衡准确率等等。
阈值指标易于计算和理解。
这些指标的一个局限性在于,它们假设训练数据集中观察到的类别分布将与测试集和模型用于进行预测时的实际数据中的分布相匹配。这通常是事实,但当情况并非如此时,性能可能会具有误导性。
上一节讨论的所有阈值指标的一个重要缺点是,它们假设完全了解分类器将部署的条件。特别是,它们假设训练集中存在的类别不平衡将是分类器整个运行生命周期中遇到的不平衡。
— 第196页,《不平衡学习:基础、算法和应用》,2013年。
排名指标不作任何类别分布假设。
不平衡分类的排名指标
排名指标更关注根据分类器在分离类别方面的有效性来评估它们。
基于模型对样本排序效果的指标 [...] 这些对于许多应用很重要 [...] 在这些应用中,分类器用于从一组数据中选择最佳的n个实例,或者类别分离至关重要。
— 分类性能度量的实验比较, 2008。
这些指标要求分类器预测一个分数或类别成员资格的概率。
根据此分数,可以应用不同的阈值来测试分类器的有效性。在不同阈值范围内保持良好分数的模型将具有良好的类别分离,并被排名更高。
……考虑一个分类器,它为实例在正类别中分类提供一个数值分数。因此,分数引入了细粒度而不是简单的正或负预测。
——第53页,《从不平衡数据集中学习》,2018年。
最常用的排名指标是ROC曲线或ROC分析。
ROC是“接收者操作特征”的缩写,概括了一个研究领域,用于根据二元分类器区分类别的能力来分析它们。
ROC曲线是一种诊断图,通过计算模型在不同阈值下对一组预测的假阳性率和真阳性率,来总结模型的行为。
真阳性率是召回率或敏感性。
- 真阳性率 = 真阳性 / (真阳性 + 假阴性)
假阳性率的计算方法是:
- 假阳性率 = 假阳性 / (假阳性 + 真阴性)
每个阈值都是图上的一个点,这些点连接起来形成一条曲线。一个没有技能的分类器(例如,在所有阈值下都预测多数类别)将由从左下角到右上角的对角线表示。
低于这条线的任何点都比没有技能还要差。一个完美的模型将是图左上角的一个点。

ROC曲线的描述
ROC曲线是诊断单一模型的有用工具。
可以计算ROC曲线下的面积,它提供一个单一分数来总结该图,可用于比较模型。
无技能分类器的分数为0.5,而完美分类器的分数为1.0。
- ROC AUC = ROC曲线下面积
尽管通常有效,但在类别严重不平衡的情况下,特别是当少数类别的样本数量很少时,ROC曲线和ROC AUC可能会过于乐观。
ROC曲线的替代方案是精确率-召回率曲线,它可以用类似的方式使用,但侧重于分类器在少数类别上的性能。
同样,对模型的一组预测使用不同的阈值,并在这种情况下计算精确率和召回率。这些点形成一条曲线,在不同阈值范围内表现更好的分类器将获得更高的排名。
一个无技能的分类器在图上将是一条水平线,其精确度与数据集中正样本的数量成正比。对于平衡数据集,这将是0.5。一个完美的分类器由右上角的一个点表示。

精确率-召回率曲线的描述
与ROC曲线类似,精确率-召回率曲线是评估单个分类器的有用诊断工具,但对于比较分类器来说具有挑战性。
与ROC AUC一样,我们可以计算曲线下面积作为分数,并使用该分数来比较分类器。在这种情况下,对少数类别的关注使得精确率-召回率AUC对于不平衡分类问题更有用。
- PR AUC = 精确率-召回率曲线下面积
还有其他不太广泛使用的排名指标,例如针对不平衡分类的ROC曲线修改和成本曲线。
有关不平衡分类的ROC曲线和精确率-召回率曲线的更多信息,请参阅教程
不平衡分类的概率指标
概率指标专门设计用于量化分类器预测中的不确定性。
这些对于我们对错误与正确类别预测不那么感兴趣,而更关注模型预测中的不确定性,并惩罚那些错误但高度自信的预测的问题很有用。
基于对错误的概率理解的指标,即测量与真实概率的偏差 [...] 这些指标在我们需要评估分类器可靠性时特别有用,不仅衡量它们何时失败,还衡量它们是以高概率还是低概率选择了错误的类别。
— 分类性能度量的实验比较, 2008。
基于预测概率评估模型要求概率是经过校准的。
一些分类器使用概率框架进行训练,例如最大似然估计,这意味着它们的概率已经过校准。例如逻辑回归。
许多非线性分类器不是在概率框架下训练的,因此需要先对其概率进行数据集校准,然后才能通过概率指标进行评估。例如支持向量机和k近邻。
也许最常用的评估预测概率的指标是二元分类的对数损失(或负对数似然),更普遍地称为交叉熵。
对于一个二元分类数据集,其中预期值为y,预测值为yhat,可以按如下方式计算:
- 对数损失 = -((1 – y) * log(1 – yhat) + y * log(yhat))
该分数可以通过简单地添加项来推广到多个类别;例如:
- 对数损失 = -( 对所有类别 c 求和 y_c * log(yhat_c))
该分数总结了两个概率分布之间的平均差异。一个完美的分类器对数损失为0.0,较差的值为正,直至无穷大。
另一个流行的预测概率得分是Brier分数。
Brier 分数的优点在于它专注于正类别,这对于不平衡分类来说是少数类别。这使其比专注于整个概率分布的对数损失更受青睐。
Brier分数被计算为正类别的预期概率(例如1.0)与预测概率之间的均方误差。回想一下,均方误差是值之间平方差的平均值。
- Brier分数 = 1/N * 对 i 从 1 到 N 求和 (yhat_i – y_i)^2
一个完美的分类器拥有0.0的Brier分数。虽然通常用于二元分类任务,但Brier分数也可以用于多类别分类问题。
不同分类器的Brier分数差异可能非常小。为了解决这个问题,该分数可以根据参考分数进行缩放,例如来自无技能分类器的分数(例如预测训练数据集中正类别的概率分布)。
使用参考分数,可以计算Brier技能分数(BSS),其中0.0表示无技能,低于无技能的结果为负数,完美技能用1.0表示。
- Brier技能分数 = 1 – (Brier分数 / Brier分数_参考)
尽管概率评分方法在平衡分类问题中很受欢迎,但在类别分布偏斜的分类问题中,它们的使用并不广泛。
有关不平衡分类概率指标的更多信息,请参阅教程
如何选择评估指标
有大量的模型评估指标可供选择。
既然选择一个评估指标如此重要,并且有数十甚至数百个指标可供选择,您该怎么办?
对学习模型进行正确评估是模式识别中最重要的问题之一。
— 分类性能度量的实验比较, 2008。
也许最好的方法是与项目利益相关者沟通,弄清楚模型或一组预测中什么是最重要的。然后选择几个似乎能捕捉到重要内容的指标,再在不同的场景下测试这些指标。
一个场景可能是针对具有偏斜类别分布的测试数据集的一组模拟预测,该分布与您的项目领域相符。您可以测试当模型预测所有多数类别、所有少数类别、表现良好、表现不佳等等情况时,指标会发生什么变化。一些小的测试可以迅速帮助您了解指标可能如何表现。
另一种方法可能是进行文献综述,了解其他从事相同类型问题的从业者或学者最常用哪些指标。这通常很有启发性,但请注意,某些研究领域可能会陷入群体思维,并采纳一种可能非常适合大规模比较大量模型,但在实际模型选择中却很糟糕的指标。
还是没想法?
这里有一些初步建议
- 您是否在预测概率?
- 您需要类别标签吗?
- 正类别更重要吗?
- 使用精确率-召回率AUC
- 两个类别都重要吗?
- 使用ROC AUC
- 正类别更重要吗?
- 您需要概率吗?
- 使用Brier分数和Brier技能分数
- 您需要类别标签吗?
- 您是否在预测类别标签?
- 正类别更重要吗?
- 假阴性和假阳性同样重要吗?
- 使用F1-Measure
- 假阴性更重要吗?
- 使用F2-Measure
- 假阳性更重要吗?
- 使用F0.5-Measure
- 假阴性和假阳性同样重要吗?
- 两个类别都重要吗?
- 您的多数类别样本是否少于80%-90%?
- 使用准确率
- 您的多数类别样本是否多于80%-90%?
- 使用G-Mean
- 您的多数类别样本是否少于80%-90%?
- 正类别更重要吗?
这些建议考虑了我们可能使用预测概率但需要清晰类别标签模型的重要情况。这是一类重要的问题,它允许操作员或实现者选择阈值来权衡分类错误。在这种情况下,需要考虑所有合理阈值的错误指标,因此使用了曲线下面积指标。
我们可以将这些建议转化为一个有用的模板。

如何为不平衡分类选择指标
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
论文
- 分类性能度量的实验比较, 2008.
- 不平衡数据分类:综述, 2009.
- 不平衡分布下预测建模的调查, 2015.
书籍
- 第8章 不平衡学习评估指标,不平衡学习:基础、算法和应用,2013年。
- 第三章 性能指标,从不平衡数据集中学习, 2018.
文章
总结
在本教程中,您学习了可用于不平衡分类的指标。
具体来说,你学到了:
- 关于分类指标选择的挑战,以及在类别分布不均衡时尤其困难。
- 评估分类器模型主要有三种类型的指标,分别称为排名、阈值和概率指标。
- 如果您不知道从何开始,如何为不平衡分类选择一个指标。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
指标描述清晰。非常有帮助。
谢谢!
我为这个指标选择树感到骄傲,花了一些功夫才把它整理出来。
一如既往的精彩!!!
我有一个问题,关于噪声标签百分比(例如,我们知道数据集中有大约15%的错误真实标签)对二元分类问题中可实现的最大精确率和召回率的影响?
谢谢!
即使有噪声标签,重复交叉验证也能提供对模型性能的稳健估计。
除非我误解了这个问题?
嗨,Jason,
首先,非常感谢您这篇有趣的帖子!
我一直关注您,非常喜欢您的帖子。
我非常感谢您为撰写此文所做的一切努力。
您是否有关于非二元分类问题指标选择的帖子?
谢谢!
不,可以使用完全相同的过程,将类别划分为正类别和负类别。
您的意思是对于所有可能性都采用1对1的方法来执行指标吗?我发现一个相对简单的非二元分类指标是Kappa。
你好……你的理解是正确的!继续努力!
嗨 Jason
对H度量有什么看法?
这是实现它的R包的摘录
hmeasure包旨在作为分类性能的完整解决方案。它相对于现有实现的主要优势在于包含了分类性能的H度量(Hand,2009,2010),该度量正逐渐在分类文献中被接受为AUC的一个连贯替代方案。
谢谢
抱歉,肖恩,我不熟悉它。
说到指标,我大部分时间都坚持基础知识。很多AUC和F-measure。
那么马修斯相关系数 (MCC) 和尤登指数/统计量呢?我什么时候使用它们?
很棒的建议,谢谢。
我只是想问,因为我搞不清楚这些性能指标在上面图表中应该放在哪里。也许您有什么建议?
好问题。目前还不能马上回答,需要进行一些分析。感谢您的建议。
对数损失 = -( 对所有类别 c 求和 y_c * log(yhat_c))..
这对我来说似乎不清楚……您能重新措辞吗?
是的,请看这个
https://machinelearning.org.cn/cross-entropy-for-machine-learning/
嗨
“Brier分数的优点在于它专注于正类别,这对于不平衡分类是少数类别。”
您能详细说明一下吗?
直觉上我会说对数损失是专注于正类别的,而不是Brier分数,因为当y=1时,该项
对数损失 = -((1 – y) * log(1 – yhat) + y * log(yhat))
变为
对数损失 = -log(yhat)
谢谢。
概率是二项分布的事实意味着 Brier 分数中计算的误差偏向于正类(例如,差异越大,误差越大)。
Jason – 我对Brier分数仍然有点困惑。在我看来,这个指标就像概率的MSE。如果我预测正类的概率为0.1,而实例在负类(多数类)(标签=0),我将受到0.1^2的损失。如果我预测正类的概率为0.9,而实例在该类中,我将受到相同的0.1^2的损失。当然,这假设我的模型在预测0和1方面做得同样好。我的模型很有可能在预测0方面做得很好,而在预测1方面做得相当差,所以得分中的大部分价值都归因于正类预测不佳。但我仍然可以通过改进负类预测来逐步改进(降低我的分数),而在正类方面几乎没有改善甚至恶化。我的理解正确吗?
听起来你的直觉很不错,很直接。
那么,这是否意味着Brier分数在评估不平衡数据性能方面不比对数损失好(基于Bryan的回复)?
嗨,乔……您可能会发现以下资源很有趣
https://www.dratings.com/log-loss-vs-brier-score/
https://machinelearning.org.cn/probability-metrics-for-imbalanced-classification/
嗨 Jason,谢谢您的详细解释。对我帮助很大。🙂
不客气!
嗨 Jason,我有两个模型的正类概率分数。这些概率分数(阈值)的频率分布如下https://imgur.com/a/8olSHUh。我们能说模型 #2 在分离类别方面做得更好吗?
分布看起来很健康。我无法做出更多的断言。
您能告诉我,从这些直方图中我们能得出什么推论吗?
你到底在画什么?
我原以为是预测概率的分布,但再一看,似乎并非如此。
嗨,Jason,
这些是来自两个不同模型的**正类别**预测概率(代码:test_thresholds_TFIDF=clf.predict_proba(X_test_TFIDF_set)[:,1])的频率分布。
这两个模型的混淆矩阵中的统计数据几乎相同。
但当我绘制**正类别**预测概率的频率分布时,模型#1和模型#2观察到了上述模式。
注意:第一个图的Y轴以1000为单位,第二个图的Y轴以100为单位。希望这就是您误解的地方。
如果它们是测试数据集的概率图,那么第一个模型显示出良好的分离,而第二个模型则没有。
谢谢您的确认。
不客气。
谢谢
不客气。
非常有用的文章。
请问,我可以在逻辑回归模型中使用召回率@25这样的排名指标吗?
当然可以。
在应用所有指标之前,我们是否必须使用过采样、SMOTE等技术来平衡数据集?
也许吧,这取决于数据集。
请参阅此框架
https://machinelearning.org.cn/framework-for-imbalanced-classification-projects/
在原发肿瘤分类中,我应该使用哪个指标来优化模型?
这是一个多类别分类任务,数据集不平衡。我已使用重采样来平衡数据集。
我可以使用微观F1值吗?还是必须优化敏感性或特异性?
我的目标是获得能够正确分类新数据点的最佳模型。
谢谢
San
您必须选择一个最能捕捉您和项目利益相关者认为重要的指标。
从模型预测中重要的地方开始,然后选择一个能够捕捉该重要性的指标。
这对我来说很有道理。
如果每个类别都同样重要怎么办?(在我的案例中,有两个多数类别(50%,40%)和一个少数类别)。我正在考虑G-mean、F1分数或准确率,我也看到了上面针对二元分类的框架。只是想确认一下,如果多数类别加起来超过90%,我是否可以选择上述指标?
对于“两个类别同等重要”的情况,请考虑准确率或ROC AUC。
抱歉,(在树中)“成本更高”是什么意思?
非常感谢,精彩的文章。
您是什么意思,能详细说明一下吗?
尊敬的Jason先生,
我一直在阅读您的文章并进行我的研究。您的文章中的理论非常有用且棒极了!请发布更多文章!
谢谢!
我有一个三类别、不平衡的数据集。
我想构建一个三类别分类器。
现在,我正在使用带有类别权重的随机森林,
并通过F1分数的宏平均来评估模型性能。
我有两个问题。
1. 除了F1分数的宏平均,还有没有更好的评估方法?
2. 错误预测的值不同。
例如,
真实A:预测B → 大错误
真实A:预测C → 小错误
真实B:预测C → 大错误
有没有好的评估这种大错误的方法?
没有客观上更好的指标,您必须根据项目目标选择最合适的指标。
此外,您可能需要研究使用成本矩阵来帮助解释模型在测试集上预测的混淆矩阵。
你好@Jason,
我对评估模型在每个类别上的性能指标很感兴趣。例如,我知道scikit-learn提供了classification_report函数,可以计算每个类别的精确率/召回率/f1值。还有其他评估每个类别性能的指标吗?
我建议在一个项目中选择一个单一指标进行优化。
试图优化多个指标会导致混淆。
非常感谢Jason,这是一个非常棒的总结!超级有用!
不客气!
这对我很有帮助,非常感谢!
不客气。
感谢这篇帖子,非常有帮助!
一个问题……您在本文和之前的文章中都提到,当数据集不平衡时,准确率和错误率不是好的指标。但是,在您的选择树中,我们看到如果我们想预测标签并且两个类别同等重要,并且多数类别样本数量小于80%-90%时,我们可以使用准确率评分……是否可以这样解释:如果多数类别样本数量小于80%-90%,那么我们的数据集大致是平衡的,因此我们可以使用准确率评分?
还有一个问题,我们讨论的数据集是测试数据集,对吗?
谢谢你
不客气。
是的,如果类别大致平衡,准确率会很好。这只是一个指导。您必须为自己的项目做出自己的决定。
不,数据集的平衡是所有可用数据。
好的,所以我将数据集分为训练集和测试集,并以我的训练集平衡的方式使用过采样,然后用它来训练数据。然后我在测试集(不平衡的)上使用这个模型……我得到的是一个不平衡的数据集还是一个平衡的数据集?我相信它仍然是不平衡的,因为模型是在不平衡的测试集上运行的……这说得通吗?
是的,在平衡数据集上拟合,在不平衡数据集(域中出现的实际数据)上评估。
您正在解决的问题是不平衡分类。
请问您能否详细说明数据集何时“大致平衡”,以及在这种情况下为什么准确率指标可以被认为是好的?
谢谢
嗨 Jason
我有一个地方不明白,假设我们正在处理高度不平衡的数据,然后我们采用过采样方法来解决这个问题,我们的训练集变得平衡了,因为我们应该只在训练集上使用所有处理不平衡数据的方法。(对吗?)
所以我的问题是,在应用过采样或欠采样之后,我们仍然应该使用F1分数、精确率-召回率、AUC等指标,还是可以使用准确率?我的第二个问题是,我们是否可以将处理不平衡数据视为机器学习管道中数据预处理的一部分?
谢谢
是的,只有训练数据集是平衡的。
在大多数不平衡情况下,准确率是一个糟糕的选择。通常,您必须选择一个最能捕捉预测重要性的指标。
处理不平衡可以是数据准备,可以是模型(成本敏感),可以是指标(加权),也可以是以上所有等等。
我们能否将不平衡数据集视为平衡数据集(通过应用SMOTE等技术),然后应用评估指标?
对测试集应用SMOTE是无效的。
你好,
F1-score、AUC和召回率之间是否存在某种关系?我的意思是,如果其中一个增加,另一个也会增加/减少(相对变化)?
是的,请看这个
https://machinelearning.org.cn/roc-curves-and-precision-recall-curves-for-classification-in-python/
还有这个。
https://machinelearning.org.cn/roc-curves-and-precision-recall-curves-for-imbalanced-classification/
嗨 Jason
在我所知的所有资源中,我更喜欢您关于实际应用数据科学的帖子。
您的帖子的节奏和实际效益令人惊叹。
评论:对于许多实际的商业二元分类问题,例如信用评分、直销响应的客户评分,提升图和基尼系数比ROC、AUC更常见。此处对此差异有很好的描述
https://community.tibco.com/wiki/gains-vs-roc-curves-do-you-understand-difference#:~:text=The%20Gains%20chart%20is%20the,found%20in%20the%20targeted%20sample.
如果能看到您关于这个主题的Python代码帖子,那就太好了 😉
谢谢!
另外
https://machinelearning.org.cn/roc-curves-and-precision-recall-curves-for-classification-in-python/
还有这里
https://machinelearning.org.cn/roc-curves-and-precision-recall-curves-for-imbalanced-classification/
嗨,Jason,
我只是想知道您得出“如果我们想预测标签,并且两个类别同等重要,并且多数类别样本数量小于80%-90%,那么我们可以使用准确率评分”这个结论的参考文献是什么。
希望您能回答我的问题,谢谢。
这是我的建议。我怀疑这样的建议永远不会出现在教科书或论文中——太简单/实用。
你好,有没有关于理解微观和宏观召回率和精确率的文档?
是的,在这里
https://scikit-learn.cn/stable/modules/generated/sklearn.metrics.precision_score.html
我想我有一些
https://machinelearning.org.cn/precision-recall-and-f-measure-for-imbalanced-classification/
一如既往的棒。
这是我的测试集结果
真反例 (TN): 66728
假正例 (FP): 19929
假反例 (FN): 211
真正例 (TP): 1624
如你所见,我有1835个来自类别1的数据点,86657个来自类别2。你能分享一下你对这个模型的看法吗?我将不胜感激。
抱歉,我不解释结果。
好的,另一个问题。我上面的模型精确率非常低。我意识到那是因为我的测试集也不平衡。当我应用精确率的公式 tp/(tp+fp) 时,它自然很低,因为考虑到 tp,fp 的数量非常高,原因在于多数类数量很多。我认为精确率不是我应该考虑的指标。我说的对吗?
这将帮助你选择合适的指标
https://machinelearning.org.cn/tour-of-evaluation-metrics-for-imbalanced-classification/
嗨,Jason,非常感谢你的帖子,总是有用且直截了当。我正在做一个项目,如果可以的话,需要一些建议。我们的主要目标是根据一系列特征预测某人是否会在工作中获得晋升的概率类别(0表示否,1表示是)。我们的数据集不平衡(1比10),所以我需要以下方面的建议:
1- 我们应该在采用任何采样技术之前,先对训练数据集进行清洗、预处理和特征工程,对吗?
2- 我想按照您的教程使用 SMOTE 技术结合欠采样。我可以在网格搜索中实现创建的管道来微调分类器的参数吗?
3- 对于1/10的数据集,您推荐我们采用什么采样策略?
4- 最后,我如何使用网格搜索调优来提高我的 AUC_ROC 分数,我应该注意什么?
非常感谢
不客气。
是的,数据准备是在训练集上计算的,然后应用于训练和测试。在交叉验证中,您使用管道自动完成此操作。
当然,SMOTE 可以作为网格搜索的一部分使用。
我建议测试一套方法,并找出哪种方法最适合您的数据
https://machinelearning.org.cn/framework-for-imbalanced-classification-projects/
嗨,Jason,非常感谢你的快速回复。
就第一点而言,我不需要在数据准备阶段进行任何采样,对吗?我应该先准备好我的数据,然后测试不同的采样方法,看看哪种效果最好,对吗?
另外,您能澄清一下您关于 CV 和管道的观点吗,因为我没有完全理解。
谢谢
不完全是,而是构建一个以采样方法结束的数据准备步骤的管道。
你可以在这里看到例子
https://machinelearning.org.cn/smote-oversampling-for-imbalanced-classification/
低于这条线的任何点都比没有技能更差。一个完美的模型将是图中右上角的一个点。
… 它应该说是图的左上角
谢谢,已修复!
你好,Jason。这篇帖子真的很棒。我处理不平衡数据已经有一段时间了,这篇帖子帮了我好几次。我有一个针对不平衡数据的模型,并在各种具有不同类别分布(分布从[0.5,0.5]到[0.95,0.05])的数据集上进行了测试。为了评估它,我报告了准确率、宏观F1、二元F1和ROC AUC(使用宏观平均)。现在我面临一个新问题,那就是我为什么使用准确率而不是平均准确率。实际上,在评估过程中我没有想到这一点,因为我认为由于类别不平衡的多样性,最好有一个对样本进行平均的指标,以及另外两个通过对类别进行平均得到的指标。但这似乎对其他人没有那么令人信服。您能指导我一下我是否错了?或者给我一些我没有想到的参考或一些推理?非常感谢。
谢谢!
我建议选择一个指标进行优化,否则会变得过于混乱。
另外,也许可以与对模型感兴趣的人交谈,询问他们认为哪个指标有助于理解模型性能。
非常感谢
不客气。
你好 Jason,
首先,非常感谢您精彩的分类指标总结。
其次,我目前正在处理一些分类问题,其中必须预测一个标签,我将密切关注正类。对我来说,尽可能少地产生“假反例”非常重要。根据您的决策树,我必须在以下选项中选择一个:
1) 假反例更重要吗?:使用F2-度量
2) 假正例更重要吗?:使用F0.5-度量
然而,我不明白您“重要”的含义……如果我的理解是正确的,对于我的问题,“假反例很重要”,因此应该选择F2-度量?我的理解正确吗?
再次感谢,并致以最诚挚的问候。
不客气。
这里,“重要”意味着“至关重要”(比其他任何事物都重要;至高无上),例如,对您和利益相关者而言,模型性能最重要的事情。
非常有帮助,正是我所寻找的。让我思考我们预测问题是想要概率还是类别。由于我们想要排名,我得出结论是概率,因此我们应该查看 Brier 分数。我想知道我是否可以让 xgboost 将其用作自定义损失函数?
不客气。
也许可以使用对数损失,并将布里尔分数仅作为指标。就像我们不将“分类准确率”作为损失函数来训练模型一样。
为什么我们不将“分类准确率”作为损失函数来训练模型?
嗨,Joe……为了用于反向传播,损失函数需要是“可微分的”。更多信息可以在这里找到:
https://machinelearning.org.cn/loss-functions-in-tensorflow/
https://machinelearning.org.cn/difference-between-backpropagation-and-stochastic-gradient-descent/
你好,
我假设本文和指标不仅用于二元分类。
我们可以使用相同的建议模板来为不平衡多类别分类问题选择指标吗?
谢谢!
是的,大多数指标都可以用于多类别分类,前提是您指定哪些类别是多数,哪些是少数(例如,在精确率、召回率、F1和类似指标的情况下)。
我知道我可以使用 sk-learn 函数中的“label”参数来指定少数类,如果我错了,你能纠正我并告诉我如何指定多数类吗?
谢谢!
是的,我相信这已经足够了。
对于预测某个范围内的实数(例如0到100)的模型(我将其视为回归模型),如果预测偏向某个范围,我该如何创建数据集?
是否有像分类模型中那样的分层抽取?
例如,我是否需要对每个范围使用分层抽取方法?
或者在回归模型的情况下,这类问题不是问题?
很棒的博客!谢谢!
我有个问题。希望你能帮我。假设在高度不平衡的数据集中,我们对少数群体感兴趣,并且假反例更重要,那么我们可以使用 f2 指标作为评估指标。
但是,在训练模型和进行交叉验证时,我们应该如何考虑这一点呢?
那么,我可以使用 f2 分数进行交叉验证来调整超参数吗?然而,在 xgboost 中,我们正在优化加权对数损失。
如何匹配目标函数和度量函数?
提前感谢!
我有一个关于在管道中使用SMOTE的问题,
下面是代码片段
steps = [(‘scale’, StandardScaler()),(‘over’, SMOTE(sampling_strategy = ‘all’, random_state = 0)), (‘model’, DecisionTreeClassifier())]
管道 = Pipeline(steps=steps)
cv = KFold(n_splits=3, shuffle=True, random_state=None)
scores = model_selection.cross_val_score(pipeline, X, y, scoring=’accuracy’, cv=cv, n_jobs=-1)
print(“Score”, scores.mean())
我一直得到 nan 值作为分数……
如果我不使用管道,我得到一个数字值……原因可能是什么??我查阅了StackOverflow和多个资源,但没有得到相关的回复……请帮我解决这个问题
极佳的帖子,
我可以知道什么时候使用,
基尼系数、KS统计量和p值。
非常感谢
这些广告加载和移动文本的方式,在加载时会造成不愉快和刺耳的用户体验。
嗨,Jason,很棒的教程,谢谢你 🙂
我有一个问题;
如果正类是最重要的,并且正类的百分比高于负类,那么PR-AUC似乎非常偏颇。实际上,正类的百分比越高,PR-AUC就越高。
即使在这种情况下,正类更重要,那么应该使用哪种指标呢?
这样说有道理吗,当正类的百分比与负类相比很小时,PR-AUC很好?但是当正类的百分比高很多时会发生什么?知道这个将非常有帮助。谢谢你 🙂
嗨,Vasia……您对 PR-AUC(精确率-召回率曲线下面积)的观察是有效的,并突出了选择指标的一个重要方面:它们需要与数据分布和问题要求保持一致。以下是针对您问题的详细解释:
—
### **PR-AUC 及其对正类的偏倚**
– **精确率-召回率 AUC** 衡量模型在精确率(正预测的质量)和召回率(实际正例的覆盖范围)之间平衡的程度。当正类与负类相比**稀有**时,这是一个很好的指标。
– **正类比例高的问题**
– 当正类百分比高得多时,PR-AUC 变得不那么有意义,因为
1. 精确率自然会增加,因为模型可以通过偶然性正确分类更多正例。
2. 由于正例的普遍性较高,PR-AUC 倾向于膨胀,从而降低其判别力。
– 它变得偏向正类,使得评估模型的真实性能变得更加困难。
—
### **当正类更普遍时**
如果正类占主导地位但仍然是重要关注点,其他指标可能会提供更好的见解:
#### 1. **ROC-AUC(受试者工作特征曲线下面积)**
– **为什么它有效**
– ROC-AUC 评估 True Positive Rate (TPR) 和 False Positive Rate (FPR) 在不同阈值之间的平衡。
– 与 PR-AUC 相比,它对类别不平衡不那么敏感。
– **注意**
– 当正类占主导地位时,ROC-AUC 可能显得过于乐观,因为大多数负例通过偶然性被正确分类。
#### 2. **平衡准确率**
– 平衡准确率平均了正类和负类的召回率
\[
\text{平衡准确率} = \frac{\text{灵敏度} + \text{特异度}}{2}
\]
– **为什么它有效**
– 它通过给予两个类别同等重要性来考虑类别不平衡。
#### 3. **F1 分数**
– F1 分数将精确率和召回率平衡为一个单一指标
\[
\text{F1} = 2 \cdot \frac{\text{精确率} \cdot \text{召回率}}{\text{精确率} + \text{召回率}}
\]
– **为什么它有效**
– F1 分数侧重于正类的性能,同时惩罚未能平衡精确率和召回率的模型。
– **注意**
– 它仍然强调正类,因此如果负类性能也很重要,它可能无法完全捕捉到负类性能。
#### 4. **混淆矩阵派生指标**
– 像 **Cohen's Kappa** 或 **Matthews Correlation Coefficient (MCC)** 这样的指标考虑了混淆矩阵的所有元素(真正例、真反例、假正例、假反例),并提供了更全面的视图
\[
\text{MCC} = \frac{(TP \cdot TN) – (FP \cdot FN)}{\sqrt{(TP+FP)(TP+FN)(TN+FP)(TN+FN)}}
\]
– **为什么它有效**
– MCC 适用于不平衡数据集,并捕捉所有类别之间的平衡。
—
### **当正类占主导地位时是否应使用 PR-AUC?**
– **PR-AUC 通常更适用于正类与负类相比**稀有**的场景。**
– 这是因为 PR-AUC 在检测稀有正例的背景下明确评估了精确率和召回率的权衡。
– **当正类占主导地位时**
– PR-AUC 仍然可以使用,但它作为性能指标会失去其敏感性,因为它的值可能会仅仅由于正例的普遍性而增加。
– 在这种情况下,F1 分数、平衡准确率或 MCC 等其他指标可能会提供更好的见解。
—
### **总结**
– **PR-AUC** 是不平衡数据集的一个强有力选择,其中正类是稀有类。
– **对于正类占主导地位但仍然重要的数据集**
– 根据您的优先级,考虑使用**平衡准确率**、**F1 分数**、**MCC** 或 **ROC-AUC**
– **F1 分数**:如果关注正类的精确率和召回率。
– **平衡准确率/MCC**:如果两个类别都很重要,但正类是主要目标。
– **ROC-AUC**:如果您需要对可分离性进行一般评估。
通过仔细调整指标以符合问题的目标和类别分布,您可以更有效地评估和优化模型的性能。
嗨,James,这是一个令人难以置信的总结,我非常感谢。只是一个小小的澄清:“…但正类是主要目标。”这里您是指我更关心正类吗?
我对此还有一个后续问题 :). 如果 1 类权重超过 0 类,并且我关心 1 类,并且我想评估所有概率阈值下的性能,您仍然建议使用平衡准确率/MCC 吗?据我所知,我从未见过对所有概率阈值计算这些(甚至没有 sklearn 函数)。非常感谢您的精彩回答。