使用遗传交叉算子进行过采样处理数据不平衡(一)

简介: 使用遗传交叉算子进行过采样处理数据不平衡

除了随机过采样,SMOTE及其变体之外,还有许多方法可以对不平衡数据进行过采样。 在使用scikit-learn的make_classification默认设置生成的分类数据集中,使用交叉操作生成的样本在最相关的指标上胜过SMOTE和随机过采样。

本篇文章的目录如下

  • 介绍
  • 数据准备
  • 随机过采样和SMOTE
  • 交叉过采样
  • 绩效指标评估
  • 结论

介绍

我们中的许多人都会遇到处于使用不平衡数据集的预测模型的情况。

最流行的处理失衡的方法包括:

  • 增加未被充分标记的的分类的权重
  • 过采样技术
  • 欠采样技术
  • 过度采样和欠采样的组合
  • 调整成本函数

这篇文章将讨论过采样技术,我们将特别研究依赖于在特征空间内插值的SMOTE变体(borderline SMOTE, ADASYN等)如何生成较少的新合成数据。

过度抽样的方法太多了。我们使用简单的单点、两点和均匀交叉操作对合成数据进行过采样,并将评价结果与随机过采样进行比较。一般情况下,将过采样和欠采样结合使用会更好,但是在本演示中,我们为了说明只使用过采样。

数据集准备

我们使用scikit-learn的make_classification函数来创建一个不平衡的数据集,该数据集包含两个类别中的5000个数据点(二进制分类)。目标为0的机会为95%,目标为1的机会为5%。

fromsklearn.datasetsimportmake_classificationimportseabornassnsX, y=make_classification(
n_samples=5000, n_classes=2,
weights=[0.95, 0.05], flip_y=0)
sns.countplot(y)
plt.show()

640.png

默认情况下,会创建20个特征,下面是X数组中的示例条目。

640.png

make_classification中的其余设置为默认设置,下面我们将数据分为训练和测试数据集。

fromsklearn.model_selectionimporttrain_test_splitX_train, X_test, y_train, y_test=train_test_split(X, y)

随机和SMOTE过采样

现在,让我们准备函数以生成数据集,其中可以使用随机过采样和SMOTE对少数类(目标= 1)进行过采样。

fromimblearn.over_samplingimportSMOTE, RandomOverSamplerdefoversample_random(X, y, rows_1, random_state):
'''Accepts X and y arrays along with the number ofrequired positively labeled samples (rows_1). Returnsrandomly oversampled positively labeled data.'''X_random, y_random=RandomOverSampler(
sampling_strategy={1: rows_1},
random_state=random_state    ).fit_resample(X_train, y_train)
returnX_random, y_randomdefoversample_smote(X, y, rows_1, k_neighbors, random_state):
'''Accepts X and y arrays along with the number ofrequired positively labeled samples (rows_1) and numberof nearest neighbors to consider in the SMOTE algorithm.Returns SMOTE oversampled positively labeled data.'''X_smote, y_smote=SMOTE(
sampling_strategy={1: rows_1},
k_neighbors=k_neighbors,
random_state=random_state    ).fit_resample(X, y)
returnX_smote, y_smote

请注意,为了方便进行比较我们使用普通的SMOTE而不是边界SMOTE,ADASYN,SVM-SMOTE等。在下一部分中使用交叉操作生成样本时,我们不会考虑是在边界附近生成样本还是被认为有噪声等。

如果您不熟悉随机过采样和SMOTE,则在网上有很多资源,但是这里有个简短的回顾:

随机过采样涉及从我们尝试过采样的少数类中随机选择数据点,然后将它们作为重复项再次添加回数据集。

640.gif

随机过采样的插图,较大的气泡代表随机选择用于过采样的数据点,它们在数据集中显示为重复项

SMOTE涉及从少数类中查看样本的最近邻居,并在该样本与从其最近邻居中随机选择的另一个样本之间插入特征值。

640.gif

SMOTE,红色数据点是插值后综合生成的数据

交叉算子

交叉运算在遗传算法中被广泛使用,它是由有性生殖中发生的遗传物质的交叉驱动的。

该操作相对简单,其中“染色体”中的信息由两个“父母”贡献以生成“孩子”。在我们的用例中,染色体中的信息仅是特征值。

640.png

通常以位阵列表示信息以获得更好的性能。

