在不平衡数据上训练的分类算法往往导致预测质量差。模型严重偏向多数类,忽略了对许多用例至关重要的少数例子。这使得模型对于涉及罕见但高优先级事件的现实问题来说不切实际。
过采样提供了一种在模型训练开始之前重新平衡类的方法。通过复制少数类数据点,过采样平衡了训练数据,防止算法忽略重要但数量少的类。虽然存在过拟合风险,但过采样可以抵消不平衡学习的负面影响,可以让机器学习模型获得解决关键用例的能力
常见的过采样技术包括随机过采样、SMOTE(合成少数过采样技术)和ADASYN(不平衡学习的自适应合成采样方法)。随机过采样简单地复制少数样本,而SMOTE和ADASYN策略性地生成合成的新数据来增强真实样本。
什么是过采样
过采样是一种数据增强技术,用于解决类不平衡问题(其中一个类的数量明显超过其他类)。它旨在通过扩大属于代表性不足的类别的样本量来重新平衡训练数据分布。
过采样通过复制现有样本或生成合成的新数据点来增加少数类样本。这是通过复制真实的少数观察结果或根据真实世界的模式创建人工添加来实现的。
在模型训练之前通过过采样放大代表性不足的类别,这样模型学习可以更全面地代表所有类别,而不是严重倾向于占主导地位的类别。这改进了用于解决涉及检测重要但不常见事件的需求的各种评估度量。
为什么要过采样
当处理不平衡数据集时,我们通常对正确分类少数类感兴趣。假阴性(即未能检测到少数类别)的成本远高于假阳性(即错误地将样本识别为属于少数类别)的成本。
传统的机器学习算法,如逻辑回归和随机森林目标优化假设均衡类分布的广义性能指标。所以在倾斜数据上训练的模型往往非常倾向于数量多的类,而忽略了数量少但重要的类的模式。
通过对少数类样本进行过采样,数据集被重新平衡,以反映所有结果中更平等的错误分类成本。这确保了分类器可以更准确地识别代表性不足的类别,并减少代价高昂的假阴性。
过采样VS欠采样
过采样和欠采样都是通过平衡训练数据分布来解决类不平衡的技术。他们以相反的方式达到这种平衡。
过采样通过复制或生成新样本来增加少数类来解决不平衡问题。而欠采样通过减少代表性过高的多数类别中的样本数量来平衡类别。
当大多数类有许多冗余或相似的样本或处理庞大的数据集时,就可以使用欠采样。但是它欠采样有可能导致信息的丢失,从而导致有偏见的模型。
当数据集很小并且少数类的可用样本有限时,就可以使用过采样。由于数据重复或创建了不代表真实数据的合成数据,它也可能导致过拟合。
下面我们将探讨不同类型的过采样方法。
1、随机过采样
随机过采样随机复制少数类样本以平衡类分布,所以他的实现非常简单。它以随机的方式从代表性不足的类别中选择现有的样本,并在不改变的情况下复制它们。这样做的好处是当数据集规模较小时,可以有效地提高少数观测值,而不需要收集额外的真实世界数据。
imbalanced-learn 库中的randomoverampler可以实现过采样的过程。
from imblearn.over_sampling import RandomOverSampler
from imblearn.pipeline import make_pipeline
X, y = create_dataset(n_samples=100, weights=(0.05, 0.25, 0.7))
fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(15, 7))
clf.fit(X, y)
plot_decision_function(X, y, clf, axs[0], title="Without resampling")
sampler = RandomOverSampler(random_state=0)
model = make_pipeline(sampler, clf).fit(X, y)
plot_decision_function(X, y, model, axs[1],
f"Using {model[0].__class__.__name__}")
fig.suptitle(f"Decision function of {clf.__class__.__name__}")
fig.tight_layout()
分享说明:转发分享请注明出处。