在分类数据集类别分布不平衡的情况下,机器学习技术往往会失效或给出具有误导性的乐观性能。
原因是许多机器学习算法设计用于处理每个类别具有相等数量观测值的分类数据。当情况并非如此时,算法可能会认为少数样本不重要,可以忽略以实现良好性能。
数据采样提供了一系列技术,用于转换训练数据集,以平衡或更好地平衡类别分布。一旦平衡,标准机器学习算法可以直接在转换后的数据集上进行训练,无需任何修改。这使得不平衡分类的挑战,即使是类别分布严重不平衡的情况,也可以通过数据准备方法来解决。
有许多不同类型的数据采样方法可以使用,并且没有一种单一的最佳方法适用于所有分类问题和所有分类模型。就像选择预测模型一样,需要仔细的实验来发现最适合您项目的方法。
在本教程中,您将发现一套可用于平衡不平衡分类数据集的数据采样技术。
完成本教程后,您将了解:
- 使用不平衡分类数据集进行机器学习的挑战。
- 使用数据采样技术平衡倾斜的类别分布。
- 过采样、欠采样和组合数据采样方法概述。
通过我的新书《使用Python进行不平衡分类》**开启您的项目**,其中包括**分步教程**和所有示例的**Python源代码文件**。
让我们开始吧。

