[机器学习从入门到入土] 自回归滑动平均ARMA

[机器学习从入门到入土] 自回归滑动平均ARMA

个人导航

知乎:https://www.zhihu.com/people/byzh_rc

CSDN:https://blog.csdn.net/qq_54636039

注:本文仅对所述内容做了框架性引导,具体细节可查询其余相关资料or源码

参考文章:各方资料

文章目录

  • [机器学习从入门到入土] 自回归滑动平均ARMA
  • 个人导航
  • 参考资料
  • 背景
  • 架构(公式)
        • 1) ARMA(p,q) 定义
        • 2) 滞后算子形式
        • 3) 平稳性
        • 4) 可逆性
        • 5) 自相关结构(ACF/PACF的经验判断)
        • 6) 选阶与拟合(实战最常用)
  • 创新点
  • ARMA到底有什么用
        • 1) 作为强基线
        • 2) 拆结构与做残差白化
        • 3) 小数据与低成本场景
        • 4) 特征工程与信号任务
  • 代码实现 - numpy(模拟为主)

参考资料

Box & Jenkins:时间序列分析经典框架

背景

很多序列同时存在两类朴素现象

  • 一类是惯性与相关性:当前值和过去若干时刻的值强相关
  • 另一类是冲击回响:随机扰动并非立刻消失 而会在短期内拖尾

-> AR 负责刻画值的记忆
-> MA 负责刻画噪声的记忆

ARMA 就是把两者合在一起的最经典统计基线之一

  • 既用过去的观测值解释现在
  • 也用过去的随机冲击解释现在
  • 常作为 ARIMA 的基础模块

架构(公式)

1) ARMA(p,q) 定义

设序列为{ x t } \{x_t\}{xt}白噪声为ε t ∼ N ( 0 , σ 2 ) \varepsilon_t \sim \mathcal{N}(0,\sigma^2)εtN(0,σ2)

x t = c + ∑ i = 1 p ϕ i x t − i + ε t + ∑ j = 1 q θ j ε t − j x_t = c + \sum_{i=1}^{p}\phi_i x_{t-i} + \varepsilon_t + \sum_{j=1}^{q}\theta_j \varepsilon_{t-j}xt=c+i=1pϕixti+εt+j=1qθjεtj

  • c cc:常数项
  • ϕ i \phi_iϕiAR 系数表示i ii个滞后观测对当前的贡献
  • θ j \theta_jθjMA 系数表示j jj个滞后冲击对当前的回响
  • p pp:AR 阶数
  • q qq:MA 阶数

直观理解

  • AR 部分负责建模可预测的结构
  • MA 部分负责建模误差的相关结构
2) 滞后算子形式

定义滞后算子L LL满足L x t = x t − 1 L x_t = x_{t-1}Lxt=xt1

定义 AR 多项式Φ ( L ) \Phi(L)Φ(L)和 MA 多项式Θ ( L ) \Theta(L)Θ(L)

Φ ( L ) = 1 − ϕ 1 L − ϕ 2 L 2 − ⋯ − ϕ p L p Θ ( L ) = 1 + θ 1 L + θ 2 L 2 + ⋯ + θ q L q \Phi(L) = 1 - \phi_1 L - \phi_2 L^2 - \cdots - \phi_p L^p \\ \Theta(L) = 1 + \theta_1 L + \theta_2 L^2 + \cdots + \theta_q L^qΦ(L)=1ϕ1Lϕ2L2ϕpLpΘ(L)=1+θ1L+θ2L2++θqLq

则 ARMA 可写成:
Φ ( L ) x t = c + Θ ( L ) ε t \Phi(L) x_t = c + \Theta(L)\varepsilon_tΦ(L)xt=c+Θ(L)εt

这个形式很适合讨论平稳性与可逆性

3) 平稳性

ARMA 通常要求序列平稳 否则参数会漂 预测会爆

平稳性主要由 AR 部分决定

条件是AR 特征多项式Φ ( z ) = 0 \Phi(z)=0Φ(z)=0的根都在单位圆外

记忆法

  • 根在单位圆外
  • 系统不爆炸
  • 自相关会衰减
4) 可逆性

MA 部分参数要唯一且估计稳定 常要求可逆

条件是MA 多项式Θ ( z ) = 0 \Theta(z)=0Θ(z)=0的根都在单位圆外

记忆法

  • AR 看平稳
  • MA 看可逆
  • 两者都是为了防止爆和不唯一
5) 自相关结构(ACF/PACF的经验判断)

AR§

  • PACF 往往在p pp阶截尾
  • ACF 往往拖尾

MA(q)

  • ACF 往往在q qq阶截尾
  • PACF 往往拖尾

ARMA(p,q)

  • ACF 通常拖尾
  • PACF 通常也拖尾

所以 ARMA 常需要信息准则去选阶

6) 选阶与拟合(实战最常用)

选阶常用 AIC/BIC 越小越好

  • AIC 更偏向拟合
  • BIC 更偏向简洁

ARMA 的拟合一般不用 OLS

因为 MA 部分涉及不可观测的ε t − j \varepsilon_{t-j}εtj

主流做法是 MLE 或数值优化

创新点

  1. 极简但强:同时建模值的记忆噪声的记忆
  2. 可解释:ϕ i \phi_iϕi对应惯性贡献θ j \theta_jθj对应冲击回响
  3. 强基线:Box-Jenkins 体系核心模块
  4. 低成本:参数少 拟合快小数据友好

ARMA到底有什么用

1) 作为强基线

在预测任务里 ARMA 是经典强基线

当你上 LSTM Transformer 之前 先用 ARMA 能快速得到一个可解释且靠谱的参考误差

2) 拆结构与做残差白化

很多真实序列的误差不是白噪声 而是带短期相关的 colored noise

ARMA 可以把

  • 观测值的惯性结构
  • 噪声的拖尾结构

一起解释掉

剩下的残差更接近白噪声 方便后续做控制与检测

3) 小数据与低成本场景

ARMA 参数少 训练快 数据需求小

在样本不多或实时性强时很实用

4) 特征工程与信号任务

对 1D 信号分类任务常见用法

  • 拟合 ARMA 后用ϕ , θ , σ 2 \phi,\theta,\sigma^2ϕ,θ,σ2当统计特征
  • 或者用 ARMA 先白化再做分类 提升对异常冲击的敏感度

代码实现 - numpy(模拟为主)

说明:ARMA 的严格拟合通常用 MLE statsmodels 更合适
numpy 这里重点给序列模拟与预测接口 便于理解机制

importnumpyasnpimportmatplotlib.pyplotasplt plt.rcParams["font.sans-serif"]=["SimHei"]plt.rcParams["axes.unicode_minus"]=False# =========================# 1) ARMA(p,q) 序列模拟# =========================defsimulate_arma(n:int=400,phi=(0.7,-0.25),theta=(0.6,),c=0.0,noise_std=1.0,burn_in=200,seed=0):""" x_t = c + sum_i phi_i x_{t-i} + eps_t + sum_j theta_j eps_{t-j} """rng=np.random.default_rng(seed)phi=np.asarray(phi,dtype=float)theta=np.asarray(theta,dtype=float)p=len(phi)q=len(theta)# 预留足够长度用于 burn-in 与滞后T=n+burn_in+max(p,q)+1eps=rng.normal(0.0,noise_std,size=T)x=np.zeros(T,dtype=float)# 初始化一些随机值避免全 0 起步fortinrange(max(p,q)):x[t]=rng.normal(0.0,noise_std)fortinrange(max(p,q),T):ifp>0:# 取 x[t-p],...,x[t-1] 再反转成 [x_{t-1},...,x_{t-p}]ar_part=float(phi @ x[t-p:t][::-1])else:ar_part=0.0ifq>0:# 取 eps[t-q],...,eps[t-1] 再反转成 [eps_{t-1},...,eps_{t-q}]ma_part=float(theta @ eps[t-q:t][::-1])else:ma_part=0.0x[t]=c+ar_part+eps[t]+ma_partreturnx[-n:]# =========================# 2) 给定参数的递推预测(多步)# =========================defforecast_arma_multi_step(history:np.ndarray,phi:np.ndarray,theta:np.ndarray,c:float,steps:int):""" 用已知参数做多步递推 注意:严格 ARMA 预测需要对未来 eps 做条件期望 这里给一个教学版近似:未来 eps 取 0 仅保留 AR 递推与已知历史 eps 项 """history=list(np.asarray(history,dtype=float))phi=np.asarray(phi,dtype=float)theta=np.asarray(theta,dtype=float)p=len(phi)q=len(theta)# 近似处理:仅使用历史残差缓冲 未来残差取 0eps_buf=[0.0]*q preds=[]for_inrange(steps):last_x=np.array(history[-p:][::-1])ifp>0elsenp.array([])last_eps=np.array(eps_buf[::-1])ifq>0elsenp.array([])ar_part=float(phi @ last_x)ifp>0else0.0ma_part=float(theta @ last_eps)ifq>0else0.0yhat=c+ar_part+ma_part preds.append(yhat)history.append(yhat)ifq>0:eps_buf=eps_buf[1:]+[0.0]returnnp.array(preds,dtype=float)# =========================# 3) Demo:模拟 + 可视化# =========================defdemo():x=simulate_arma(n=600,phi=(0.75,-0.35),theta=(0.55,),c=0.2,noise_std=0.8,burn_in=400,seed=42)n_train=450train=x[:n_train]test=x[n_train:]# 教学演示:假设我们已知真实参数phi=np.array([0.75,-0.35],dtype=float)theta=np.array([0.55],dtype=float)c=0.2pred_multi=forecast_arma_multi_step(train,phi,theta,c,steps=len(test))mse_multi=float(np.mean((pred_multi-test)**2))t_train=np.arange(len(train))t_test=np.arange(len(train),len(train)+len(test))plt.figure(figsize=(10,5))plt.plot(t_train,train,label="train")plt.plot(t_test,test,label="test (true)")plt.plot(t_test,pred_multi,label="ARMA多步递推预测(教学近似)")plt.axvline(len(train)-1)plt.title(f"ARMA(p=2,q=1) - 多步递推预测 | MSE={mse_multi:.3f}")plt.xlabel("时间 t")plt.ylabel("$x_t$")plt.legend()plt.tight_layout()plt.show()if__name__=="__main__":demo()

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

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

