一篇喂饭级教程Python时序预测常用方法以及代码演示

news2024/9/22 13:35:02

在时序预测中,常用的方法包括以下几种:


  • A.移动平均法

  • B.指数平滑法

  • C.自回归(AR)模型

  • D.滑动平均(MA)模型

  • E.自回归滑动平均(ARMA)模型

  • F.长短期记忆网络(LSTM)

下面我将逐一展示每种方法的代码示例:


1.移动平均法

import numpy as np

# 创建时间序列数据
data = [10, 12, 14, 16, 18, 20, 22, 24, 26, 28]

# 简单平均法预测
def simple_average(data):
    return np.mean(data)

prediction = simple_average(data)
print(f"Simple Average Prediction: {prediction}")  # 输出: 19.0
  • (1)生成模拟数据

  • (2)计算移动平均

  • (3)绘制实际数据和移动平均预测结果

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 生成模拟时间序列数据
np.random.seed(0)
date_rng = pd.date_range(start='2020-01-01', end='2021-01-01', freq='D')
data = np.random.randn(len(date_rng)).cumsum()

# 创建数据框
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = data
df.set_index('date', inplace=True)

# 绘制生成的数据
plt.figure(figsize=(12, 6))
plt.plot(df, label='Actual Data')
plt.title('Simulated Time Series Data')
plt.legend()
plt.show()

2.指数平滑法

  • 指数平滑法是一种常用的时间序列预测方法,通过对过去的数据进行加权平均来预测未来的值,近期的数据权重较大。

import pandas as pd
# 创建时间序列数据
data = [10, 12, 14, 16, 18, 20, 22, 24, 26, 28]
series = pd.Series(data)

# 指数平滑法预测
alpha = 0.2
exp_smoothing = series.ewm(alpha=alpha).mean()
print(exp_smoothing)

绘制实际数据和指数平滑法预测结果

3.自回归(AR)模型

  • 自回归模型通过过去的值来预测未来的值。我们将使用statsmodels库来实现AR模型。

from statsmodels.tsa.ar_model import AutoReg
# 创建时间序列数据
data = [10, 12, 14, 16, 18, 20, 22, 24, 26, 28]

# 自回归模型预测
model = AutoReg(data, lags=1)
model_fit = model.fit()
prediction = model_fit.predict(len(data), len(data))
print(f"AR Prediction: {prediction}")  # 输出预测结果

绘制实际数据和自回归(AR)模型预测结果

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.ar_model import AutoReg

# 设置随机种子以确保可重复性
np.random.seed(42)

# 生成模拟数据
n = 200  # 数据点数量
time = np.arange(n)
data = 0.5 * np.sin(0.1 * time) + np.random.normal(size=n)

# 拟合自回归模型
lags = 10  # 设置滞后阶数
model = AutoReg(data, lags=lags).fit()

# 使用模型进行预测
pred_start = n - lags  # 预测起点
pred_end = n + 20  # 预测终点
pred = model.predict(start=pred_start, end=pred_end)

# 绘制实际数据和预测结果
plt.figure(figsize=(12, 6))
plt.plot(time, data, label='实际数据')
plt.plot(np.arange(pred_start, pred_end + 1), pred, label='AR模型预测', color='red')
plt.xlabel('时间')
plt.ylabel('值')
plt.legend()
plt.title('实际数据与自回归(AR)模型预测结果')
plt.show()

  • 上图展示了生成的时间序列数据(蓝色曲线)和自回归(AR)模型的预测结果(红色曲线).从图中可以看到,AR模型较好地捕捉到了时间序列数据的变化趋势.

4.滑动平均(MA)模型

  • 滑动平均模型使用过去的误差项来预测未来的值。

from statsmodels.tsa.arima.model import ARIMA

# 创建时间序列数据
data = [10, 12, 14, 16, 18, 20, 22, 24, 26, 28]

# 滑动平均模型预测
model = ARIMA(data, order=(0, 0, 1))
model_fit = model.fit()
prediction = model_fit.forecast()
print(f"MA Prediction: {prediction}")  # 输出预测结果

绘制实际数据和滑动平均(MA)模型预测结果

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA

# 设置随机种子以确保可重复性
np.random.seed(42)

