SMOTE 和标准化

数据挖掘 Python 数据集 阶级失衡 打击
2022-03-09 18:28:38

我有一个不平衡的数据集 X。我将其拆分为数据和标签,然后对数据进行标准化。然后我使用 train_test_split 在训练数据和测试数据之间进行拆分,然后输出结果。

现在我想比较一下如果我使用 smote 对少数类进行上采样会得到什么,但我想保持比较有意义。为此,我保留与以前相同的测试数据,并将新的合成样本仅添加到训练数据中。我应该如何处理标准化?

我是不是该

  1. 简单地假设因为我使用了已经标准化的数据中的点,新的合成样本也将被标准化?因此只需将合成样本添加到训练数据中就可以了?(不接触测试数据)
  2. 从预先标准化的数据中创建合成样本,对合成样本进行标准化并将它们添加到训练数据中?(不接触测试数据)
  3. 从预先标准化的数据中创建合成样本,将它们添加到训练数据中,然后标准化整个集合?(不接触测试数据)
  4. 或者 ... ?

使用这三种技术我得到了非常不同的结果,获得有意义的结果和比较的最佳方法是什么?

1个回答

解决方案 1 和 3 看起来非常相似,但在考虑编程范式时我会选择 1。

将分类视为使用标准化、平衡和分类的大管道,人们不希望在平衡中重新标准化某些东西。此外,1 中的假设是正确的。

实际上,您可以使用不平衡 API提供的管道将 SMOTE 与scikit-learn 归一化器一起使用