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

机器学习/数据分析--用通俗语言讲解时间序列自回归(AR)模型,并用其预测天气,拟合度98%+

  • 时间序列在回归预测的领域的重要性,不言而喻,在数学建模中使用及其频繁,但是你真的了解ARIMA、AR、MA么?ACF图你会看么?? 时间序列数据如何构造???,我打过不少数学建模,但是都没有弄得很清楚;
  • 这篇将详细讲解了基础模型—AR的原理.

文章目录

  • 1、自回归(AR)详解
    • 1、简要说明
    • 2、原理讲解
    • 3、ACF图
  • 2、案例
    • 1、数据预处理
      • 1、导入库
      • 2、读取数据且预处理
    • 2、实现自回归模型
    • 3、模型预测
    • 4、数据分析和可视化
      • 1、原始数据时间序列图
      • 2、训练集和测试集的预测结构对比图
      • 3、残差分析
      • 4、正相关(ACF)
    • 5、结果分析

1、自回归(AR)详解

1、简要说明

  • 什么是自回归??

自回归:通过过去的数据预测当下的数据,是一个时间序列的基础模型,但是很有效,能够有效的捕捉数据随着时间的变化趋势。

  • 举例解释:

在日常生活中,我们知道一般情况下,当下的气温和前几天的温度是有关系的,比如说这3天很热,明天大概率也会很热,自回归(AR)就是这样的模型,通过前几天的气温预测今天的气温,如:

  1. 今天:20度,记为a,前天:18度,记为b,大前天:22度,记为c,需要预测明天的气温
  2. 明天气温 = k1 * a + k2 * b + k3* c + 随机误差, k1 、 k2 、k3 是权重,这个可以通过计算得出。

2、原理讲解

自回归公式(很像多元线性回归):

y t = c + ϕ 1 y t − 1 + ϕ 2 y t − 2 + ⋯ + ϕ p y t − p + ϵ t y_t=c+\phi_1y_{t-1}+\phi_2y_{t-2}+\cdots+\phi_py_{t-p}+\epsilon_t yt=c+ϕ1yt1+ϕ2yt2++ϕpytp+ϵt

  • ϕ p \phi_p ϕp这是自回归系数,表示当下p个时间点的数据对要预测的yt 这个时间点的重要程度;
  • c:常数项,就如我们一元回归方差,y = ax + b中的那个b
  • ϵ t \epsilon_t ϵt:误差项,用来随机生成数据,模拟波动,让预测效果更加贴近实际;
  • p:滞后阶数,表示用前p个数来预测当前的数据。

通过自回归公式,我当时一眼一看,这不就是多元线性回归么?实际也确实是,只是他添加类误差项而已,实际求解的时候,也是通过最小二乘回归求解系数的。

下面是一个用自回归去探究气温的一组案例,需要关注点有两个如下:

  • 怎么构造时间数据???
  • 怎么利用最小二乘回归去求解系数???

3、ACF图

通过查看数的ACF图,在不同用领域有不同的用处,如下:

  • 白噪声过程:时间序列是随机的,没有可预测的结构,即数据之间没有关系。
  • 模型拟合良好:模型已经很好地捕捉了数据中的所有相关信息,残差是随机的。
  • 数据本身没有自相关性:数据中的每个观测值都是独立的没有时间上的依赖关系。
  • 数据预处理的影响:预处理有效地去除了数据中的自相关性

2、案例

数据:该数据描述的是这几百年的地球平均气温,下载地址:kaggle;

目的:大陆平均气温数据的探究,更加理解AR原理以及数学公式。

1、数据预处理

1、导入库

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
from sklearn.model_selection import train_test_split

2、读取数据且预处理

data_df = pd.read_csv('GlobalTemperatures.csv')
data_df
dtLandAverageTemperatureLandAverageTemperatureUncertaintyLandMaxTemperatureLandMaxTemperatureUncertaintyLandMinTemperatureLandMinTemperatureUncertaintyLandAndOceanAverageTemperatureLandAndOceanAverageTemperatureUncertainty
01750-01-013.0343.574NaNNaNNaNNaNNaNNaN
11750-02-013.0833.702NaNNaNNaNNaNNaNNaN
21750-03-015.6263.076NaNNaNNaNNaNNaNNaN
31750-04-018.4902.451NaNNaNNaNNaNNaNNaN
41750-05-0111.5732.072NaNNaNNaNNaNNaNNaN
..............................
31872015-08-0114.7550.07220.6990.1109.0050.17017.5890.057
31882015-09-0112.9990.07918.8450.0887.1990.22917.0490.058
31892015-10-0110.8010.10216.4500.0595.2320.11516.2900.062
31902015-11-017.4330.11912.8920.0932.1570.10615.2520.063
31912015-12-015.5180.10010.7250.1540.2870.09914.7740.062

