处理不平衡机器学习数据集的不同方法

处理不平衡机器学习数据集的不同方法

分类是最常见的机器学习问题之一。处理任何分类问题的最佳方法都是从分析和探索数据集开始,我们称之为探索性数据分析(EDA),目的是尽可能多地从数据中生成见解和信息。它还用于查找数据集中可能存在的问题。用于分类的机器学习数据集中常见的问题之一是不平衡类问题。

什么是数据不平衡?

数据不平衡通常反映数据集中类的不均等分布。例如,在信用卡欺诈检测数据集中,大多数信用卡交易不是欺诈,极少数类是欺诈。这使我们在欺诈和非欺诈类别之间的比例达到50:1。在本文中,我将使用Kaggle的信用卡欺诈交易数据集。您可以从 下载此数据集。

首先,让我们绘制类分布以查看不平衡。

处理不平衡机器学习数据集的不同方法

如您所见,非欺诈交易远远超过欺诈交易。如果我们不解决这个问题,就训练一个二元分类模型,机器学习模型就会有偏见。

现在,有一些技术可以解决这个问题,我将逐一介绍它们。

重采样(过采样和欠采样):

处理不平衡机器学习数据集的不同方法

这听起来很直观。欠采样是您从多数类中随机删除某些观察结果的过程。一个简单的方法如下所示:

在对数据集进行欠采样后,我再次绘制它并显示相同数量的类:

处理不平衡机器学习数据集的不同方法

平衡数据集(欠采样)

第二种重采样技术叫做过采样。这一过程比欠采样更复杂。这是一个生成合成数据的过程,它试图从观察到的少数类中随机抽取属性样本。对于典型的分类问题,有许多方法用于对数据集进行过采样。最常见的技术是SMOTE。简单地说,它观察少数类数据点的特征空间,并考虑其k个最近邻。

处理不平衡机器学习数据集的不同方法

要在python中编写代码,我使用一个名为imbalanced -learn或imblearn的库。下面的代码显示了如何实现SMOTE。

SMOTE过采样Python示例代码

处理不平衡机器学习数据集的不同方法

不平衡数据会如何影响特征相关性时。

在重采样之前:

下面的Python代码绘制了所有特征之间的相关矩阵。

处理不平衡机器学习数据集的不同方法

处理不平衡机器学习数据集的不同方法

重采样后:

处理不平衡机器学习数据集的不同方法

注意,现在的特征相关性要明显得多。在解决不平衡问题之前,大多数特性没有显示出任何相关性,这肯定会影响机器学习模型的性能。

集成方法(采样器集成):

当使用集成分类器时,bagging方法通过在不同随机选择的数据子集上构建多个estimators来工作。在scikit-learn中,分类器的名称是baggingclassifier。但是,这个分类器不允许平衡每个数据子集。因此,在对不平衡数据集进行训练时,该分类器会偏向于大多数类,产生biased模型。

为了解决这个问题,我们可以使用imblearn库中的BalancedBaggingClassifier。它允许在训练集合的每个估计器之前对数据集的每个子集重采样。除了sampling_strategy和replacement这两个控制随机采样器行为的参数外,BalancedBaggingClassifier还采用了与scikit-learn baggingclassifieras相同的参数。

这样,您可以训练一个能够处理不平衡的分类器,而无需在训练前手动进行欠采样或过采样。

最后

综上所述,每个人都应该知道,在不平衡数据集上训练的机器学习(ML)模型时,其整体性能将受到其预测罕见数据点和少数数据点的能力的限制。识别和解决这些点的不平衡对机器学习模型的质量和性能至关重要。


分享到:


相關文章: