使用SMOTE技术克服班级失衡
免责声明:在本文中,我将介绍一些用于处理不平衡数据的重采样技术。因此,假设读者具有与二进制分类问题相关的一些知识。
介绍
今天,任何从事二进制分类问题的
机器学习从业者都必须遇到这种不平衡数据集的典型情况。这是在许多有效的业务问题(例如欺诈检测,垃圾邮件过滤,罕见疾病发现,硬件故障检测等)中看到的典型场景。类不平衡是当数据集中的类分布不均(即“否”)时出现的一种情况。否定类别(多数类别)中数据点的数量与肯定类别(少数族裔)相比非常大。
冒烟
通常,少数/积极类是感兴趣的类,我们的目标是在此类中取得最佳结果。如果不事先处理不平衡数据,那么这将降低分类器模型的性能。大多数预测将与多数类相对应,并将少数类特征视为数据中的噪声而忽略它们。这将导致模型中的高偏差。
准确性悖论
假设您正在研究基于健康保险的欺诈检测问题。在此类问题中,我们通常观察到,每100项保险索赔中就有99项是欺诈性的,其中1项是欺诈性的。因此,二元分类器模型不必是复杂的模型即可将所有结果预测为0表示无欺诈,并且可以达到99%的较高准确性。显然,在类分布偏斜的情况下,准确性度量是有偏见的,不是可取的。
处理不平衡的数据
重采样数据是处理不平衡数据集的最常用方法之一。i)欠采样ii)过采样有两种类型的方法。在大多数情况下,过采样优于欠采样技术。原因是,在欠采样中,我们倾向于从可能携带某些重要信息的数据中删除实例。在本文中,我专门介绍一些特殊的数据增强过采样技术:SMOTE及其相关的对等技术。
SMOTE:综合少数族裔过采样技术
SMOTE是一种过采样技术,其中针对少数类别生成了合成样本。该算法有助于克服随机过采样带来的过拟合问题。它着重于特征空间,以借助位于正的实例之间的插值来生成新实例。
工作程序:
起初总数 对于过采样观测值,将设置N。通常,选择二进制类别分布为1:1。但这可以根据需要进行调整。然后通过首先随机选择一个正类实例开始迭代。接下来,获取该实例的KNN(默认为5)。最后,从这K个实例中选择N个来插值新的合成实例。为此,可以使用任何距离度量来计算特征向量与其邻居之间的距离差。现在,将此差乘以(0
冒烟来源:https://github.com/minoue-xx/Oversampling-Imbalanced-Data
SMOTE算法的Python代码
冒烟
尽管此算法非常有用,但与它相关的缺点很少。
i)生成的合成实例在相同方向上,即通过一条人造线连接其对角实例。反过来,这会使由少量分类器算法生成的决策面复杂化。
ii)SMOTE倾向于创建一个大号码。特征空间中的嘈杂数据点的数量。
ADASYN:自适应合成采样方法
ADASYN是SMOTE算法的通用形式。该算法还旨在通过为少数类生成综合实例来对其过度采样。但是这里的区别在于它考虑了密度分布r i,它决定了否。为难以学习的样本生成的合成实例的数量。因此,它有助于根据难以学习的样本自适应地更改决策边界。与SMOTE相比,这是主要区别。
工作程序:
从数据集中,总编号为 的多数? -和少数? +分别捕获。然后,我们为类别不平衡的最大程度预设阈值d th 。总数 G =(N – – N +)xβ。在此,β = ( N + / N –)。
对于每个少数样本x i,使用欧式距离获得KNN,比率r i 计算为Δi/ k,并进一步归一化为r x <= r i / ∑ r? 。
此后,对于每个总合成样品X我将是,克我= - [R X X ?。现在,我们从1迭代到g i,以与在SMOTE中相同的方式生成样本。
下图显示了上述过程:
来源:https://github.com/minoue-xx/Oversampling-Imbalanced-Data
适用于ADASYN算法的Python代码:
杂交:SMOTE + Tomek链接
杂交技术涉及结合欠采样和过采样技术。这样做是为了优化作为这些技术的一部分创建的样本的分类器模型的性能。
SMOTE + TOMEK是一种混合技术,旨在清除样本空间中分布的每个类的重叠数据点。在SMOTE完成过采样之后,类群集可能会侵入彼此的空间。结果,分类器模型将过度拟合。现在,Tomek链接是相反类别的配对样本,它们彼此之间是最近的邻居。因此,从这些链接中删除大多数类别的观察值,因为据信这会增加决策边界附近的类别间隔。现在,为了获得更好的类别聚类,将Tomek链接应用于SMOTE进行的过采样少数族裔样本。因此,我们通常不会从Tomek链接中删除这两个类别的观测值,而不仅仅是从多数类中删除这些观测值。
SMOTE + Tomek算法的Python代码:
杂交:SMOTE + ENN
SMOTE + ENN是另一种混合技术,没有。的观察值已从样本空间中删除。在此,ENN是另一种欠采样技术,其中估计了多数类中每个类别的最近邻居。如果最近的邻居对多数类的特定实例进行了错误分类,则该实例将被删除。
将此技术与SMOTE完成的过采样数据相集成有助于进行大量数据清理。此处,将这两个类别中NN样本的错误分类删除。这将导致更清晰和简洁的类分离。
SMOTE + ENN算法的Python代码:
下图显示了基于SMOTE的不同重采样技术如何处理不平衡数据。
重采样后的性能分析
为了了解过采样的效果,我将使用银行客户流失数据集。这是一个不平衡的数据,其中目标变量流失有81.5%的客户不进行搅动,而18.5%的客户进行过搅动。
使用3个分类器模型对数据集进行了比较分析:逻辑回归,决策树和随机森林。如前所述,我们将忽略用于评估此不平衡数据集上分类器性能的准确性指标。在这里,我们更感兴趣的是知道在接下来的几个月中会吸引哪些客户。因此,我们将重点关注诸如精度,召回率和F1得分等指标,以了解分类器的性能,从而正确确定哪些客户会流失。
注意: SMOTE及其相关技术仅应用于训练数据集,因此我们将算法正确地拟合到数据上。测试数据保持不变,因此可以正确表示原始数据。
从上面可以看出,在实际的不平衡数据集上,与多数类相比,所有3个分类器模型在少数类上均不能很好地推广。结果,大多数阴性分类样本都被正确分类。因此,与更多的FN相比,FP更少 。经过超采样后,在测试数据上可以看到明显的Recall激增。为了更好地理解这一点,下面显示了所有三种模型的比较条形图:
冒烟
精度有所降低,但是通过实现大量召回满足了任何二进制分类问题的目的。同样,每种型号的AUC-ROC和F1得分大致相同。
尾注
类不平衡的问题不仅限于二元分类问题,多类分类问题同样遭受它的困扰。因此,将重采样技术应用于此类数据非常重要,以使模型发挥最佳性能并给出大多数准确的预测。
您可以在我的GitHub存储库中检查整个实现,然后尝试在最后应用它们。一定要探索其他有助于处理不平衡数据集的技术。
题库