3192 rows × 9 columns

# 只保留日期和LanAverageTemperatrue
data_df = data_df[['dt', 'LandAverageTemperature']]
# 查看数据信息
data_df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3192 entries, 0 to 3191
Data columns (total 2 columns):#   Column                  Non-Null Count  Dtype  
---  ------                  --------------  -----  0   dt                      3192 non-null   object 1   LandAverageTemperature  3180 non-null   float64
dtypes: float64(1), object(1)
memory usage: 50.0+ KB
# 缺失值较少,采用前置填充方法
data_df = data_df.fillna(method='ffill')
# 时间转化为datatime格式
data_df['dt'] = pd.to_datetime(data_df['dt'])
# 按照日期排序,确保日期按照顺序
data_df = data_df.sort_values(by='dt')
# 设置日期索引,方便快速查询
data_df.set_index('dt', inplace=True)# 为了更方便后面展示,这里选取最近1000条数据,全部展示,后面绘图,全都堆到一起
data_df = data_df.tail(1000)

2、实现自回归模型

# 深刻理解代码
def create_lagged_features(data, lag):x = []y = []for i in range(lag, len(data)):x.append(data[i - lag : i])y.append(data[i])return np.array(x), np.array(y)
# 使用 5 阶(联系数学公式) 自回归模型
lag = 5
# 提取特征值,目标值(也就是自变量,因变量)
all_temperature_data = data_df['LandAverageTemperature'].values
# 获取自变量、因变量
X, Y = create_lagged_features(all_temperature_data, lag)
# 分割数据集
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=42)

在实际应用中,我们通常会先添加常数项,然后再计算回归系数,因为这样可以保证模型能够捕捉到数据的全局趋势。

# 使用最小二乘法拟合 自回归 模型
def fit_regresiion(x_train, y_train):# 添加常数项, b(结合公式),添加一项,为了适应维度x_train = np.c_[np.ones(x_train.shape[0]), x_train]# 计算回归系数,结合公式 np.linalg.inv 求逆beta = np.linalg.inv(x_train.T @ x_train) @ x_train.T @ y_trainreturn beta
# 拟合,得到回归系数
beta = fit_regresiion(x_train, y_train)
beta

输出:

array([ 5.07449781, -0.04255702, -0.22825367, -0.2961153 ,  0.06135681,0.93721175])

3、模型预测

def predict_ar_model(x, beta):# 添加常数项x = np.c_[np.ones(x.shape[0]), x]  # 添加常数项# 预测y_pred = x @ beta   # 自己相乘,结合公式return y_pred# 测试集、训练集测试
y_pred_train = predict_ar_model(x_train, beta)
y_predict_test = predict_ar_model(x_test, beta)

4、数据分析和可视化

1、原始数据时间序列图

plt.figure(figsize=(10, 6))
plt.plot(data_df.index, data_df['LandAverageTemperature'], color='orange', label='Temperature')
plt.title('Global Land Average Temperature Over Time')
plt.xlabel('Year')
plt.ylabel('Temperature')
plt.legend()
plt.grid(True)
plt.show()


在这里插入图片描述

2、训练集和测试集的预测结构对比图

plt.figure(figsize=(10, 6))
plt.plot(y_train, label='Actual Train', color='blue')
plt.plot(y_pred_train, label='Predicr Train', color='red', linestyle='dashed')
plt.title('AR Model')
plt.xlabel('Time')
plt.ylabel('Temperature')
plt.grid(True)
plt.show()plt.figure(figsize=(10, 6))
plt.plot(y_test, label='Actual Test', color='blue')
plt.plot(y_predict_test, label='Predicr Test', color='red', linestyle='dashed')
plt.title('AR Model')
plt.xlabel('Time')
plt.ylabel('Temperature')
plt.grid(True)
plt.show()


在这里插入图片描述

在这里插入图片描述

3、残差分析

残差图分析误差