相关文章

pgloader数据迁移工具实战指南:高效掌握PostgreSQL智能迁移技术

pgloader数据迁移工具实战指南:高效掌握PostgreSQL智能迁移技术 【免费下载链接】pgloader dimitri/pgloader: 这是一个用于将数据从各种来源加载到PostgreSQL数据库的工具。适合用于需要将数据导入PostgreSQL数据库的场景。特点:易于使用,支…

YOLO26成本核算:按小时计费GPU资源消耗分析

YOLO26成本核算:按小时计费GPU资源消耗分析 在实际AI工程落地中,模型训练与推理不是“一次部署、永久免费”的过程。尤其当使用云上GPU资源时,每一分算力都在产生真实成本。YOLO26作为最新一代轻量级目标检测与姿态估计统一模型,…

Java反编译与源代码解析实战指南:从字节码到可读代码的转换利器

Java反编译与源代码解析实战指南:从字节码到可读代码的转换利器 【免费下载链接】jd-gui A standalone Java Decompiler GUI 项目地址: https://gitcode.com/gh_mirrors/jd/jd-gui 当你拿到一个没有源代码的Java程序时,是否曾因无法深入理解其内部…

MiniDisc管理2023升级版:Platinum-MD无损音乐传输解决方案

MiniDisc管理2023升级版:Platinum-MD无损音乐传输解决方案 【免费下载链接】platinum-md Minidisc NetMD Conversion and Upload 项目地址: https://gitcode.com/gh_mirrors/pl/platinum-md MiniDisc作为承载着90年代音乐记忆的经典载体,至今仍被…

YOLO26导出TorchScript?模型部署兼容性测试

YOLO26导出TorchScript?模型部署兼容性测试 最近不少开发者在实际落地YOLO26时遇到一个共性问题:训练好的模型怎么快速部署到生产环境?尤其是需要对接C推理引擎、边缘设备或已有PyTorch Serving服务时,TorchScript成了绕不开的一…

3步实现Axure全界面中文化:面向设计师的软件本地化方案

3步实现Axure全界面中文化:面向设计师的软件本地化方案 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包,不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn …

Live Avatar模型加载原理:FSDP分片与重组过程详细图解

Live Avatar模型加载原理:FSDP分片与重组过程详细图解 1. Live Avatar是什么:一个面向实时数字人的开源模型 Live Avatar是由阿里联合高校团队开源的端到端数字人生成模型,它能将一张静态人像、一段语音和一段文本提示,合成出自…

3步极速部署CodeCombat编程学习平台:从环境搭建到教学应用全指南

3步极速部署CodeCombat编程学习平台:从环境搭建到教学应用全指南 【免费下载链接】codecombat Game for learning how to code. 项目地址: https://gitcode.com/gh_mirrors/co/codecombat CodeCombat作为一款游戏化编程学习平台,将代码编写与游戏…

麦橘超然代码实例解析:generate_fn函数调用细节

