忽略 SMOTE 过采样中的列

Ignore columns in SMOTE oversampling

我有六个特征列和一个目标列,这是不平衡的。 我可以通过复制与常量(月,年列)

完全相同的内容,只为四列 X1、X2、X3、X4 创建合成记录,从而制作像 ADASYN 或 SMOTE 这样的过采样方法吗

当前:

预期一:可以通过上采样目标创建合成记录class'1'但是记录的数量可以增加但是添加的记录应该有月份和年份(不变如下图)

编程的角度来看,2017 年在相关 Github repo 中提出的相同问题得到了否定回答:

[Question]

I have a data frame that I want to apply smote to but I wish to only use a subset of the columns. The other columns contain additional data for each sample and I want each new sample to contain the original info as well

[Answer]

There is no way to do that apart of extracting the column in a new matrix and process it with SMOTE. Even if you generate a new samples you have to decide what to put as values there so I don't see how such feature can be added

建模 的角度回答,这 不是 一个好主意,即使您可以找到编程解决方法,您也应该 尝试 - 并且可以说,这就是为什么上面 imbalanced-learn 的开发者甚至在考虑在 SMOTE 实现中添加这样的功能时不屑一顾的原因。

这是为什么?好吧,像 SMOTE 这样的合成过采样算法本质上是使用 k-nn 方法的一些变体,以便在现有样本“之间”创建人工样本。鉴于这种方法,不用说,为了使这些人工样本确实“介于”真实样本之间(在 k-nn 意义上),all 现有(数字)必须考虑功能。

如果您通过使用一些编程炼金术,最终设法仅基于您的一部分特征生成新的 SMOTE 样本,那么将未使用的特征放回原位将 破坏 这些人工样本与真实样本的接近度和“中间性”的任何概念,从而通过在您的训练集中插入巨大的偏差来损害整个企业。

简而言之:

  • 如果您认为您的Monthyear确实是有用的功能,请将它们包含在SMOTE中;你可能会得到一些无意义的人工样本,但这不应该被认为是这里的目的的(大)问题。

  • 如果没有,那么也许您应该考虑将它们从您的训练中完全移除。