residual = y_test - y_predict_test   # 残差计算
plt.figure(figsize=(10, 6))
plt.plot(residual, color='green', label='Residual')
plt.title('Residual of AR on Test Data')
plt.xlabel('Time')
plt.ylabel('Residual')
plt.legend()
plt.grid(True)
plt.show()


在这里插入图片描述

4、正相关(ACF)

检查残差的自相关性,查看是存在未捕捉时间特征

from statsmodels.graphics.tsaplots import plot_acfplt.figure(figsize=(10, 6))
plot_acf(residual, lags=50)   # 展示前50个滞后
plt.title('ACF OF RESIDUAL')
plt.grid(True)
plt.show()
<Figure size 1000x600 with 0 Axes>

在这里插入图片描述

  • 默认置信区间,显著性水平是5%
  • acf图中,值接近为0,几乎全在置信区间内,说明残差数据之间没有关系,残差是随机的,模型有效的捕捉到了时间特征

5、结果分析

from sklearn.metrics import mean_squared_error, r2_scoremse = mean_squared_error(y_test, y_predict_test)
r2 = r2_score(y_test, y_predict_test)print('mse: ', mse)
print('r2', r2)
mse:  0.19718326089184698
r2 0.9889418324562267
  • 综上说明模型有效挖掘了天气的规律

相关文章:

机器学习/数据分析--用通俗语言讲解时间序列自回归(AR)模型,并用其预测天气,拟合度98%+

时间序列在回归预测的领域的重要性&#xff0c;不言而喻&#xff0c;在数学建模中使用及其频繁&#xff0c;但是你真的了解ARIMA、AR、MA么&#xff1f;ACF图你会看么&#xff1f;&#xff1f; 时间序列数据如何构造&#xff1f;&#xff1f;&#xff1f;&#xff0c;我打过不少…...

回溯算法之值子集和问题详细解读(附带Java代码解读)

子集和问题&#xff08;Subset Sum Problem&#xff09; 是一个经典的组合优化问题。问题可以这样描述&#xff1a; 给定一个整数集合和一个目标整数 target&#xff0c;我们需要从集合中选出若干个整数&#xff0c;使它们的和等于 target。如果这样的子集存在&#xff0c;返回…...

mysql游标的使用

说明&#xff1a; 虽然我们也可以通过筛选条件 WHERE 和 HAVING&#xff0c;或者是限定返回记录的关键字 LIMIT 返回一条记录&#xff0c;但是&#xff0c;却无法在结果集中像指针一样&#xff0c;向前定位一条记录、向后定位一条记录&#xff0c;或者是 随意定位到某一条记录 …...

linux udev详解

1.概念介绍 1.1sysfs文件系统 Linux 2.6以后的内核引入了sysfs文件系统&#xff0c;sysfs被看成是与proc、devfs和devpty同类别的文件系统&#xff0c;该文件系统是一个虚拟的文件系统&#xff0c;它可以产生一个包括所有系统硬件的层级视图&#xff0c;与提供进程和状态信息…...

EventSource和websocket该用哪种技术

EventSource&#xff08;也称为Server-Sent Events, SSE&#xff09;和WebSocket都是实现实时通信的技术&#xff0c;但是它们的设计目的和使用场景有所不同。在选择使用哪种技术时&#xff0c;需要根据具体的应用需求来决定。下面是一些关键点&#xff0c;可以帮助你做出选择&…...

通信工程学习:什么是三网融合

三网融合 三网融合&#xff0c;又称“三网合一”&#xff0c;是指电信网、广播电视网、互联网在高层业务应用上的深度融合。这一概念在近年来随着信息技术的快速发展而逐渐受到重视&#xff0c;并成为推动信息化社会建设的重要力量。以下是对三网融合的详细解释&#xff1a; 一…...

自定义类型结构体(上)

目录 结构体类型的声明结构体的概念结构体的声明特殊的声明结构的自引用 结构体变量的创建和初始化结构成员访问操作符 结构体类型的声明 结构体的概念 结构体是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量 举个例子:杰克的英语只考了6…...

b站-湖科大教书匠】4 网络层 - 计算机网络微课堂

【b站-湖科大教书匠】4 网络层 - 计算机网络微课堂_湖科大的计算机网络网课-CSDN博客...

国际 Android WPS Office v18.13 解锁版

WPS Office 移动版&#xff0c;设计不断优化&#xff0c;性能再次提升&#xff01;融入Google Android最新设计标准&#xff0c;Material Design设计风格&#xff0c;完美支持沉浸式&#xff01;简化文档操作&#xff0c;全新移动办公力作。全新界面更清晰舒适&#xff0c;功能…...

