我对机器学习相当陌生。我遇到了数据泄漏的概念。文章说在执行预处理步骤之前总是拆分数据。
我的问题是,诸如离散化、将类别分组为单个类别以减少基数、将类别变量转换为二进制变量等步骤是否会导致数据泄漏?
在应用这些步骤之前,我应该将数据拆分为训练集和测试集吗?
另外,为了避免数据泄漏,我真的需要注意哪些主要的预处理步骤?
我对机器学习相当陌生。我遇到了数据泄漏的概念。文章说在执行预处理步骤之前总是拆分数据。
我的问题是,诸如离散化、将类别分组为单个类别以减少基数、将类别变量转换为二进制变量等步骤是否会导致数据泄漏?
在应用这些步骤之前,我应该将数据拆分为训练集和测试集吗?
另外,为了避免数据泄漏,我真的需要注意哪些主要的预处理步骤?
这是一个非常有趣的话题,我会尽量保持简单和简短。数据泄漏是一种状态,您的机器学习模型在实际或生产环境中找不到的预测变量上进行了训练。如果您对训练数据执行预处理步骤,那么您应该对测试数据执行相同的步骤以进行预测,但这不会导致数据泄漏。一些 ML 库会为您执行此操作,例如recipes
来自tidymodels
.
回答您的问题时,您不应该在对数据进行预处理和特征工程时害怕数据泄漏,但在此之前,当您定义您的问题以及您将用于训练试图解决它的模型的数据时。这是我在实践中反复面对的一个例子:
假设您正在拟合一个 ML 模型来预测您公司中某些产品的销售情况,时间为一年后。为此,您使用产品的历史数据以及互补和替代商品的数据。模型的训练和测试性能非常好,您计划将模型投入生产,但您遇到了一个巨大的问题:互补和替代产品数据要到一年后才能获得。到那个时候,做一年的预测是没有意义的,因为你已经观察到了销售数据。
总之,可以通过预测自变量或仅使用不需要比响应更多变量的时间序列模型来防止这种数据泄漏情况。这只是数据泄漏的一种情况,但您可以在 Max Kuhn 的巨著《特征工程与选择:预测模型的实用方法》中找到更多信息。