麦橘超然代码实例解析:generate_fn函数调用细节 1. 什么是麦橘超然?——一个轻量高效的离线图像生成控制台 你可能已经听说过 Flux.1,这个由 Black Forest Labs 推出的开源图像生成架构,以高保真度和强可控性著称。但真正让它“…

AI原生开发来临:IQuest-Coder-V1全栈应用部署趋势

AI原生开发来临:IQuest-Coder-V1全栈应用部署趋势 1. 这不是又一个“会写代码”的模型,而是能真正理解软件怎么长大的模型 你可能已经见过不少标榜“编程能力强”的大模型——它们能补全函数、解释报错、甚至生成简单脚本。但IQuest-Coder-V1-40B-Inst…

纪元1800模组加载器:如何用工具解锁游戏新玩法?

纪元1800模组加载器:如何用工具解锁游戏新玩法? 【免费下载链接】anno1800-mod-loader The one and only mod loader for Anno 1800, supports loading of unpacked RDA files, XML merging and Python mods. 项目地址: https://gitcode.com/gh_mirror…

突破Windows外设限制:BthPS3如何让PS3手柄焕发第二春

突破Windows外设限制:BthPS3如何让PS3手柄焕发第二春 【免费下载链接】BthPS3 Windows kernel-mode Bluetooth Profile & Filter Drivers for PS3 peripherals 项目地址: https://gitcode.com/gh_mirrors/bt/BthPS3 BthPS3是一款开源游戏手柄驱动项目&am…

如何提升verl训练效率?并行化策略部署教程

如何提升verl训练效率?并行化策略部署教程 1. verl框架快速入门:为什么它特别适合LLM后训练 你可能已经听说过很多强化学习框架,但verl不一样——它不是为通用RL任务设计的玩具,而是专为大型语言模型(LLMs&#xff0…

GPEN与GFPGAN对比评测:推理速度与画质提升部署案例分析

GPEN与GFPGAN对比评测:推理速度与画质提升部署案例分析 1. 为什么需要人像修复模型?从模糊老照片到高清复原的真实需求 你有没有翻过家里的老相册?泛黄的纸页上,父母年轻时的合影、祖辈穿着中山装的单人照,眼神清晰却…

Yahoo Finance金融数据接口实战指南:从基础应用到高级解决方案

Yahoo Finance金融数据接口实战指南:从基础应用到高级解决方案 【免费下载链接】YahooFinanceApi A handy Yahoo! Finance api wrapper, based on .NET Standard 2.0 项目地址: https://gitcode.com/gh_mirrors/ya/YahooFinanceApi 在金融科技应用开发中&…

颠覆式3步解锁星露谷MOD自由:零代码打造专属游戏体验

颠覆式3步解锁星露谷MOD自由:零代码打造专属游戏体验 【免费下载链接】StardewMods Mods for Stardew Valley using SMAPI. 项目地址: https://gitcode.com/gh_mirrors/st/StardewMods 你是否曾梦想过自定义星露谷的季节景观,给村民添加全新剧情&…

Linux中,使用 sh 启动与停止Jar程序

一、在Linux中,使用 sh 指令,启动 Jar 注:项目,非CI/CD自动流水线部署的jar功能,需要在Linux中手动部署,使项目启动,应用网站。 二、start.sh 启动文件 #!/bin/bash echo Starting application nohup java -jar…

Windows音频增强解决方案:ViPER4Windows兼容性修复与优化技巧

Windows音频增强解决方案:ViPER4Windows兼容性修复与优化技巧 【免费下载链接】ViPER4Windows-Patcher Patches for fix ViPER4Windows issues on Windows-10/11. 项目地址: https://gitcode.com/gh_mirrors/vi/ViPER4Windows-Patcher 在Windows 10/11系统中…

4个维度掌握Snipe-IT:从0到1构建企业级资产管理体系

4个维度掌握Snipe-IT:从0到1构建企业级资产管理体系 【免费下载链接】snipe-it A free open source IT asset/license management system 项目地址: https://gitcode.com/GitHub_Trending/sn/snipe-it 开源资产管理系统Snipe-IT是企业IT资产全生命周期管理的…

DeepSeek-R1-Distill-Qwen-1.5B多场景落地:教育、金融、电商

DeepSeek-R1-Distill-Qwen-1.5B多场景落地:教育、金融、电商 你有没有遇到过这样的情况: 老师要为不同年级学生定制数学题,但手动出题耗时又难保质量; 金融分析师需要快速解读财报中的关键数据,却在密密麻麻的表格里反…