深度学习--时间序列预测方法总结

news2024/11/15 8:00:12

时间序列预测是分析和预测一系列时间顺序数据的方法。不同的时间序列预测方法在应用中根据数据特征和目标有不同的适用性。以下是时间序列预测方法的详细总结,包括概念、原理和Python实现代码。

1. 简单平均法 (Simple Average Method)

概念与原理: 简单平均法是最简单的时间序列预测方法,计算整个时间序列数据的平均值并将其作为所有未来时刻的预测值。这种方法假设时间序列的未来行为与过去的平均值一致。

Python 实现:

import numpy as np

def simple_average(series):
    return np.mean(series)

# 示例数据
data = [3, 8, 12, 14, 18, 24, 27, 30, 31]
prediction = simple_average(data)
print(prediction)

2. 移动平均法 (Moving Average Method)

概念与原理: 移动平均法通过计算一段时间窗口内的平均值来平滑数据。适合处理波动性较大的时间序列数据。可以用于短期预测。

Python 实现:

import pandas as pd

def moving_average(series, window):
    return series.rolling(window=window).mean()

# 示例数据
data = pd.Series([3, 8, 12, 14, 18, 24, 27, 30, 31])
window = 3
ma = moving_average(data, window)
print(ma)

3. 加权移动平均法 (Weighted Moving Average)

概念与原理: 加权移动平均法类似于移动平均法,但对不同时间点赋予不同的权重,通常是近期数据权重较大,远期数据权重较小。

Python 实现:

import numpy as np

def weighted_moving_average(series, weights):
    return np.convolve(series, weights[::-1], 'valid') / sum(weights)

# 示例数据
data = [3, 8, 12, 14, 18, 24, 27, 30, 31]
weights = [0.1, 0.3, 0.6]  # 权重和为1
wma = weighted_moving_average(data, weights)
print(wma)

4. 指数平滑法 (Exponential Smoothing)

概念与原理: 指数平滑法是移动平均法的一种扩展,较新的数据点赋予较大的权重,较旧的数据点权重逐渐减小。适合平稳时间序列的预测。

Python 实现:

def exponential_smoothing(series, alpha):
    result = [series[0]]  # 第一个值保持不变
    for n in range(1, len(series)):
        result.append(alpha * series[n] + (1 - alpha) * result[n-1])
    return result

# 示例数据
data = [3, 8, 12, 14, 18, 24, 27, 30, 31]
alpha = 0.3
es = exponential_smoothing(data, alpha)
print(es)

5. 双指数平滑法 (Double Exponential Smoothing)

概念与原理: 双指数平滑法适用于带有趋势的时间序列,它结合了水平和平滑趋势两个成分来进行预测。

Python 实现:

def double_exponential_smoothing(series, alpha, beta):
    result = [series[0]]
    level, trend = series[0], series[1] - series[0]
    for n in range(1, len(series)):
        last_level, level = level, alpha * series[n] + (1 - alpha) * (level + trend)
        trend = beta * (level - last_level) + (1 - beta) * trend
        result.append(level + trend)
    return result

# 示例数据
data = [3, 8, 12, 14, 18, 24, 27, 30, 31]
alpha, beta = 0.5, 0.5
des = double_exponential_smoothing(data, alpha, beta)
print(des)

6. 三指数平滑法 (Triple Exponential Smoothing/Holt-Winters)

概念与原理: 三指数平滑法,也称为 Holt-Winters 模型,适用于具有季节性变化的时间序列。它包含水平、趋势和季节性三个成分。

Python 实现:

import pandas as pd
from statsmodels.tsa.holtwinters import ExponentialSmoothing

# 示例数据
data = pd.Series([3, 8, 12, 14, 18, 24, 27, 30, 31])
model = ExponentialSmoothing(data, seasonal='add', seasonal_periods=4)
model_fit = model.fit()
predictions = model_fit.predict(start=len(data), end=len(data)+4)
print(predictions)

7. 自回归模型 (AR, AutoRegressive Model)

概念与原理: 自回归模型假设时间序列的当前值是过去若干时间点值的线性组合。适用于平稳时间序列。

Python 实现:

from statsmodels.tsa.ar_model import AutoReg