不平衡分类数据重采样方法概述
图片来自Bernard Spragg. NZ,保留部分权利。
教程概述
本教程分为三个部分;它们是:
- 类别分布不平衡的问题
- 通过数据采样平衡类别分布
- 流行数据采样方法概述
- 过采样技术
- 欠采样技术
- 组合技术
类别分布不平衡的问题
不平衡分类涉及数据集的类别分布不均等。
这意味着训练数据集中属于每个类别的样本数量各不相同,通常差异很大。少数类别与多数类别之间存在严重倾斜的类别分布(例如1:10、1:1000甚至1:10000)并不少见。
……我们将不平衡学习定义为在数据表示和信息提取过程中,处理严重数据分布倾斜,以开发有效的决策边界,从而支持决策过程的学习过程。
— 2013年,《不平衡学习:基础、算法和应用》第1页。
尽管通常以两类分类问题来描述,但类别不平衡也影响那些具有两个以上类别,可能包含多个少数类别或多个多数类别的数据集。
不平衡分类数据集的主要问题是标准机器学习算法在其上表现不佳。许多机器学习算法依赖于训练数据集中的类别分布来衡量模型在进行预测时观察每个类别样本的可能性。
因此,许多机器学习算法,如决策树、k近邻和神经网络,会因此了解到少数类别不如多数类别重要,并会更多地关注多数类别并表现更好。
不平衡数据集的症结在于,标准分类学习算法通常偏向于多数类别(称为“负面”),因此少数类别实例(称为“正面”类别)的误分类率更高。
— 2018年,《从不平衡数据集中学习》第79页。
这是一个问题,因为在不平衡分类问题中,少数类别正是我们最关心的类别。
原因是多数类别通常反映正常情况,而少数类别则代表诊断、故障、欺诈或其他类型异常情况的正面案例。
想要开始学习不平衡分类吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
通过数据采样平衡类别分布
解决不平衡分类问题最流行的方案是改变训练数据集的组成。
旨在改变训练数据集中类别分布的技术通常被称为采样方法或重采样方法,因为我们正在对现有数据样本进行采样。
采样方法似乎是社区中主要的处理方式,因为它们以直接的方式解决了不平衡学习问题。
— 2013年,《不平衡学习:基础、算法和应用》第3页。
采样方法如此普遍的原因在于它们易于理解和实现,并且一旦应用于转换训练数据集,就可以直接使用一系列标准机器学习算法。
这意味着,为平衡(或大部分平衡)分类开发的数十或数百种机器学习算法中的任何一种,都可以在训练数据集上进行拟合,而无需进行任何修改以适应观测值的不平衡。
基本上,我们不是让模型处理不平衡,而是尝试平衡类别频率。采取这种方法消除了困扰模型训练的根本不平衡问题。
— 2013年,《应用预测建模》第427页。
像朴素贝叶斯分类器这样的机器学习算法从训练数据集中学习观察每个类别的样本的可能性。通过在人工地具有更平等类别分布的采样训练数据集上拟合这些模型,它们可以学习一个偏差较小的先验概率,并转而关注每个输入变量的细节(或证据)来区分类别。
有些模型使用先验概率,例如朴素贝叶斯和判别分析分类器。除非手动指定,否则这些模型通常从训练数据中获取先验值。使用更平衡的先验或平衡的训练集可能有助于处理类别不平衡。
— 2013年,《应用预测建模》第426页。
采样只在训练数据集上进行,即算法用于学习模型的那个数据集。它不在保留测试或验证数据集上进行。原因是目的不是为了消除模型拟合中的类别偏差,而是继续在真实且代表目标问题领域的数据上评估所得模型。
因此,我们可以将数据采样方法视为解决了训练数据集中相对类别不平衡的问题,而忽略了问题领域中不平衡的根本原因。这便是少数类别中所谓的相对稀有性和绝对稀有性之间的区别。
采样方法是处理不平衡数据的一种非常流行的方法。这些方法主要用于解决相对稀有性问题,但不解决绝对稀有性问题。
— 2013年,《不平衡学习:基础、算法和应用》第29页。
在通过删除或合成样本转换后的数据集上评估模型,可能会提供具有误导性且可能过于乐观的性能估计。
在训练数据集上使用的数据采样主要有两种类型:过采样和欠采样。在下一节中,我们将介绍每种类型中流行的方法,以及结合多种方法的方法。
流行数据采样方法概述
为了调整训练数据集的类别分布,有数十甚至数百种数据采样方法可供选择。
没有最佳的数据采样方法,就像没有最佳的机器学习算法一样。这些方法的行为取决于学习算法的选择以及训练数据集的密度和组成。
……在许多情况下,采样可以减轻不平衡造成的问题,但在各种方法中没有明显的赢家。此外,许多建模技术对采样的反应不同,这进一步使关于使用何种程序的简单指导变得复杂。
— 2013年,《应用预测建模》第429页。
因此,重要的是仔细设计实验,测试和评估一系列不同的方法以及某些方法的不同配置,以发现最适合您的特定项目的方法。
尽管有许多技术可供选择,但可能有十几种更为流行且平均而言更成功。在本节中,我们将介绍这些方法,并将其组织成过采样、欠采样和组合方法的粗略分类。
这方面的代表性工作包括随机过采样、随机欠采样、通过数据生成进行合成采样、基于聚类的采样方法以及采样和提升的结合。
— 2013年,《不平衡学习:基础、算法和应用》第3页。
以下各节回顾了一些更流行的方法,它们以二元(两类)分类问题的背景进行描述,这是一种常见做法,尽管大多数方法可以直接使用或适用于具有两个以上类别的不平衡分类。
这里的列表主要基于scikit-learn友好库imbalanced-learn中可用的方法。有关数据采样方法的更长列表,请参阅2018年书籍《从不平衡数据集中学习》的第5章“数据层面预处理方法”。
您最喜欢哪种数据采样技术?
我是否遗漏了好的方法?
在下面的评论中告诉我。
过采样技术
过采样方法复制少数类别中的样本或从少数类别中的样本合成新样本。
一些更广泛使用和实现的过采样方法包括:
- 随机过采样
- 合成少数类别过采样技术 (SMOTE)
- 边界-SMOTE
- 基于SVM的边界过采样
- 自适应合成采样 (ADASYN)
让我们更仔细地看看这些方法。
最简单的过采样方法涉及随机复制训练数据集中少数类别的样本,这被称为**随机过采样**。
最流行且或许最成功的过采样方法是**SMOTE**;它是“合成少数类过采样技术”的缩写。
SMOTE 的工作原理是选择特征空间中彼此接近的样本,在特征空间中这些样本之间画一条线,然后沿着这条线抽取一个新样本作为点。
SMOTE 方法有许多扩展,旨在更具选择性地合成多数类别中的样本类型。
**边界SMOTE**涉及到选择那些被错误分类的少数类实例,例如使用k-近邻分类模型,并且只生成“_难以_”分类的合成样本。
**边界过采样**是SMOTE的一种扩展,它将SVM拟合到数据集上,并使用支持向量定义的决策边界作为生成合成样本的基础,其思想仍然是决策边界是需要更多少数类别样本的区域。
**自适应合成采样(ADASYN)**是SMOTE的另一个扩展,它生成与少数类别样本密度成反比的合成样本。它旨在在少数类别样本密度低的特征空间区域生成合成样本,而在密度高的区域生成较少或不生成样本。
欠采样技术
欠采样方法删除或选择多数类别中的一部分样本。
一些更广泛使用和实现的欠采样方法包括:
- 随机欠采样
- 凝聚最近邻规则 (CNN)
- 近邻欠采样
- Tomek链接欠采样
- 编辑最近邻规则 (ENN)
- 单边选择 (OSS)
- 邻域清洗规则 (NCR)
让我们更仔细地看看这些方法。
最简单的欠采样方法涉及随机删除训练数据集中多数类别的样本,这被称为随机欠采样。
一类技术涉及从多数类别中选择一个鲁棒且具有代表性的子集样本。
**凝聚最近邻**规则,简称CNN,旨在减少k-最近邻算法所需的内存。它的工作原理是枚举数据集中的样本,只有当它们不能被当前存储内容正确分类时才将其添加到存储中,并且可以在所有少数类别样本都已添加到存储后,应用于减少多数类别中的样本数量。
**近邻(Near Miss)**是指一系列使用KNN从多数类别中选择样本的方法。NearMiss-1选择与少数类别中最接近的三个样本的平均距离最小的多数类别样本。NearMiss-2选择与少数类别中最远的三个样本的平均距离最小的多数类别样本。NearMiss-3则涉及为少数类别中的每个样本选择给定数量的最接近的多数类别样本。
另一类技术涉及从多数类别中选择要删除的样本。这些方法通常包括识别那些难以分类的样本,从而给决策边界增加模糊性。
最广为人知的删除式欠采样方法可能就是**Tomek链接**,最初是作为凝聚最近邻规则的扩展而开发的。Tomek链接指的是训练数据集中一对样本,它们互为最近邻(在特征空间中距离最小)且属于不同类别。Tomek链接通常是沿着类别边界发现的被错误分类的样本,多数类别中的样本会被删除。
**编辑最近邻**规则,简称ENN,是另一种选择要删除样本的方法。该规则涉及使用k=3个最近邻来定位数据集中被错误分类的样本并将其删除。
ENN 过程可以在相同数据集上重复多次,更好地完善多数类样本的选择。这个扩展最初被称为“无限编辑”,尽管它更常被称为重复编辑最近邻。
除了“选择保留”与“选择删除”两类欠采样方法之外,还有一些欠采样方法结合了这两种方法。
**单边选择(One-Sided Selection,OSS)**是一种结合了Tomek链接和凝聚最近邻(CNN)规则的欠采样技术。Tomek链接方法用于移除类别边界上的噪声样本,而CNN用于移除多数类别密度内部的冗余样本。
**邻域清洗规则(Neighborhood Cleaning Rule,NCR)**是另一种组合欠采样技术,它结合了凝聚最近邻(CNN)规则来移除冗余样本,以及编辑最近邻(ENN)规则来移除噪声或模糊样本。
组合技术
尽管单独使用过采样或欠采样方法对训练数据集进行处理可以有效,但实验表明,将这两种技术结合使用通常可以使在转换后的数据集上拟合的模型获得更好的整体性能。
一些更广泛使用和实现的数据采样方法组合包括:
- SMOTE和随机欠采样
- SMOTE和Tomek链接
- SMOTE和编辑最近邻规则
让我们更仔细地看看这些方法。
SMOTE可能是最流行和广泛使用的过采样技术。因此,它通常与各种欠采样方法中的一种配对使用。
最简单的配对是SMOTE与随机欠采样结合,在提出该方法的论文中,建议其表现优于单独使用SMOTE。
通常将SMOTE与一种从数据集中选择要删除样本的欠采样方法配对使用,该过程在SMOTE之后应用于数据集,从而允许对少数和多数类别都应用编辑步骤。其目的是从两个类别中移除类别边界上的噪声点,这似乎对在转换后的数据集上拟合的分类器的性能有更好的影响。
两个流行的例子是先使用SMOTE,然后删除Tomek链接;以及先使用SMOTE,然后删除那些通过KNN模型错误分类的样本,即所谓的编辑最近邻规则。
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
论文
- SMOTE:合成少数过采样技术, 2011.
- 几种平衡机器学习训练数据方法的行为研究 (A Study of the Behavior of Several Methods for Balancing Machine Learning Training Data), 2004.
书籍
- 应用预测建模, 2013.
- 从不平衡数据集中学习 (Learning from Imbalanced Data Sets), 2018.
- 不平衡学习:基础、算法与应用 (Imbalanced Learning: Foundations, Algorithms, and Applications), 2013.
文章
总结
在本教程中,您发现了一套可用于平衡不平衡分类数据集的数据采样技术。
具体来说,你学到了:
- 使用不平衡分类数据集进行机器学习的挑战。
- 使用数据采样技术平衡倾斜的类别分布。
- 流行数据采样方法概述,包括过采样、欠采样和组合方法。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
这些真的很有帮助,因为我大部分工作都在高度不平衡的数据中。一旦你通过交叉验证测试工具选择了ML管道,你会用整个不平衡数据集训练你的最终生产模型,还是应用你在验证期间使用的相同采样方法?
很高兴听到这个消息。
正确。使用交叉验证估算性能,然后将最终模型拟合到所有数据上并开始进行预测。
一项很棒的调查!关于这里的“所有数据”,您能更具体地说明一下吗:是不平衡的所有数据还是重采样后的平衡数据?
最终模型是在所有数据上拟合的——整个数据集都用作训练数据集。
更多信息在这里
https://machinelearning.org.cn/train-final-machine-learning-model/
谢谢杰森。我的理解中仍然缺少一部分——(1)当我们使用重采样数据(已平衡)来训练模型时,我们希望模型学得更好,对测试数据(不平衡)预测得更好。那么(2)在最终模型中,如果我们再次使用整个数据集(不平衡)来训练它,模型会退步到较差的状态吗?我能想到的唯一区别是,在阶段(1)中,我们可能会调整超参数,使模型对数据倾斜的敏感度降低。这是对的吗?还是我错过了什么?
不,最终模型是使用你在交叉验证期间选择的任何方案进行拟合的,例如,通过过采样/欠采样使其平衡。
嗨,Jason,
文章写得很好,内容也很棒!显然,实现更好的类别平衡有许多可能的途径,包括欠采样、过采样、组合采样、重采样数据中的样本数量以及各种方法。
我正在尝试思考一个好的实验来确定最佳采样策略,我很想知道您对此的看法。
我个人一直在考虑使用浅层决策树的f1分数/对数损失来评估不同的选项。
谢谢。
从一个鲁棒的测试工具开始,然后用不同的比例评估不同的方法。大多数可能都会给出类似的结果。
您好。我不理解CNN中“存储”一词的含义。您能简单介绍一下吗?谢谢!
存储只是样本的集合,根据算法规则进行添加/删除。
我建议阅读“延伸阅读”部分中列出的相关论文。
你好 Jason Brownlee
非常感谢您的文章
如果数据包含500个少数类实例和2000个多数类实例,我希望应用相似性技术来去除冗余并对数据进行欠采样。
我可以在少数类和多数类上应用相似性技术,但以不同的速率进行,从而降低维度并改进分类吗?
新的欠采样实例的速率是否有作用,还是取决于尝试和测试?
是否可以将多数类欠采样到与少数类实例数量相等?
“相似性”技术是什么?
是的,您可以按不同的速率,依次对每个类别应用不同的数据采样技术。
我给出了许多例子,也许可以从这里开始
https://machinelearning.org.cn/combine-oversampling-and-undersampling-for-imbalanced-classification/
您好杰森,我可以问您一个问题吗?有时采样技术对轻微不平衡的数据集可能没有用,这是可能的吗?提前感谢您。
是的,有时数据采样对某些问题没有帮助。
嗨 Jason
感谢您的所有工作,忠实粉丝。
我有一个关于处理不平衡数据集技术的问题,我们是否应该始终关注使训练集和测试集都能显著代表整体人群?
如果您有相关指南,将非常有帮助。
是的。否则你的模型将无法工作,或者你无法判断它是否正在工作。
此外,就它们代表原始人群的分层分布而言。
我有一个问题,如果我们对采样应用bagging方法,样本是否不相交,负样本可以在两个子样本中出现吗?
嗨,Umer……以下内容可能有助于澄清:
https://machinelearning.org.cn/bagging-and-random-forest-ensemble-algorithms-for-machine-learning/
嗨,Jason,
对于决策树类型的不平衡分类,您会推荐哪种方法?有多种选择,我感到困惑。
嗨,Balazs……您可能会发现以下内容很有帮助:
https://machinelearning.org.cn/framework-for-imbalanced-classification-projects/