只对训练数据集进行探索性数据分析会更好吗?

机器算法验证 数据集 特征选择 特征工程 探索性数据分析
2022-02-06 12:35:56

我正在对数据集进行探索性数据分析 (EDA)。然后我会选择一些特征来预测一个因变量。

问题是:
我应该只对我的训练数据集进行 EDA 吗?还是应该将训练和测试数据集一起加入,然后对它们进行 EDA 并根据此分析选择特征?

4个回答

我建议您查看http://statweb.stanford.edu/~tibs/ElemStatLearn/printings/ESLII_print10.pdf中的“7.10.2 进行交叉验证的错误和正确方法” 。

作者举了一个例子,其中有人做了以下事情:

  1. 筛选预测变量:找到与类标签显示出相当强(单变量)相关性的“好”预测变量子集
  2. 仅使用这个预测变量子集,构建一个多元分类器。
  3. 使用交叉验证来估计未知的调整参数并估计最终模型的预测误差

这听起来与对所有数据(即训练加测试)进行 EDA 并使用 EDA 选择“好”预测变量非常相似。

作者解释了为什么这是有问题的:交叉验证的错误率会被人为降低,这可能会误导您认为您已经找到了一个好的模型。

所以你想识别对你的因变量有影响的自变量?

然后,您的两种方法实际上都不值得推荐。

在定义了你的研究问题之后,你应该发展你的理论。也就是说,使用文献,您应该确定应该产生影响的变量(您应该能够解释原因)。

对测试数据应用 EDA 是错误的。

训练是寻找正确答案以创建最佳模型的过程。这个过程不仅限于在训练数据上运行代码。使用来自 EDA 的信息来决定使用哪个模型、调整参数等是训练过程的一部分,因此不应允许访问测试数据。因此,忠于自己,仅使用测试数据来检查模型的性能。

此外,如果您意识到模型在测试期间表现不佳,然后您又重新调整模型,那也不好。相反,将您的训练数据分成两部分。使用一个用于训练,另一个用于测试和调整您的模型。请参阅测试集和验证集有什么区别?

这个答案的段落之后。Hastie 进一步解释了第 245 页

“这是在这个例子中进行交叉验证的正确方法:

  1. 将样本随机分成 K 个交叉验证折叠(组)。
  2. 对于每个折叠 k = 1, 2, . . . , K
    (a) 使用除 k 折中的样本以外的所有样本,找到与类别标签具有相当强(单变量)相关性的“好”预测变量子集。
    (b) 仅使用这个预测变量子集,构建一个多元分类器,使用除 k 折叠中的样本之外的所有样本。
    (c) 使用分类器预测第 k 次样本的类别标签。"