我应该只对训练集执行交叉验证吗?

数据挖掘 交叉验证 卡格尔
2021-09-15 11:40:11

我正在使用从 Kaggle 下载的数据集。数据集已经分为训练和测试两个 CSV。

我使用训练集构建了一个模型,因为我将训练 CSV 导入到 Jupyter Notebook 中。我预测使用 Train CSV 本身。我想进行交叉验证。我是否应该在火车 CSV 上执行交叉验证并再次将其分成两部分进行训练和测试?或者,我应该导入一个新的 CSV 文件 Test 并将两个 CSV 合并为一个吗?

3个回答

“统计学习简介”的第 5 章涵盖了 CV 和 bootstrap。我强烈推荐阅读本章,因为抽样方法在实践中非常重要。

交叉验证 (CV)通常意味着您将一些训练数据集拆分为 k 个部分,以生成不同的训练/验证集。通过这样做,您可以看到模型对训练数据集的不同样本的学习(以及能够做出预测)的程度。

在训练和模型调整期间,您的模型不应该看到测试数据这个想法是您保留一个真正的“外生”数据集(在训练期间从未使用过)来测试您的模型最终的表现如何。如果您在训练期间使用测试集,信息可能会从测试集泄漏到模型,并且您无法再证明模型的外生有效性(因为来自测试集的信息泄漏到模型)。

在下图中,您将对训练集进行四个不同的拆分,其中蓝色代表训练案例,橙色代表验证案例。您对四个蓝色部分中的每一个运行相同的回归/分类,并获得对四个橙色部分中的每一个的预测。

在此处输入图像描述

处理数据特征有不同的策略。为了平衡组等,您可以使用分层抽样策略。在此处查看sklearn 实现

由于采样策略可能是相关的,因此建议让 sklearn 之类的工具进行 CV 拆分。如果相关,大多数工具/方法都带有一些 CV 选项。

Andrew Ng 写了一本很棒的书,叫做《机器学习向往》。你可以在这里免费下载https://www.deeplearning.ai/machine-learning-yearning/

现在在 Kaggle 的数据集中。您拥有的数据集是训练和测试。即使您想使用测试数据集,也不能。如果你打开它,你会看到那里只有功能。缺少目标列,因为这是您需要使用模型并预测值以将其上传到 Kaggle 的文件。

阅读链接书的第 5、6 和 7 章,您将获得很多关于如何处理训练数据的好建议。简而言之。

您应该将训练数据集分成 3 个部分。

  • 训练集——你在它上面运行你的学习算法。
  • 开发(开发)集——用于调整参数、选择特征以及就学习算法做出其他决策。有时也称为保持交叉验证集。
  • 测试集——你用它来评估算法的性能,但不决定使用什么学习算法或参数。

引自第 5 章,第 15 页。

请记住,上述测试集与您从 Kaggle 获得的测试文件无关。

在完成之前,您不应该触摸测试数据。要进行交叉验证,您必须将训练数据集拆分为训练集和验证集,或者您可以进行 k 折交叉验证(或任何其他方法)。

以下是一些信息:https://en.wikipedia.org/wiki/Cross-validation_(statistics)

但是,切勿使用测试数据来训练或调整您的模型,因为如果这样做,您的模型将针对您的测试数据进行训练,然后您的结果将无效。