探索性数据分析是否应该包括验证集?

机器算法验证 机器学习 探索性数据分析
2022-04-01 15:37:19

我知道 EDA 应该在训练集上执行,而不是在测试集上执行。

但我的问题是:我们通常将训练集拆分为训练和验证数据集。我们应该对它们都执行 EDA 吗?

2个回答

您的问题与关于火车与测试的 EDA的问题有关,而关于验证和测试集的问题则与此有关。

为什么要有一个验证集?验证集允许您探索和评估许多模型/超参数设置。当您决定使用哪个模型时,验证集允许您验证该决定是否真的是好的,而不会过度拟合您的测试集。与 EDA 类似,如果您对模型做出任何决定(您将选择哪些功能等),验证集将帮助您验证您的 EDA 决定是否正确。

因此,我将仅在训练集上执行 EDA,并使用验证集来评估您在训练集上做出的任何决策的质量。

编辑

交叉验证(CV)使这有点复杂。核心原则是验证集应该帮助你验证你所做的任何决定。根据验证集做出决策将夸大(或酌情缩小)验证集上的任何模型分数。这些夸大的分数将更能代表训练集分数,而较少代表测试集分数,从而违背了验证集的目的。

在 k-fold CV 中,您可以有 k 个单独的 EDA 阶段,一个在每个折叠的训练拆分上执行。您必须仅根据每个 EDA 的结果做出决策,而无需在每个 EDA 之间转移决策。在后面的折叠中保持无偏是很困难的,并且分析数据 k 次是不切实际的。

也许更实际的选择是首先进行训练/验证/测试拆分。然后在训练集上执行 EDA 并在训练集上使用交叉验证调整模型。该模型的超参数仍将根据 CV 的优势进行调整。然后,验证集将允许您同时评估 EDA 中做出的决策和调整过程。验证分数将更能代表测试分数,并且您不太可能过度拟合。您需要一个足够大的数据集来处理所有这些拆分。

这是一个非常严格的范式,当我得知研究人员/专业人士实际上遵循它时,我会感到惊讶。不知何故,您需要根据经验评估所有决策,同时平衡模型的微调,而不会过度拟合数据的特定子集。

您在帖子中谈论的是两组不同的步骤。

  1. 数据可视化,探索性数据分析

  2. 模型训练、评估和测试

在探索性数据分析中,通常使用视觉方法分析数据集以总结其主要特征。所以你应该在那里考虑完整的数据集。如果您在 EDA 之前将数据集拆分为训练、验证和测试,您可能会丢失 EDA 中的一些重要信息。例如,您可能会错过异常值,因为它们是测试数据的一部分。

完成 EDA 后,您还需要保持数据集完整,以便进行数据预处理和转换。之后,您可以拆分数据集。如果您在预处理和转换之前拆分数据集,您将在一种类型的数据集上训练您的模型并在其他类型的数据集上进行测试。例如,假设您试图预测一个人是否应该获得贷款。数据集中有“工资”和“年龄”的属性。假设作为预处理的一部分,您决定应用规范化。如果您在预处理之前拆分数据集,您将在标准化的“工资”和“年龄”数据上训练模型,同时在原始“工资”和“年龄”数据上评估和测试模型。

有些人可能只想做 EDA 以获得洞察力,而不是进行模型训练和测试。

因此,您应该始终在开始模型训练之前拆分数据集。