# 生成模拟数据
n = 200  # 数据点数量
time = np.arange(n)
data = 0.5 * np.sin(0.1 * time) + np.random.normal(size=n)

# 拟合滑动平均模型
order = (0, 0, 10)  # MA模型的阶数为10
model = ARIMA(data, order=order).fit()

# 使用模型进行预测
pred_start = n  # 预测起点
pred_end = n + 20  # 预测终点
pred = model.predict(start=pred_start, end=pred_end)

# 绘制实际数据和预测结果
plt.figure(figsize=(12, 6))
plt.plot(time, data, label='实际数据')
plt.plot(np.arange(pred_start, pred_end + 1), pred, label='MA模型预测', color='red')
plt.xlabel('时间')
plt.ylabel('值')
plt.legend()
plt.title('实际数据与滑动平均(MA)模型预测结果')
plt.show()

  • 上图展示了生成的时间序列数据(蓝色曲线)和滑动平均(MA)模型的预测结果(红色曲线).从图中可以看到,MA模型较好地捕捉到了时间序列数据的变化趋势.

5.自回归滑动平均(ARMA)模型

  • 首先要安装:

Pip install statsmodels

然后导入

from statsmodels.tsa.arima.model import ARIMA
# 创建时间序列数据
data = [10, 12, 14, 16, 18, 20, 22, 24, 26, 28]

# 自回归滑动平均模型预测
model = ARIMA(data, order=(1, 0, 1))
model_fit = model.fit()
prediction = model_fit.forecast()
print(f"ARMA Prediction: {prediction}")  # 输出预测结果

绘制实际数据和和自回归滑动平均(ARMA)模型预测结果

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA

# 设置随机种子以确保可重复性
np.random.seed(42)
# 生成模拟数据
n = 200  # 数据点数量
time = np.arange(n)
data = 0.5 * np.sin(0.1 * time) + np.random.normal(size=n)
# 拟合自回归滑动平均(ARMA)模型
order = (2, 0, 2)  # ARMA模型的阶数
model = ARIMA(data, order=order).fit()
# 使用模型进行预测
pred_start = n  # 预测起点
pred_end = n + 20  # 预测终点
pred = model.predict(start=pred_start, end=pred_end)
# 绘制实际数据和预测结果
plt.figure(figsize=(12, 6))
plt.plot(time, data, label='实际数据')
plt.plot(np.arange(pred_start, pred_end + 1), pred, label='ARMA模型预测', color='red')
plt.xlabel('时间')
plt.ylabel('值')
plt.legend()
plt.title('实际数据与自回归滑动平均(ARMA)模型预测结果')
plt.show()

6.长短期记忆网络(LSTM)

  • 我们需要安装TensorFlow库.如果你的环境中没有安装,请运行以下命令进行安装:

pip install tensorflow
  • 然后导入 numpy as np

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense

# 设置随机种子以确保可重复性
np.random.seed(42)
tf.random.set_seed(42)

# 生成模拟数据
n = 200  # 数据点数量
time = np.arange(n)
data = 0.5 * np.sin(0.1 * time) + np.random.normal(size=n)

# 准备数据进行训练
def create_dataset(data, time_step=1):
    X, Y = [], []
    for i in range(len(data)-time_step-1):
        X.append(data[i:(i+time_step)])
        Y.append(data[i + time_step])
    return np.array(X), np.array(Y)

time_step = 10
X, Y = create_dataset(data, time_step)
X = X.reshape(X.shape[0], X.shape[1], 1)

# 创建LSTM模型
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(time_step, 1)))
model.add(LSTM(50, return_sequences=False))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mean_squared_error')

# 训练模型
model.fit(X, Y, epochs=100, batch_size=1, verbose=0)

# 进行预测
train_predict = model.predict(X)

# 使用模型预测未来的20个数据点
future_data = list(data[-time_step:])
future_preds = []
for _ in range(20):
    future_input = np.array(future_data[-time_step:]).reshape(1, time_step, 1)
    future_pred = model.predict(future_input)
    future_data.append(future_pred[0][0])
    future_preds.append(future_pred[0][0])