【中间件学习】Git的命令和企业级开发

一、Git命令 1.1 创建Git本地仓库 仓库是进行版本控制的一个文件目录。我们要想对文件进行版本控制&#xff0c;就必须创建出一个仓库出来。创建一个Git本地仓库对应的命令是 git init &#xff0c;注意命令要在文件目录下执行。 hrxlavm-1lzqn7w2w6:~/gitcode$ pwd /home/hr…...

FTP连接池与多线程FTP上传下载算法(Java)

设计一个能够处理FTP连接池在多线程环境下,尤其是涉及到故障重连时避免竞争条件的算法,需要综合考虑线程同步、连接状态管理和重试机制。以下是一个设计思路和实现方案: 设计思路 连接池管理: 维护一个连接池,其中包含多个FTP连接对象。每个FTP连接对象需有状态标记(如…...

Spring Cloud微服务详解

Spring Cloud微服务详解 在当今的数字化时代&#xff0c;微服务架构已成为构建大型、复杂应用系统的主流方式。Spring Cloud&#xff0c;作为微服务领域的一颗璀璨明星&#xff0c;以其强大的功能和灵活的架构&#xff0c;吸引了无数开发者的目光。本文将深入探讨Spring Cloud…...

QT学习笔记1.2(QT的应用)

QT原生用于c的开发&#xff0c; 主要应用于电脑、桌面手机桌面软件的开发&#xff0c;主要是widget样式模板。 Qt Widgets、Qt Quick 和 Qt for Python 是 Qt 框架中的三种不同的技术&#xff0c;分别用于不同的应用场景。以下是它们的详细介绍和对比&#xff1a; 1. Qt Widg…...

数学建模算法与应用 第1章 线性规划

第1章 线性规划 线性规划是数学规划领域的重要分支&#xff0c;广泛应用于资源配置、生产计划、物流管理等领域。它主要用于解决如何在满足一定约束条件下&#xff0c;使目标函数&#xff08;如成本、利润等&#xff09;达到最大或最小的问题。第一章将介绍线性规划的基本概念…...

使用 systemd 设置 PHP 程序为服务

使用 systemd 设置 PHP 程序为服务 在现代 Linux 系统中&#xff0c;systemd 是用于管理和控制服务的标准工具。通过 systemd&#xff0c;我们可以轻松地将 PHP 程序配置为后台运行的系统服务&#xff0c;从而实现自动化启动、重启和日志记录等功能。本文将介绍如何为 PHP 程序…...

HRNET模型实现钢板表面缺陷检测

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有&#xff1a;中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等&#xff0c;曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝&#xff0c;拥有2篇国家级人工智能发明专利。 社区特色…...

28 基于51单片机的两路电压检测(ADC0808)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;通过ADC0808获取两路电压&#xff0c;通过LCD1602显示 二、硬件资源 基于KEIL5编写C代码&#xff0c;PROTEUS8.15进行仿真&#xff0c;全部资源在页尾&#xff0c;提供…...

SpringBootTest Mockito 虚实结合编写测试

SpringBootTest & Mockito 虚实结合测试 起因 单一使用mockito&#xff0c;会出现很多mock困难的问题&#xff0c;导致测试编写过程太长&#xff0c;太恶心 单一使用springboottest&#xff0c;会遇到需要外部接口的地方&#xff0c;这个时候就非得去真实调用才行。也很恶…...

国内外网络安全政策动态(2024年9月)

国内网络安全政策动态 ▶︎ 1.三项智能网联汽车强制性国家标准正式发布 9月4日&#xff0c;工业和信息化部组织制定的GB 44495—2024《汽车整车信息安全技术要求》、GB 44496—2024《汽车软件升级通用技术要求》和GB 44497—2024《智能网联汽车 自动驾驶数据记录系统》三项强制…...

使用Android studio进行Unit Test中遇到的问题记录

1、模块本身代码运行不起来 提示&#xff1a; Cannot resolve method ‘getVolumes’ in ‘StorageManager’ Cannot resolve method ‘registerListener’ in ‘StorageManager’ Cannot resolve method ‘unregisterListener’ in ‘StorageManager’ 查看Android 源码&…...

OpenClaw版本升级:Qwen3-4B兼容性测试与迁移方案

OpenClaw版本升级&#xff1a;Qwen3-4B兼容性测试与迁移方案 1. 升级前的准备工作 上周五晚上&#xff0c;当我准备给团队演示OpenClaw的自动化流程时&#xff0c;突然发现控制台弹出了版本更新提示。这个看似简单的升级通知&#xff0c;却让我经历了整整两天的兼容性调试。今…...

pygcn终极指南:解决图神经网络开发者最常遇到的10个核心问题

pygcn终极指南&#xff1a;解决图神经网络开发者最常遇到的10个核心问题 【免费下载链接】pygcn Graph Convolutional Networks in PyTorch 项目地址: https://gitcode.com/gh_mirrors/py/pygcn pygcn是一个基于PyTorch实现的图卷积网络&#xff08;GCN&#xff09;框架…...

SEO 和网站推广有什么区别_如何判断一个网站的 SEO 质量

SEO 和网站推广有什么区别 在数字营销的广阔天地中&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;和网站推广是两个常被提及的概念。它们虽然都旨在提升网站的流量和知名度&#xff0c;但实际上&#xff0c;它们之间有着显著的区别。理解这两者的异同&#xff0c;对于有…...

OpenGL渲染与几何内核那点事-项目实践理论补充(二-1-(1):当你的CAD学会“想象”:图形技术与AI融合的三个层次)

TOC 代码仓库入口&#xff1a; github源码地址。gitee源码地址。 系列文章规划&#xff1a; (OpenGL渲染与几何内核那点事-项目实践理论补充&#xff08;一-1-&#xff08;1&#xff09;&#xff1a;从开发的视角看下CAD画出那些好看的图形们))OpenGL渲染与几何内核那点事-项…...

Qclaw 效率工作流实战测评:让微信变成你的「远程生产力中枢」

一句微信消息&#xff0c;驱动电脑自动干活——这不是概念片&#xff0c;是我用了两周 Qclaw 后的真实体感。 一、Qclaw 是什么&#xff1f;30 秒讲清楚 qclaw Qclaw 是腾讯电脑管家团队出品的个人 AI Agent 工具&#xff0c;基于开源框架 OpenClaw 封装而成。核心逻辑用一句…...

雷军5小时拆车直播爆火!硬核技术成新风口,自媒体可直接做

4月2日晚&#xff0c;雷军5小时直播拆解新一代SU7引发全网热议&#xff0c;单场观看量突破1亿&#xff0c;弹幕满是“硬核”“专业”的好评。这场直播颠覆了技术内容的传播模式&#xff0c;从“参数堆砌”转向“实证拆解”&#xff0c;从“单向宣讲”升级为“双向互动”&#x…...

STM32电位器驱动库:轻量级ADC封装与中值滤波实现

1. 项目概述MentorBit-Potenciometro 是一款专为 MentorBit 系统设计的轻量级电位器&#xff08;Potentiometer&#xff09;模块驱动库&#xff0c;面向 STM32 平台&#xff08;典型为 STM32F4/F7/H7 系列&#xff09;的嵌入式固件开发。该库并非通用 ADC 抽象层&#xff0c;而…...

机器人双目视觉定位系统设计与开发

机器人双目视觉定位系统设计与开发 摘要 双目视觉定位技术是机器人感知环境、实现自主导航和精准操作的核心技术之一。本系统基于双目立体视觉原理,利用Matlab平台完成了从相机标定、图像采集、立体匹配到三维坐标解算的完整流程。系统采用张正友标定法获取相机内外参数,通…...

CherryStudio+Obsidian联动指南:如何让本地笔记成为大模型的长期记忆?

CherryStudio与Obsidian深度整合&#xff1a;构建AI可理解的长期记忆系统 在信息爆炸的时代&#xff0c;我们每天都在产生大量笔记和知识片段&#xff0c;但这些内容往往沉睡在本地文件中&#xff0c;无法与智能工具形成有效互动。Obsidian以其独特的网状笔记结构和本地Markdow…...

2024年实测:火狐浏览器上这3款广告过滤插件,谁才是真正的网页加速器?

2024年火狐浏览器广告过滤插件终极对决&#xff1a;谁才是网页加速王者&#xff1f; 在数字时代&#xff0c;网页浏览速度直接影响着我们的工作效率和上网体验。对于火狐浏览器用户来说&#xff0c;选择一款高效的广告过滤插件不仅能屏蔽恼人的广告&#xff0c;更能显著提升页面…...