LSTM与Prophet时间序列预测实验

本文是关于使用LSTM网络与Facebook的Prophet工具进行时间序列预测的对比实验。实验数据来源于维基百科美国橄榄球运动员佩顿·曼宁的日访问量记录。在Pytorch中构建的LSTM模型进行两天预测一天的实验,Prophet则展示了其时间序列分解和机器学习拟合的能力。结果显示LSTM预测效果较好,但Prophet能预测更长时间范围,且实验指出LSTM进行多步预测可能涉及复杂的seq2seq模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LSTM与Prophet时间序列预测实验

原文在个人博客
LSTM与Prophet时间序列预测实验 - BraveY的文章 - 知乎
分别使用Pytorch构建的LSTM网络与Facebook开源的Prophet工具对时间序列进行预测的一个对比小实验,同时作为一个小白也借着这个实验来学习下Pytorch的使用,因为第一次使用,所以会比较详细的注释代码。

使用的数据为了与Prophet进行对比,因此使用了Prophet官网例子上用到的数据集。该时间序列数据集来自维基百科上面对美国橄榄球运动员佩顿·曼宁(Peyton Williams Manning)的日访问量的记录日志,时间跨度为2007年12月10号到2016年1月20号共2905条数据。

Jupyter代码与数据集地址在我的github上,欢迎star。

LSTM

LSTM的介绍参考夕小瑶陈诚的介绍,代码主要参考凌空的桨源码链接 ,在Pytorch1.3.1的版本上面改了一下,主要是测试的逻辑修改成了使用测试集以及取消了Variable的使用。整体的逻辑是使用前面的两天的数据来预测下一天的数据,网络的结构是使用了两层LSTM与一层线性回归层。

数据预处理

首先是数据的预处理代码如下:

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import torch 
from torch import nn

#数据预处理
data = pd.read_csv('example_wp_log_peyton_manning.csv',usecols=[1])
data = data.dropna() #丢弃空值
dataset = data.values
dataset = dataset.astype('float32')

max_value = np.max(dataset)
min_value = np.min(dataset)
scalar = max_value - min_value
dataset = list(map(lambda x: x/scalar, dataset)) #将数据归一化到0~1之间

#划分数据集
#通过前面几条的数据来预测下一条的数据,look_back设置具体的把前面几条的数据作为预测的输入data_X,而输出就是下一条data_Y
def create_dataset(dataset,look_back=2): # 每个的滑动窗口设置为2
    dataX, dataY=[], []
    for i in range(len(dataset)-look_back):
        a=dataset[i:(i+look_back)]
        dataX.append(a)    # 记录窗口的值
        dataY.append(dataset[i+look_back]) # 记录除了前面两个以外的所有值作为正确的标签
    return np.array(dataX
### 时间序列预测的方法和工具 #### 常见的时间序列预测方法 时间序列预测是一种通过对过去的数据进行分析来推测未来的统计技术。以下是几种常见的预测方法: 1. **传统统计学方法** - ARIMA (AutoRegressive Integrated Moving Average): 这种方法适用于平稳的时间序列数据,能够捕捉到序列中的自回归、差分和平滑移动平均效应[^1]。 - Holt-Winters' Exponential Smoothing: 针对具有趋势和季节性的序列设计的一种指数平滑方法,适合处理带有明显周期性和长期变化的趋势型数据[^3]。 2. **机器学习方法** - 支持向量机(SVM) 和随机森林(Random Forests): 可以作为非线性模型应用于时间序列预测中,尽管它们并非专门为时间序列开发,但在某些情况下表现良好[^2]。 - LSTM(Long Short-Term Memory Networks): 属于循环神经网络(RNN),特别擅长捕获长时间依赖关系,在复杂模式识别方面优于传统的RNN结构[^4]。 3. **深度学习方法** - DeepAR: 结合了概率论深度学习的优点,不仅提供单一数值估计还给出整个分布情况,这对于需要量化不确定性的应用非常有用,比如库存管理和风险评估等领域。 - Seq2Seq Models with Attention Mechanism: 使用编码器-解码器架构加上注意力机制提高长距离上下文关联的学习能力,广泛用于翻译任务同时也可扩展至时间序列领域[^4]. #### 工具推荐 对于实施这些算法和技术来说,有许多优秀的开源库可供选择: - Python生态内的`statsmodels`, 提供了实现经典统计模型的功能接口,如ARIMA等. - Scikit-Learn提供了丰富的ML算法支持,便于快速搭建实验环境并比较不同方案的效果. - TensorFlow/Keras框架允许灵活定义复杂的DL模型,特别是当涉及到定制化的层或者损失函数时显得尤为重要. - Prophet由Facebook发布的一个专门面向商业用途的自动化TSF解决方案,内置了许多实用特性简化实际操作流程. ```python from statsmodels.tsa.arima.model import ARIMA import pandas as pd # Example of fitting an ARIMA model using StatsModels library in Python data = pd.read_csv('time_series_data.csv') model = ARIMA(data['value'], order=(5,1,0)) results = model.fit() forecast = results.forecast(steps=10) print(forecast) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值