# 绘制实际数据和预测结果
plt.figure(figsize=(12, 6))
plt.plot(time, data, label='实际数据')
plt.plot(np.arange(time_step, len(train_predict) + time_step), train_predict, label='LSTM模型预测', color='red')
plt.plot(np.arange(n, n + 20), future_preds, label='LSTM模型未来预测', color='green')
plt.xlabel('时间')
plt.ylabel('值')
plt.legend()
plt.title('实际数据与长短期记忆网络(LSTM)模型预测结果')
plt.show()
  • 这些示例展示了常见的时序预测方法及其Python实现.不同的方法适用于不同的数据和问题,选择合适的方法是进行准确预测的关键.

  • 感谢大家的关注和支持!想了解更多Python编程精彩知识内容,请关注我的 微信公众号:python小胡子,有最新最前沿的的python知识和人工智能AI与大家共享,同时,如果你觉得这篇文章对你有帮助,不妨点个赞,并点击关注.动动你发财的手,万分感谢!!!

  • 原创文章不易,求点赞、在看、转发或留言,这样对我创作下一个精美文章会有莫大的动力!

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

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

相关文章

华润万家超市购物卡怎么使用?

前两天整理杂物,翻出来两张华润的礼品卡,好在还没有过期 但是那卡只能在线下使用,而且面值也就一百 让我专门跑一趟华润感觉太不方便了 最后朋友告诉我说,可以在收卡云上面把卡内的余额直接提出来,我两张一百的卡总…

开放式耳机哪款性价比高?这五款超值精品不容错过

喜欢进行户外运动的小伙伴们,应该都很需要一款既可以匹配运动场景,又兼顾音质体验的无线蓝牙耳机吧。而开放式耳机拥有佩戴舒适牢固,不堵塞耳部,不影响外部声音传入耳部的优点,完全可以成为运动健身人士户外运动的好伴…

XCP协议介绍(二)

五、XCP命令简介 5.1 数据包简介 XCP的数据包分为两类:CTO(Command Transfer Object)与DTO(Data Transfer Object) CMD:指的是上位机下发给下位机的一些命令,比如连接命令FF,解锁,获取状态等一些和下位机交互的命令&…

【算法题】小红的区间翻转

