machine-learning - 交叉验证技术中基于时间的分割是什么意思?
问题描述
我对数据集中的每条记录都有一个时间戳。
我听说过基于时间的吐痰,但对此一无所知。
解决方案
正常的交叉验证
您有一组数据点:
data_points = [2, 4, 5, 8, 6, 9]
然后,如果您进行 2 倍拆分,您的数据点将被随机分配到 2 个不同的组。
例如:
split_1 = [2, 5, 9]
split_2 = [3, 8, 6]
但是,这假设不需要保留数据点的顺序。您可以使用 训练模型split_1
并使用 进行测试split_2
。
基于时间的分裂
然而,这个假设对于时间序列预测并不总是正确的。
例如,给定相同的数据点:
data_points = [2, 4, 5, 8, 6, 9]
可能是按时间安排的。
然后你可以有一个模型来预测下一个数字,它回顾 3 个时间步长。(例如,预测 之后的数字9
,它将[8, 6, 9]
作为输入。这意味着数据点出现的顺序很重要。因此,为了测试您的模型,您不能随机拆分数据点。它们似乎需要保留。
因此,如果您进行 2 倍拆分,您可以获得以下拆分:
split_1 = [2, 4, 5, 8]
split_2 = [5, 8, 6, 9]
执行
Sklearn 有一个基于时间的交叉验证的实现:TimeSeriesSplit。
推荐阅读
- javascript - WebRTC 不显示视频 peerConnection 远程视频
- vue.js - 无法使用多个
在 Vuetify 中 - python - 使用(启用 java 的?)下拉选择的 Python 选择
- mysql - 使用jsp multipartrequest将文件名保存到mysql数据库和文件到文件夹
- c - 天到年、月、天的转换在 c 中没有显示正确的结果
- flutter - 解析匿名登录(访客用户)
- java - 需要解释 - Android Studio 中的空白片段 Java 代码
- angular - HAProxy 不适用于在 4200 上运行的 Angular 应用程序的端口 80
- scala - 如何处理 Apache Spark 中嵌套 json 中的歧义列
- c++ - 将初始值设定项列表与返回引用的用户定义转换运算符一起使用时复制返回值