例如:在我们的数据集中,我们有20个特征和5000个样本。在单点交叉操作中,我们可以选择两个“父级”,例如样本#20和样本#1500,并选择一个随机的交叉点,例如第十特征。然后,我们生成一个新的“子级”,即新数据点,该新数据点的第一个父级(样本#20)具有特征1–9,第二个父级(样本#1500)具有特征10–20。

640.gif

我们将考虑3种交叉操作:

  • single-point 单点
  • two-point 两点
  • uniform 均匀

单点交叉操作是上面所示的示例,其中交叉点之前的要素由一个父级提供,而交叉点之后的要素由另一父级提供。

在两点交叉操作中,父级1贡献第一个交叉点之前的子数据点的特征值,然后父级2贡献其特征值直到第二个交叉点,然后贡献在第二个交叉点之后返回父级1。

640.png

通过均匀交叉操作,两个父级中的任何一个都可以为20个要素中的任何一个对子数据点的要素值做出贡献。

640.png

下面是我们用来生成交叉样本的函数。还有一个附加参数knn,它过滤掉所有生成的样本,这些样本的最近邻居的目标是0而不是1。默认情况下,此选项设置为False。

目录
相关文章
|
6月前
|
机器学习/深度学习 算法 测试技术
处理不平衡数据的过采样技术对比总结
在不平衡数据上训练的分类算法往往导致预测质量差。模型严重偏向多数类,忽略了对许多用例至关重要的少数例子。这使得模型对于涉及罕见但高优先级事件的现实问题来说不切实际。
265 0
|
6月前
|
存储 数据采集 数据可视化
R语言拟合线性混合效应模型、固定效应随机效应参数估计可视化生物生长、发育、繁殖影响因素
R语言拟合线性混合效应模型、固定效应随机效应参数估计可视化生物生长、发育、繁殖影响因素
|
6月前
|
前端开发 数据建模 计算机视觉
R语言主成分回归(PCR)、 多元线性回归特征降维分析光谱数据和汽车油耗、性能数据
R语言主成分回归(PCR)、 多元线性回归特征降维分析光谱数据和汽车油耗、性能数据
|
6月前
|
计算机视觉
偏最小二乘回归(PLSR)和主成分回归(PCR)分析光谱数据
偏最小二乘回归(PLSR)和主成分回归(PCR)分析光谱数据
|
6月前
|
算法 vr&ar Python
R语言隐马尔可夫模型HMM连续序列重要性重抽样CSIR估计随机波动率模型SV分析股票收益率时间序列
R语言隐马尔可夫模型HMM连续序列重要性重抽样CSIR估计随机波动率模型SV分析股票收益率时间序列
|
6月前
极值分析:分块极大值BLOCK-MAXIMA、阈值超额法、广义帕累托分布GPD拟合降雨数据时间序列
极值分析:分块极大值BLOCK-MAXIMA、阈值超额法、广义帕累托分布GPD拟合降雨数据时间序列
极值分析:分块极大值BLOCK-MAXIMA、阈值超额法、广义帕累托分布GPD拟合降雨数据时间序列
|
6月前
线性回归前特征离散化可简化模型、增强稳定性、选有意义特征、降低过拟合、提升计算效率及捕捉非线性关系。
【5月更文挑战第2天】线性回归前特征离散化可简化模型、增强稳定性、选有意义特征、降低过拟合、提升计算效率及捕捉非线性关系。但过多离散特征可能增加复杂度,丢失信息,影响模型泛化和精度。需谨慎平衡离散化利弊。
44 0
|
算法
基于自适应适应度-距离平衡的随机分形搜索算法(Matlab代码实现)
基于自适应适应度-距离平衡的随机分形搜索算法(Matlab代码实现)
104 0
|
自然语言处理 算法 测试技术
【图像处理】基于收缩系数的粒子群优化和引力搜索算法的多级图像阈值研究【CPSOGSA】(Matlab代码实现)
【图像处理】基于收缩系数的粒子群优化和引力搜索算法的多级图像阈值研究【CPSOGSA】(Matlab代码实现)
|
算法 定位技术 vr&ar
【状态估计】变分贝叶斯近似的递归噪声自适应卡尔曼滤波(Matlab代码实现)
【状态估计】变分贝叶斯近似的递归噪声自适应卡尔曼滤波(Matlab代码实现)
113 0
下一篇
无影云桌面