预处理前和预处理后训练、测试拆分之间的区别

数据挖掘 机器学习 数据科学模型
2022-02-25 04:52:36

我是机器学习的新手。我对预处理有点困惑。一般来说,

场景 1:我将数据集拆分为训练、测试和验证,并在训练上应用 fit_transform 和测试上的变换等转换。

场景 2:另一种方法是先对整个数据集应用转换,然后将数据集拆分为训练、测试和验证。我在选择、划分预处理和特征工程之前或预处理和特征工程之后的数据时有点困惑。寻找一个有效果和原因的好答案。

2个回答

您绝对应该采用第一种情况。那是因为您使用的转换器具有一些参数(例如,在标准标量的情况下的平均值和标准偏差),并且这些参数是从机器学习模型的参数等数据中学习的。如您所知,您不应该使用验证和测试数据来学习模型参数,出于同样的原因,您也不应该使用它们来学习变压器参数。因此,如果您想尝试实际的机器学习场景,您应该只使用训练样本来拟合您的变压器参数。

预置转换必须应用于所有数据集(训练、测试和验证)。无论您在一个子集中添加什么功能,都必须在其他子集中添加。

如果您正在验证和测试数据是随机选择的,并且您在所有子集上应用了精确的转换,那么这两种情况都可以工作,但第二种情况在某些方面更好:

  • 首先,编码更容易,您只需编写一次转换线。
  • 其次,它可能更快,例如,如果您使用 python,您将受益于 numpy 的强大功能
  • 三是风险较小,举个例子。您有一个分类变量,出于某种原因,您决定将该变量中的缺失值替换为出现次数最多的值。如果值出现接近,您的子集中可能有不同的值。如果用平均值替换数值,也会发生同样的情况。如果您随机选择子集,这不太可能,但您知道,没有完美的随机性。

我建议选择第二个选项,因为它更容易且风险更小。但是,您仍然可以在某个时候同时尝试这两种方法,您会看到每种方法的优缺点。