我有六个特征列和一个目标列,数据是不平衡的。我能否通过仅为四列X1、X2、X3、X4创建合成记录来进行像ADASYN或SMOTE这样的过采样方法,同时将月份和年份列保持不变地复制?
当前情况:
期望情况:可以通过上采样目标类’1’来创建合成记录,记录数量可以增加,但添加的记录应保持月份和年份不变(如图所示)
回答:
从编程角度来看,在相关的Github仓库中,2017年有人问了一个相同的问题,答案是否定的:
[问题]
我有一个数据框架,我想对其应用SMOTE,但我想只使用其中的一部分列。其它列包含每个样本的附加数据,我希望每个新样本也包含原始信息
[回答]
除了将列提取到一个新矩阵中并用SMOTE处理之外,没有其他方法可以做到这一点。即使你生成了新样本,你也必须决定在那里填写什么值,所以我不明白这种功能如何能被添加
从建模角度来看,这不是一个好主意,即使你能找到编程的解决方法,你也不应该尝试——可以说,这就是为什么imbalanced-learn
的开发者在考虑添加这种功能到SMOTE实现中时持否定态度的原因。
为什么会这样呢?嗯,像SMOTE这样的合成过采样算法,本质上使用某种k-最近邻方法来在现有样本之间创建人造样本。鉴于这种方法,不言而喻,为了使这些人造样本确实位于真实样本之间(在k-最近邻意义上),必须考虑所有现有的(数值)特征。
如果通过某种编程魔法,你最终设法仅基于一部分特征生成新的SMOTE样本,将未使用的特征放回去会破坏这些人造样本与真实样本之间的任何邻近性和“中间性”的概念,从而通过在训练集中引入巨大偏差来破坏整个企业。
简而言之:
-
如果你认为你的
月份
和年份
确实是有用的特征,只需将它们包含在SMOTE中;你可能会得到一些无意义的人造样本,但这对于这里的目的来说不应该被视为(大)问题。 -
如果不是,那么你也许应该考虑从训练中完全删除它们。