题目 解题思路 第一想法:暴力? 第一个想法就是写一个验证翻转的函数,然后暴力遍历两遍 验证翻转的函数是这样写的,先克隆,再翻转对应区间,最后用equals判断 public static boolean isValidFlip(int[] a, …

Nodejs 第八十六章(部署pm2)

Node.js如何部署? 如果要部署Nodejs项目,第一点肯定是需要有台服务器,第二点需要一个部署工具这里使用pm2 PM2 PM2 是一个非常流行的 Node.js 进程管理工具,用于在生产环境中运行和监控 Node.js 应用程序。它提供了多种功能,帮…

[数仓]四、离线数仓(Hive数仓系统-续)

第8章 数仓搭建-DWT层 8.1 访客主题 1)建表语句 DROP TABLE IF EXISTS dwt_visitor_topic; CREATE EXTERNAL TABLE dwt_visitor_topic (`mid_id` STRING COMMENT 设备id,`brand` STRING COMMENT 手机品牌,`model` STRING COMMENT 手机型号,`channel` ARRAY<STRING> C…

Visual Studio远程调试工具

路径&#xff1a;安装路径/Common7/IDE/Remote Debugger/平台/msvsmon.exe。 平台有x86、x64&#xff0c;x64即可调试x86进程也可调试x64进程。 将平台路径下的所有文件拷贝至其他PC&#xff0c;运行msvsmon.exe。 工具栏选择“工具&#xff08;T&#xff09;”选择“选项“&…

基于STM32的RFID公交充值消费系统

1.简介 基于RFID技术的公交卡充值消费系统&#xff0c;以其高效快速、安全可靠、方便快捷、易于管理和环保节能等特点&#xff0c;为用户带来优质的公交出行体验。通过非接触式的数据读写&#xff0c;该系统实现了快速充值和消费&#xff0c;同时采用先进的加密和防碰撞算法确保…

浅谈后置处理器之调试后置处理程序

浅谈后置处理器之调试后置处理程序 “调试后置处理程序”(Debug PostProcessor) 是一个特别的组件&#xff0c;它主要用于帮助测试人员深入理解测试脚本执行过程中的变量和属性状态&#xff0c;便于调试和故障排查。 调试后置处理程序简介 功能概述&#xff1a; 调试后置处…

中科亿海微亮相慕尼黑上海电子展

7月8-10日&#xff0c;备受瞩目的全球电子行业盛会“慕尼黑上海电子展”以空前规模启幕&#xff0c;汇聚了超过1600家参展企业&#xff0c;涵盖了从终端产品制造商到元器件供应商、组装/系统供应商、EMS、ODM/OEM、材料供应商及生产设备供应商的完整产业链。中科亿海微电子科技…

Java将Excel转为图片

1. 支持多个Sheet 2. 支持识别 换行 / 文字居中 / 文字居左 3. 支持识别 背景颜色 / 字体颜色 4. 支持识别 计算公式 原Excel表单 识别后生成的图片 下载地址 : https://download.csdn.net/download/dongyan3595/89535740

Linux C语言基础 day7

目录 思维导图&#xff1a; 学习目标&#xff1a; 学习内容&#xff1a; 1. 数组 1.1 对数组元素的常规操作 1.1.1 逆序 1.1.2 挑选数据 1.1.3 排序 1. 冒泡排序 2. 选择排序 2. 二维数组 2.1 二维数组的概念 2.1.1. 定义格式 2.2.2.初始化 2.2 二维数组的相关操…

深度学习pytorch多机多卡网络配置桥接方法

1 安装pdsh&#xff08;Parallel Distributed Shell&#xff09; sudo apt install pdsh sudo -s # 切换超级用户身份 …

Vscode ssh远程连接Linux服务器登录时密码password无法输入

问题 最近在用Vscode远程连接Linux服务器时&#xff0c;在终端提示输入密码password的时候用键盘输入没有反应。 以为是键盘坏了&#xff0c;然后尝试复制粘贴没有用。 后来找到了原因以及解决方法&#xff0c;感谢原帖作者&#xff08;原贴链接粘在下面&#xff09; 原因 …

Java 多继承与接口

Java 多继承与接口 1、为什么Java不支持多继承&#xff1f;2、使用接口实现多继承2.1 接口的定义与实现 3、接口的优点4、结论 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 多继承是指一个类可以继承多个父类&#xff0c;从而获得多个父类…

RHCE-autofs自动挂载

要求 一、在主机上提供web&#xff0c;dns服务 服务端 IP&#xff1a;172.25.250.131/24 dns&#xff1a;172.25.250.131 [rootlocalhost ~]# cd /etc/httpd/conf.d[rootlocalhost conf.d]# vim vhost.conf [rootlocalhost conf.d]# mkdir /nfs/rhce -p[rootlocalhost conf…

基于企业微信第三方接口开发,移除群成员通知

移除群成员通知 返回示例 {"flag": 0, "receiver": 0, "sender_name": "", "is_room": 1, "server_id": 15318083, "send_time": 1687688952, "sender": 1688855749266556, "referid&…

根据视图矩阵, 恢复相机的世界空间的位置

根据视图矩阵, 恢复相机的世界空间的位置 一、方法1 glsl 实现: // 从本地局部坐标系(相机空间) 到 世界空间的旋转变换 mat3 getLocal2WorldRotation() {mat3 world2localRotation mat3(viewMatrix[0].xyz,viewMatrix[1].xyz,viewMatrix[2].xyz);return inverse(world2loca…

推出新的LMK6x 低抖动高性能 BAW 振荡器(器件编号包括LMK6DA、LMK6HA)标准时钟振荡器

前言 体声波 (BAW) 是一种微谐振器技术&#xff0c;能够将高精度 BAW 谐振器直接集成到具有超低抖动时钟电路的封装中。 相关型号&#xff1a;LMK6DA05184ADLER LMK6DA10000ADLFR LMK6DA12288ADLER LMK6HA10000ADLER LMK6HA10000ADLFR LMK6HA10000BDLFR 概述 LMK6x 器件是一…

nsightcompute进阶

一、定义 1 python 代码测试 2 roofline analysis 屋檐模型分析 3 summary 分析 4 Speed of light throughput 分析 5 带宽分析 6 内存分析 二、实现 python 代码测试 2. >>ncu --version 3. >>ncu --list-sets #查看set 类型 4. >>ncu --set full -…