训练集+测试集是否必须与预测集不同(因此需要对所有列应用时间偏移)?(非时间序列!)

简而言之:

此问题不是关于经典的机器学习时间序列分析,而是寻求将月度列作为特征处理,就像处理任何无时间属性的特征一样。我分享这个问题是因为我在工作中遇到了同样的挑战,最终,模型在这个设置下运行良好,将非月度(无时间属性)的特征与月度特征混合在一起。因此,这只是一个关于使用月度数据列作为特征的问题,模型并不关心这是12月还是6月,它只关心这些特征在过去的几个月中是如何分布的,以便从过去几个月的数据模式中学习。这些特征不是按月度名称调用的,而是根据它们在时间上回溯了多少个月来命名,例如wealth_month_1,wealth_month_2,表示1个月或2个月前的财富情况。


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

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

如果我预测时间序列的标签列,(后来编辑:我这里并不是要进行经典的时间序列分析,而只是从典型数据库中广泛选择列,可能是每周、每月或随机存储的数据,然后将它们转换为单独的特征列,每个列代表一个星期/一个月/一年…),我是否必须将训练+测试集的所有特征(不仅仅是时间序列标签列的过去列,还有所有其他普通特征)都回溯到一个时间点,在该时间点上数据与预测集没有“知识”交叉?

然后我会训练并测试分类器,将特征回溯n个月,对未回溯且最新的标签列进行评分,然后从最新的、未回溯的特征中进行预测。回溯和未回溯的特征具有相同数量的列,我通过将回溯特征的列名分配给未回溯特征来对齐回溯和未回溯特征。

附注:

附注1:关于https://en.wikipedia.org/wiki/Dependent_and_independent_variables的一般方法

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

附注2:在https://scikit-learn.org/stable/tutorial/basic/tutorial.html这个基础教程中我们可以看到预测集是不同的

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


回答:

上面的问题当我有一个已经训练并测试好的分类器时,我可以将其应用于作为训练和测试集基础的相同数据集吗?有一个简单的答案:不可以

上面的问题我是否必须回溯所有特征有一个简单的答案:必须

简而言之,如果我预测一个月的类别列:我必须将所有非类别列也回溯到过去,加上我之前转换为特征的类别月份,所有数据必须在预测类别的月份之前已知。

这也意味着:预测集必须与包含测试集的数据集不同。如果您包含了测试集,训练集将失去最新月份(或几个月)的宝贵最新数据!“预测集”的最终术语是指“最新的输入,没有测试集”以获得“最新的预测结果”。

这一点得到了以下概述的证实,由这位用户提供的图像,这里使用的是天而不是月,但想法是相同的:

enter image description here

来源:在“Cross Validated”上的回答 – 将时间序列数据拆分为训练/测试/验证集;推荐阅读整个问答(!)。

查看图像的最后一行和“Cross Validated”上那个回答的宝贵评论,以理解这一点。请注意,此问题不是关于经典的机器学习时间序列。这只是关于如何将一组历史列(直到现在保存的,按月、周、年或其他方式保存的)作为特征处理,就像处理任何其他无时间属性的列,这些列可能会被覆盖或不会改变。 图片仍然可以用来解释这一点。

230106:

图像显示最后一步是在整个数据集上进行训练,这是最新的“预测集”,没有测试集。

在那个图像中,有一个“错误”,表明这个看似简单的问题,即将前面的标签作为即将到来的标签的特征,似乎很难被理解。我自己没有看到这一点,并且没有这个评论就发布了图像:“T&V”在“Test”的过去。这对于一个要预测未来的模型来说是一个错误的验证,V必须在“未来”的测试块中(除非您有一个随时间动态变化的数据集,比如在物理学中)。

您必须将其更改为“walk-forward”模型,验证集(如果有的话)应该从测试集中进行k-fold拆分,而不是从训练集中拆分。看起来会像这样:

enter image description here

另见:

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注