# 示例数据
data = pd.Series([3, 8, 12, 14, 18, 24, 27, 30, 31])
model = AutoReg(data, lags=1)
model_fit = model.fit()
predictions = model_fit.predict(start=len(data), end=len(data)+4)
print(predictions)

8. 移动平均模型 (MA, Moving Average Model)

概念与原理: 移动平均模型假设时间序列的当前值是过去若干误差项的线性组合。适用于平稳时间序列。

Python 实现:

from statsmodels.tsa.arima.model import ARIMA

# 示例数据
data = pd.Series([3, 8, 12, 14, 18, 24, 27, 30, 31])
model = ARIMA(data, order=(0, 0, 1))
model_fit = model.fit()
predictions = model_fit.predict(start=len(data), end=len(data)+4)
print(predictions)

9. 自回归移动平均模型 (ARMA)

概念与原理: ARMA 模型结合了自回归和移动平均两个模型,适用于平稳时间序列的建模。

Python 实现:

from statsmodels.tsa.arima.model import ARIMA

# 示例数据
data = pd.Series([3, 8, 12, 14, 18, 24, 27, 30, 31])
model = ARIMA(data, order=(2, 0, 1))
model_fit = model.fit()
predictions = model_fit.predict(start=len(data), end=len(data)+4)
print(predictions)

10. 自回归积分移动平均模型 (ARIMA)

概念与原理: ARIMA 模型适用于非平稳时间序列,通过差分的方法使得时间序列平稳,再应用 ARMA 模型进行预测。

Python 实现:

from statsmodels.tsa.arima.model import ARIMA

# 示例数据
data = pd.Series([3, 8, 12, 14, 18, 24, 27, 30, 31])
model = ARIMA(data, order=(2, 1, 1))
model_fit = model.fit()
predictions = model_fit.predict(start=len(data), end=len(data)+4)
print(predictions)

11. 季节性自回归积分移动平均模型 (SARIMA)

概念与原理: SARIMA 模型扩展了 ARIMA 模型,加入了季节性成分,适用于具有季节性模式的时间序列。

Python 实现:

from statsmodels.tsa.statespace.sarimax import SARIMAX

# 示例数据
data = pd.Series([3, 8, 12, 14, 18, 24, 27, 30, 31])
model = SARIMAX(data, order=(1, 1, 1), seasonal_order=(1, 1, 1, 12))
model_fit = model.fit()
predictions = model_fit.predict(start=len(data), end=len(data)+4)
print(predictions)

12. 自回归条件异方差模型 (ARCH)

概念与原理: ARCH 模型用于建模和预测时间序列中的波动性,通过自回归条件异方差来描述时间序列方差的动态变化。

Python 实现:

from arch import arch_model

# 示例数据
data = pd.Series([3, 8, 12, 14, 18, 24, 27, 30, 31])
model = arch_model(data, vol='ARCH', p=1)
model_fit = model.fit()
predictions = model_fit.forecast(horizon=5)
print(predictions.variance.values[-1:])

13. 广义自回归条件异方差模型 (GARCH)

概念与原理: GARCH 模型是 ARCH 模型的扩展,适用于更复杂的时间序列波动性建模。它将误差项的平方和过去波动率结合起来进行预测。

Python 实现:

from arch import arch_model

# 示例数据
data = pd.Series([3, 8, 12, 14, 18, 24, 27, 30, 31])
model = arch_model(data, vol='GARCH', p=1, q=1)
model_fit = model.fit()
predictions = model_fit.forecast(horizon=5)
print(predictions.variance.values[-1:])

14. 长短期记忆网络 (LSTM, Long Short-Term Memory)

概念与原理: LSTM 是一种特殊的循环神经网络(RNN),在时间序列预测中特别有效,能够捕捉时间序列中的长时间依赖关系。

Python 实现:

import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import LSTM, Dense
from sklearn.preprocessing import MinMaxScaler

# 准备数据
data = np.array([3, 8, 12, 14, 18, 24, 27, 30, 31])
data = data.reshape(-1, 1)
scaler = MinMaxScaler(feature_range=(0, 1))
data = scaler.fit_transform(data)

