据我所知,人们说如果我在将数据拆分为训练/测试数据集后对其进行预处理会更正确。我的问题是
1.是不是意味着我们检测数据的缺陷+在拆分后对其进行预处理?如果是/否,为什么?
2.如果我在拆分之前检测数据的缺陷,然后在拆分后对缺陷进行预处理,可以吗?如果是/否,不是,为什么?
据我所知,人们说如果我在将数据拆分为训练/测试数据集后对其进行预处理会更正确。我的问题是
1.是不是意味着我们检测数据的缺陷+在拆分后对其进行预处理?如果是/否,为什么?
2.如果我在拆分之前检测数据的缺陷,然后在拆分后对缺陷进行预处理,可以吗?如果是/否,不是,为什么?
所有这些方法指南的目标都是避免数据泄露。
示例:假设我们要对短消息(例如推文)进行分类。在检查数据时,我们会发现各种表情符号::-), :|, :-/... 在预处理阶段,我们将数据中的所有表情符号替换为特殊标记<smiley>(或更具体的标记)。
<smiley>.在第一种情况下存在数据泄漏:我们修复了测试集中的一些问题,即使这对于实际的新数据来说是不可能的(这里是在训练集中没有看到的笑脸变体)。在第二种情况下,测试集是“不完美的”,即它就像是由“新鲜的”未见过的数据组成的,因此评估会更加现实。
这个例子说明了为什么首先分离数据总是更安全,在训练数据上设计预处理步骤,然后对测试数据应用完全相同的预处理步骤。
在实践中,在某些情况下,对整个数据应用一些通用预处理会更方便。决定取决于任务和数据:有时数据泄漏的风险非常小,可以忽略不计。然而,重要的是要记住,即使是预处理的设计也可能是数据泄漏的来源。