当前位置: 首页 > news >正文

时间序列预测(十七)——滑动窗口的使用

这里只是对滑动窗口在时间序列预测中使用做一个分析总结,关于滑动窗口的详细介绍可以参考其他博文。

滑动窗口是一种常用的技术,它通过使用固定大小的窗口来创建训练样本,以便捕捉时间序列中的模式。适用于多种时间序列模型,包括 LSTM、GRU 和其他类型的递归神经网络(RNN),因为这些模型能够处理输入的时间依赖性。

注意:在使用滑动窗口生成训练样本之前,通常需要对数据进行标准化或归一化,以提高模型的收敛速度和预测准确性。输出预测结果时也要反归一化。

一、概念

这里会涉及到两个概念:

1、窗口大小(Window Size)

定义:窗口大小是指在每个样本中包含的时间步数。

窗口大小决定了模型在每次预测时可以参考的历史数据的长度(这里是针对特征来说,也可以用于标签)。

较大的窗口大小可以捕捉更长时间范围内的趋势和模式,但可能会引入更多噪声,导致模型更难学习有效特征。

较小的窗口大小则可能会忽略重要的长期依赖关系,但有助于提高模型对短期波动的响应能力。

2、步长(Step Size)

定义:步长是窗口在时间序列上每次移动的时间步数。通常为一个时间步长。

较小的步长(例如,1)会导致生成更多的训练样本,从而增加模型的训练数据量。这可以提高模型的鲁棒性,但也会增加训练时间。

较大的步长会减少训练样本的数量,可能会导致模型对数据的学习不够全面,但训练速度会加快。

因此,在使用滑动窗口的时候,要合理地选择窗口大小和步长,需要平衡样本数量、模型的学习能力和训练时间。理想情况下,应选择能有效捕捉时间序列特征的窗口大小和适当的步长,以实现最佳性能。

二、窗口大小、步长与可用样本数量的关系

可用样本数量是指在给定的时间序列数据中,使用滑动窗口技术生成的样本的总数

假设:

  • N:时间序列的总长度(数据点数量)
  • W:窗口大小(每个样本包含的时间步数)
  • S:步长(窗口每次移动的时间步数)

可用样本数量的计算公式为:

注意:使用向下取整(⌊⋅⌋),确保样本数量是一个整数,且在数据不够时不会超出边界。

三、实例分析

前提:对于时间序列预测模型,假如整个数据集有100组数据,按8:2分成训练集和测试集,窗口大小 W=4 步长 S=2

下面是分析:

1、数据集划分
  • 总数据点数 N=100N = 100N=100
  • 训练集数据点数 Ntrain=80(80%)
  • 测试集数据点数 Ntest=20(20%)
2、计算可用样本数量

(1)训练集

(2)测试集

3、确定特征组和标签组数量

如果此时认为训练集和测试集中各自的特征和标签组数量与可用样本数量相同,那就错了!!

在时间序列预测中,特征组和标签组是紧密关联的,每个特征组都对应一个标签组, 特征组数量和标签组数量应相同。

对于时间序列预测模型,特征和标签是错开的。每个特征样本对应一个标签,而标签通常是特征组对应的下一个时间步的数据。如果特征组数量与可用样本数量相同,那么最后一组特征组就没有标签组对应,因此,特征和标签的组数量应与可用样本数量有所不同

为了尽可能多的利用样本数据,最终:

特征组数量=标签组数量=可用样本数量-1

(1)训练集

特征组数量:38(39-1)

标签组数量:38

(2)测试集

特征组数量:8(9-1)

标签组数量:8

最后,提取特征组和标签组

  • 第一组

    • 特征组:[x1,x2,x3,x4] → 标签 [x5,x6]
  • 第二组

    • 特征组:[x3,x4,x5,x6] → 标签 [x7,x8]
  • 第三组

    • 特征组:[x5,x6,x7,x8] → 标签 [x9,x10]
  • 第四组

    • 特征组:[x7,x8,x9,x10]→ 标签 [x11,x12]


http://www.mrgr.cn/news/65590.html

相关文章:

  • 电子商城购物平台的设计与开发+ssm(lw+演示+源码+运行)
  • 如何修改WordPress经典编辑器的默认高度?
  • sql注入——靶场Less1
  • 第一章·计算机网络体系结构
  • Fish Agent:集成 ASR 和 TTS 的端到端语音处理模型,支持多语言转换
  • 惊喜!RFID技术的应用竟如此多元?
  • TypeScript中的类型注解、Interface接口、泛型
  • Linux设置openfile
  • WPF+MVVM案例实战(二十二)- 制作一个侧边弹窗栏(CD类)
  • 把握人工智能行业脉搏!全球最值得关注的7大AI资讯平台
  • Qt项目实战:磁盘容量计算器
  • 【Moonshine Onnx版本 语音识别】
  • Linux之crontab使用
  • JavaEE-多线程初阶(3)
  • Android笔记(三十三):封装设备性能级别判断工具——低端机还是高端机
  • MySQL表的增删改查(CRUD2)
  • 栈和队列(三)
  • 新手入门c++,咳咳,(9),咳咳
  • 你从未见过的小主机,买也买不到的科技尤物,只让你眼馋
  • 考公VS考研,在职上班族拼哪个性价比高?
  • Ubuntu开启FTP与SSH服务
  • JS中面向对象
  • 源码阅读心得---如何从零开始阅读一个框架的源码
  • (七)Python运算符和优先级
  • 心觉:人每日60000念头,如何让你的时间精力只专注于核心目标?
  • R 语言数据导入与导出