# 构造输入和输出
X, y = [], []
for i in range(len(data)-3):
    X.append(data[i:i+3])
    y.append(data[i+3])
X, y = np.array(X), np.array(y)

# 构建模型
model = Sequential()
model.add(LSTM(50, activation='relu', input_shape=(X.shape[1], X.shape[2])))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')

# 训练模型
model.fit(X, y, epochs=200, verbose=0)

# 预测
x_input = data[-3:].reshape(1, 3, 1)
prediction = model.predict(x_input, verbose=0)
prediction = scaler.inverse_transform(prediction)
print(prediction)

15. Prophet

概念与原理: Prophet 是由 Facebook 开发的时间序列预测模型,设计用于处理具有明确季节性和节假日影响的时间序列。它的优点是易于使用且适合处理大规模数据。

Python 实现:

from fbprophet import Prophet
import pandas as pd

# 示例数据
data = pd.DataFrame({
    'ds': pd.date_range(start='2020-01-01', periods=9, freq='M'),
    'y': [3, 8, 12, 14, 18, 24, 27, 30, 31]
})

model = Prophet()
model.fit(data)

# 预测
future = model.make_future_dataframe(periods=5, freq='M')
forecast = model.predict(future)
print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']])

结论

以上介绍的时间序列预测方法涵盖了从简单的平均法、移动平均法到复杂的机器学习模型,如LSTM和Prophet。不同的方法适用于不同类型的时间序列数据,在实际应用中,通常需要对比多种方法的预测效果,选择最优的模型来进行预测。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2055373.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT网络编程: 实现UDP通讯设置

目录 一.widget.ui界面设计 二.创建UDP通信 1.pro文件添加network模块。 2.添加对应头文件 3.定义槽函数,即与 UI 中的按钮点击事件相关联的函数 4.定义类的私有成员 5.关闭按钮 6.信息处理 7.绑定端口 8.发送信息 9.效果图 三.代码演示 1.widget.h 2.…

鸿蒙公共事件和通知

创建一个鸿蒙应用项目,在Index页面中创建一个按钮,点击该按钮,可以创建一个公共事件订阅者,可以订阅自定义公共事件(事件名称为:“ncwu.harmonytest.event1”);创建一个Toggle组件&a…

解决 kill -9 PID 无法杀死 python 进程的问题:杀死 defunct 进程

文章目录 1. 一定要用 Ctrl C 结束程序2. 如何杀死后台僵尸 (defunct) 进程2.1 查看 defunct 进程2.2 杀死 defunct 进程的父进程 1. 一定要用 Ctrl C 结束程序 CtrlZ 和 CtrlC 都可以中断程序,但他们却有很大的差异,主要体现在: CtrlC: …

FSR超分笔记

最近因为工作原因,接触到了超分以及AMD家出的FSR算法,特意记录了解一下~ 前言 超分辨率是通过硬件或软件方法提高原有图像分辨率的方法,通过一幅或者多幅低分辨率的图像来得到一幅高分辨率的图像。 FSR是AMD提出的一种超分辨率方法&#x…

力扣面试经典算法150题:轮转数组

轮转数组 今天的题目是力扣面试经典150题中的数组的基础难度题:轮转数组。 题目链接:https://leetcode.cn/problems/rotate-array/description/?envTypestudy-plan-v2&envIdtop-interview-150 问题描述 给定一个整型数组 nums 和一个整数 k&…

微服务实战系列之玩转Docker(十一)

前言 在云原生的世界,经过十多年的进化,Docker已经形成了较完备的“后勤”保障服务和建立了荣辱与共的“密友圈”。用一句话可以概括:“Docker走遍天下,Swarm功不可没”。 因此,我们需尽可能做到对Swarm有充分的认识…

Java面试篇(多线程相关专题)

文章目录 0. 前言1. 线程基础1.1 线程和进程1.1.1 进程1.1.2 线程1.1.3 进程和线程的区别 1.2 并行和并发1.2.1 单核 CPU 的情况1.2.2 多核 CPU 的情况1.2.3 并行和并发的区别 1.3 线程创建的方式1.3.1 继承 Thread 类,重写 run 方法1.3.2 实现 Runnable 接口&#…

