我有六个特征列和一个目标列,这是不平衡的。我可以通过复制与常量完全相同的内容(月、年列)仅为 X1、X2、X3、X4 四个列创建合成记录,从而制作像 ADASYN 或 SMOTE 这样的过采样方法
当前之一:
预期一:它可以通过对目标类'1'进行上采样来创建合成记录,但是记录的数量可以增加,但添加的记录应该有月份和年份(不变,如下所示)
我有六个特征列和一个目标列,这是不平衡的。我可以通过复制与常量完全相同的内容(月、年列)仅为 X1、X2、X3、X4 四个列创建合成记录,从而制作像 ADASYN 或 SMOTE 这样的过采样方法
当前之一:
预期一:它可以通过对目标类'1'进行上采样来创建合成记录,但是记录的数量可以增加,但添加的记录应该有月份和年份(不变,如下所示)
从编程的角度来看,2017 年相关Github 回购中提出的一个相同问题得到了否定的回答:
[问题]
我有一个要应用 smote 的数据框,但我希望只使用列的一个子集。其他列包含每个样本的附加数据,我希望每个新样本也包含原始信息
[回答]
除了在新矩阵中提取列并使用 SMOTE 处理它之外,没有其他方法可以做到这一点。即使您生成一个新样本,您也必须决定将什么作为值放在那里,所以我看不出如何添加这样的功能
从建模的角度回答,这不是一个好主意,即使你能找到一种编程解决方法,你也不应该尝试它 - 可以说,这就是为什么imbalanced-learn
上面的开发人员即使在考虑添加这样的想法时也不屑一顾的原因SMOTE 实现中的一个功能。
这是为什么?好吧,合成过采样算法,如 SMOTE,本质上是使用 k-nn 方法的一些变体,以便在现有样本“之间”创建人工样本。鉴于这种方法,不言而喻,为了使这些人工样本确实“介于”真实样本之间(在 k-nn 意义上),必须考虑所有现有的(数字)特征。
如果通过使用某种编程炼金术,最终您设法仅基于您的特征子集生成新的 SMOTE 样本,那么将未使用的特征放回原处将破坏这些人工样本与真实样本的任何接近性和“中间性”概念一个,从而通过在你的训练集中插入一个巨大的偏差来损害整个企业。
简而言之:
如果您认为您的Month
和year
确实有用的功能,只需将它们包含在 SMOTE 中;你可能会得到一些无意义的人工样本,但这不应该被认为是一个(大)问题。
如果没有,那么也许您应该考虑将它们完全从培训中删除。