训练+测试集是否必须与预测集不同(以便您需要对所有列应用时移)?

Does the training+testing set have to be different from the predicting set (so that you need to apply a time-shift to ALL columns)?

我知道我们应该只在测试集上测试经过训练的分类器的一般规则。

但现在问题来了:当我准备好一个已经训练和测试过的分类器时,我可以将它应用于作为训练和测试集基础的同一数据集吗? 还是我必须将其应用于与训练+测试集不同的新预测集?

如果我预测一个时间序列的标签列怎么办(后来编辑:我并不是要在这里创建一个经典的时间序列分析,而只是一个广泛的select来自典型数据库的列的离子,每周、每月或随机存储的数据,我将其转换为单独的特征列,每个列一周/一个月/一年...),做我必须将训练+测试集的[​​=30=]所有的特征(不仅仅是时间序列标签列的过去列,还有所有其他正常特征)移回一个时间点其中数据与预测集没有“知识”拦截?

然后,我会根据转移到过去 n 个月的特征训练和测试分类器,针对未转移和最近的标签列评分,然后根据最近的未转移特征进行预测。移位和未移位的特征具有相同的列数,我通过将移位特征的列名称分配给未移位的特征来对齐移位和未移位的特征。

p.s.:

p.s.1:https://en.wikipedia.org/wiki/Dependent_and_independent_variables

的一般方法

在数据挖掘工具(用于多元统计和机器学习)中,因变量被指定为目标变量(或在某些工具中为标签属性),而自变量可能被指定为常规变量.[8]为训练数据集和测试数据集提供了目标变量的已知值,但应该为其他数据预测

p.s.2:在本基础教程中,我们可以看到预测集有所不同:https://scikit-learn.org/stable/tutorial/basic/tutorial.html

我们 select 使用 [:-1] Python 语法的训练集,它生成一个新数组,其中包含所有 > 但 digits.data 中的最后一项:[... ] 现在您可以预测新值。在这种情况下,您将使用 digits.data [-1:] 中的最后一张图像进行预测。通过预测,您将从训练集中确定与最后一张图像最匹配的图像。

我认为您混淆了一些概念,所以我将尝试对 监督学习.

进行一般性解释
  • 训练集是您的算法学习的内容。您将其拆分为 X(特征)和 Y(目标变量)。
  • 测试集是用于对模型进行评分的集,它必须包含训练集中没有的数据。这意味着测试集也有 X 和 Y(意味着你知道目标的值)。发生的事情是你基于 X 预测 f(Y),并将它与你拥有的 Y 进行比较,看看你的预测有多好
  • 预测集就是新数据!这意味着通常你没有目标,因为监督学习的重点是预测它。你将只有你的 X(特征),你将预测 f(X)(你对目标 Y 的估计)并将其用于你需要的任何地方。

因此,最终测试集只是一个预测集,您可以将其与您的估计值进行比较。

对于时间序列,它有点复杂,因为通常特征(X)是目标变量(Y)过去数据的转换。例如,如果您想要预测今天的 SP500 价格,您可能想要使用过去 30 天的平均值作为特征。这意味着对于每个新的一天,您都需要重新计算过去几天的此功能。
不过总的来说,如果您是 ML 新手,我建议您从非时间序列数据开始,因为时间序列在特征工程和数据管理方面要难得多,而且很容易出错。

上面的问题 当我准备好一个已经训练和测试的 classifier 时,我可以将它应用于作为训练和测试集基础的同一数据集吗? 的答案很简单:.

上面的问题 我是否必须转换所有功能 的答案很简单:.

简而言之,如果我预测一个月的 class 列:除了之前的 class 个月之外,我还必须将所有非 class 列也及时移回我转换为特征,所有数据必须在预测 class 的月份之前已知。

这也意味着:预测集必须不同于包含测试集的数据集。如果您包含测试集,训练集会丢失最近一个月的宝贵最新数据!最终“预测集”一词的意思是“在没有测试集的情况下使用的最新输入”以获得预测的“最新结果”。

this user 提供的以下概述证实了这一点,此处使用天而不是月,但想法是相同的:

来源:关于“交叉验证”的回答 - Splitting Time Series Data into Train/Test/Validation Sets;推荐整个线程 (!)。

查看图片的最后一行以及该答案在“交叉验证”上的宝贵评论以了解这一点。