工业一体机在工业自动化控制领域的关键性作用

随着工业自动化技术的不断发展和应用范围的不断扩大,工业一体机作为一种集成了多种功能的自动化控制设备,在工业自动化控制领域扮演着越来越重要的角色。 一、 集成性强,简化系统架构 传统工业自动化控制系统通常由多个独立的设备组成&…

php7.1编译安装

1.安装必要的工具: 首先确保您已经安装了 Xcode 和 Command Line Tools:xcode-select --install2.下载 PHP 7.1 源代码: 访问 PHP 官方网站下载 PHP 7.1 的源代码: wget https://www.php.net/distributions/php-7.1.33.tar.gz t…

基于Java企业项目管理系统--论文pf

TOC springboot527基于Java企业项目管理系统--论文pf 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现,改变了几千年以来人们的生活,不仅仅是生活物资的丰富,还有精神层次的丰富。在互联网诞生之前,地域位置往往是人们思想上…

指针详解(五)

目录 1. 回调函数 2. qsort使用举例 1)排序整型数据 2)排序结构数据 3. qsort函数的模拟实现(冒泡) 1. 回调函数 回调函数就是一个通过函数指针调用的函数 函数的指针(地址)作为参数传递给另一个函数…

【python】Python实现XGBoost算法的详细理论讲解与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

AI文字生成漫画短视频系统工具搭建部署,AI文生漫画短视频

目录 前言: 一、AI文生动漫小程序具有以下特点和功能: 二、文生动漫目前有哪些项目? 三、怎么搭建文生动漫小程序? 前言: AI文生动漫小程序是一款基于人工智能技术开发的动漫创作工具。它利用先进的机器学习算法&a…

大数据处理与智慧营销系统性能优化

随着企业数字化转型的加速,客户经营数字化正在向智能化方向发展,构建全场景、全流程、全触点的数字化、智能化的客户经营智慧营销体系。智慧营销系统已运行 5 年,伴随着业务增长,系统业务流程复杂度增大,大表数据量已超…

FreeSWITCH Record

1概述 FreeSWITCH https://signalwire.com/freeswitch是一个开源的电话交换平台。官方给它的定义是–世界上第一个跨平台的、伸缩性极好的、免费的、多协议的电话软交换平台。由这个定义我们可以得出以下几点: FreeSWITCH是跨平台的。它能原生地运行于Windows、MaxOSX、Linux、…

计算几何,CF 993A - Two Squares

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 A - Two Squares 二、解题报告 1、思路分析 由于数据量很小,可…

《Redis核心技术与实战》学习笔记5——内存快照RDB:宕机后,Redis如何实现快速恢复?

文章目录 给哪些内存数据做快照?快照时数据能修改吗?可以每秒做一次快照吗?小结 大家好,我是大白。 上篇文章记录了 Redis 避免数据丢失的 AOF 方法。这个方法的好处,是每次执行只需要记录操作命令,需要持久化的数据量…

11.4k star! 部署清华开源的ChatGLM3,用私有化大模型无缝替换openai

转自AI技术实战 ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的对话预训练模型。ChatGLM3-6B 是 ChatGLM3 系列中的第三代开源模型,对话流畅、部署门槛低,测评显示其基础模型ChatGLM3-6B-Base 具有在 10B 以下的基础模型中最强的性能,同时…

ESP32CAM人工智能教学19

ESP32CAM人工智能教学19 Udp socket服务器 本课的工作模式,正好是第十四课工作模式的相反:第十四课中,ESP32Cam是客户端,运行在PC中的Python程序是服务器,就收到了摄像头数据后,调用openCV组件显示图像。而本课的ESP32Cam是服务器,Python是客户端,正好掉了个个,目的就…

蓝桥杯编程题讲解

给定一个正整数 N ,然后将 N 分解成 3 个正整数之和。 计算出共有多少种符合要求的分解方法。 要求: 分解的 3 3 3个正整数各不相同; 分解的 3 3 3个正整数中都不含数字3和7. 如:N为8,可分解为 ( 1 , 1 , 6 ) (1,1,6) (1,1,6)、 ( 1 , 2 ,…