📗
TimeSeriesAnalysis101
  • 时间序列分析101:序言
  • 1. 概述
  • 2. 准备和处理时间序列数据
    • 2.1 准备数据集
    • 2.2 寻找时间轴
    • 2.3 时间序列可能遇到的问题
    • 2.4 清洗数据
      • 2.4.1 缺失值处理
      • 2.4.2 改变数据集时间频率
      • 2.4.3 平滑数据
  • 3. 探索式分析(EDA)
    • 3.1 针对时间序列的特殊方法
      • 3.1.1 理解平稳性
      • 3.1.2 寻找自相关
      • 3.1.3 虚假相关性
    • 3.2 常用的可视化图表
      • 3.2.1 1D可视化
      • 3.2.2 2D可视化
  • 4. 基于统计学的时间序列分析方法
    • 4.1 自回归模型(Autoregressive)
    • 4.2 移动平均模型(Moving Average)
    • 4.3 差分整合移动平均自回归模型(Autoregressive Integrated Moving Average)
    • 4.4 向量自回归模型(Vector Autoregression)
    • 4.5 基于统计学方法的优势与劣势
  • 5. 特征生成和特征选择
    • 5.1 特征工程的考虑
    • 5.2 常用的特征清单
    • 5.3 自动特征生成与选择
  • 6. 基于机器学习的时间序列分析方法
    • 6.1 时间序列分类问题
    • 6.2 时间序列聚类问题
  • 7. 基于深度学习的时间序列分析方法
    • 7.1 LSTM长短期记忆网络
      • 7.1.1 使用Pytorch搭建
      • 7.1.2 使用Darts调用
    • 7.2 CNN卷积神经网络
  • 8. 模型评估和性能考虑
    • 8.1 模型评估的考虑
    • 8.2 计算效率的考虑
Powered by GitBook
On this page

Was this helpful?

  1. 8. 模型评估和性能考虑

8.2 计算效率的考虑

在时间序列模型的评估中,准确率总是第一的考虑因素,但有时关于计算效率的考虑也十分重要,尤其是当面对超大数据集或广泛部署应用的时候。

当我们给模型喂入时间序列训练数据集时,一个常见的操作是将原始数据预处理为滑动窗口的数据,例如你的窗口长度是3,这会将你的训练样本扩大3倍。因此如果你遇到了训练时的计算效率问题,可以考虑不要使用重复数据。

以实际数据为例,一个时间序列数据集是[1,2,3,4,5,6,7,8,9,10]。

在不考虑计算效率的情况下,我们通常会这样构建训练样本。

输入

输出

[1,2,3]

4

[2,3,4]

5

[3,4,5]

6

...

...

如果计算资源有限制,可以尝试这样的样本构建方式。

输入

输出

[1,2,3]

4

[4,5,6]

7

[7,8,9]

10

...

...

第二个可用的编码上的方法是使用生成器构建训练样本而不是使用列表显式构建,这使得能够在有限的内存中训练更多的样本数据。

另一个常用的解决资源限制的方式是预计算,这对于时间序列数据是很常用的,因为时间序列数据是有序的,这使得很多时候我们无法使用并行计算的方式来提高计算效率,因此可以使用预计算解决这一问题,尤其是当你的应用是高度时间敏感的,如医疗预测,车辆位置估计等,当得到最新数据以后再计算可能会有较高的时间延迟。

例如你正在使用一个循环神经网络,它接受多个信息通道,经过 100 步时间步长训练,你可以预先计算前 99 个时间步,然后当最后一个数据点终于进来时,你只需要做最后一组矩阵乘法(和其他激活函数计算)而不是 100。理论上这可以加快你的响应时间 100 倍。

对于时间序列数据的储存也有一些技巧,当数据本身很大时,更推荐存储为二进制格式而不是通常的csv格式。因为二进制数据已经是序列化后的数据,在程度读取时仅需要更好的IO,使得读数据更快速,并且二级制格式经过压缩后占据空间更小,可以在内存中运行更多数据。

出于应用的角度,对于时间序列数据的分析有两个需要经常思考的权衡点。

  • 使用全部数据并不总是更好的

  • 更复杂的模型并不总是更好的

诚然,在不考虑效率的时候,使用更复杂的模型在全部数据上训练总是可行的,但是在很多时候这是完全没有必要的,这会导致大量资源的浪费,这就需要我们根据行业经验和数据经验在效果和效率上做权衡,选择合适的折中点。

对第一点再介绍几种常用的选择部分数据的方法,

  • 下采样:可以选择>1的时间间隔构建训练输入,例如选择第一,第三,第五,第七个时间点(共4个值)的值作为输入,而不是选择从第一到第七个时间点(共7个值)的值作为输入

  • 只在最新的数据上训练

  • 减少时间窗口的长度

Previous8.1 模型评估的考虑

Last updated 3 years ago

Was this helpful?