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

【机器学习 | ARIMA】经典时间序列模型ARIMA定阶最佳实践,确定不来看看?

在这里插入图片描述

🤵‍♂️ 个人主页: @AI_magician
📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。
👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍
🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)

在这里插入图片描述

【深度学习 | 核心概念】那些深度学习路上必经的核心概念,确定不来看看? (一)
作者: 计算机魔术师
版本: 1.0 ( 2023.8.27 )

摘要: 本系列旨在普及那些深度学习路上必经的核心概念,文章内容都是博主用心学习收集所写,欢迎大家三联支持!本系列会一直更新,核心概念系列会一直更新!欢迎大家订阅

该文章收录专栏
[✨— 《深入解析机器学习:从原理到应用的全面指南》 —✨]

@toc

ARIMA定阶解决方案
名称介绍优缺点
自相关函数(ACF)和偏自相关函数(PACF)通过观察ACF和PACF图像的截尾性和拖尾性来确定AR和MA的阶数。优点:简单直观,易于理解和实现。 缺点:对于复杂的时间序列,图像解释可能不明确;需要主观判断截尾和拖尾的位置。
信息准则(AIC、BIC)使用AIC(Akaike Information Criterion)或BIC(Bayesian Information Criterion)来选择最佳模型阶数。优点:基于统计学原理,可自动选择模型阶数。 缺点:对于大规模数据集,计算开销较大。
网格搜索遍历多个ARIMA模型的参数组合,通过交叉验证或验证集性能来选择最佳模型。优点:能够找到最佳参数组合。 缺点:计算开销较大,需要尝试多个参数组合;可能受限于搜索范围和计算资源。
自动ARIMA(auto.arima)自动选择ARIMA模型的阶数,基于AIC准则进行模型搜索和选择。优点:自动化流程,省去手动选择模型阶数的步骤。 缺点:对于复杂的时间序列,可能无法找到最佳模型。
ACF & PACF 定阶

使用**自相关函数(ACF)和偏自相关函数(PACF)**来确定AR和MA的阶数。ACF表示观察值与滞后版本之间的相关性,PACF表示观察值与滞后版本之间的直接相关性。

下面是ACF(自相关函数)和PACF(偏自相关函数)的绘图函数及其说明,以及对应的模板代码。

名称说明模板代码
plot_acf绘制自相关函数(ACF)图plot_acf(x, lags=None, alpha=0.05, use_vlines=True, title='Autocorrelation', zero=False, vlines_kwargs=None, ax=None)
plot_pacf绘制偏自相关函数(PACF)图plot_pacf(x, lags=None, alpha=0.05, method='ywunbiased', use_vlines=True, title='Partial Autocorrelation', zero=False, vlines_kwargs=None, ax=None)

函数参数说明:

  • x:要计算自相关或偏自相关的序列数据。
  • lags:要绘制的滞后阶数。默认为None,表示绘制所有滞后阶数。
  • alpha:置信区间的置信水平。默认为0.05,表示95%的置信水平。
  • use_vlines:是否在图中使用垂直线表示置信区间。默认为True
  • title:图的标题。默认为"Autocorrelation"(自相关)或"Partial Autocorrelation"(偏自相关)。
  • zero:是否在图中包含零滞后(lag)线。默认为False
  • vlines_kwargs:用于控制垂直线属性的可选参数。
  • ax:用于绘制图形的matplotlib轴对象。默认为None,表示创建一个新的轴对象。

示例代码:

对于经典的时间序列数据,您可以使用其他专门的库来获取,例如 pandas-datareaderyfinanceAlpha Vantage 等。

import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
import pandas as pd
from statsmodels.datasets import get_rdataset
from statsmodels.tsa.arima.model import ARIMA# 获取AirPassengers数据集
#data = get_rdataset('AirPassengers').data # Not do stationate# 示例数据
data = [0, 1, 2, 3, 4, 5,6,7,8,9,10,11,12,13]# 定义绘制自相关图&偏相关函数
def draw_acf_pcf(ts):sample_size = len(ts)max_lags = sample_size // 2 - 1  # 设置最大滞后期数为样本大小的50%plt.figure(facecolor='white', figsize=(10, 8))plot_acf(ts)plot_pacf(ts,lags = max_lags)plt.title('自相关图')plt.show()

当计算部分相关系数时,通常需要注意设置滞后期数(nlags)的值,以确保其不超过样本大小的50%。这是因为计算部分相关系数需要估计协方差矩阵的逆矩阵,而当滞后期数过大时,逆矩阵的计算可能会变得不稳定。这里默认为50% - 1

在这里插入图片描述
在这里插入图片描述

  1. 观察ACF图和PACF图的截尾性:首先,观察ACF图和PACF图的截尾性。在ACF图中,如果自相关系数在滞后阶数后逐渐衰减并趋于零,这表明可以考虑使用自回归(AR)模型(拖尾)。在PACF图中,如果偏相关系数在滞后阶数后截尾并趋于零,这表明可以考虑使用滑动平均(MA)模型。(截尾
  2. 观察ACF图和PACF图的截尾性:首先,观察ACF图和PACF图的截尾性。在ACF图中,如果自相关系数在滞后阶数后逐渐衰减并趋于零,这表明可以考虑使用自回归(AR)模型。在PACF图中,如果偏相关系数在滞后阶数后截尾并趋于零,这表明可以考虑使用滑动平均(MA)模型。
  3. 确定AR模型阶数:根据ACF图的截尾性,确定AR模型的阶数。阶数可以根据ACF图中第一个超过置信区间的滞后阶数来确定。
  4. 确定MA模型阶数:根据PACF图的截尾性,确定MA模型的阶数。阶数可以根据PACF图中第一个超过置信区间的滞后阶数来确定。
  5. 确定ARMA模型阶数:如果ACF图和PACF图都有截尾性,可以考虑使用ARMA模型。阶数可以根据ACF图和PACF图的信息共同确定。
  6. 确定AR模型阶数:根据ACF图的截尾性,确定AR模型的阶数。阶数可以根据ACF图中第一个超过置信区间的滞后阶数来确定。
  7. 确定MA模型阶数:根据PACF图的截尾性,确定MA模型的阶数。阶数可以根据PACF图中第一个超过置信区间的滞后阶数来确定。
  8. 确定ARMA模型阶数:如果ACF图和PACF图都有截尾性,可以考虑使用ARMA模型。阶数可以根据ACF图和PACF图的信息共同确定。

可以看到自相关图出现拖尾,而偏向关图在2阶截尾,所以选用ARIMA(2, K , 1)

信息准则(AIC、BIC)定阶

信息准则(Information Criteria)是一种用于模型选择和定阶(model selection and model order determination)的统计方法。其中两个常用的信息准则是AIC(Akaike Information Criterion)和BIC(Bayesian Information Criterion)。它们的目标是在考虑模型拟合优度的同时,惩罚模型复杂度,避免过度拟合。

AIC和BIC的原理都基于信息理论。信息理论是研究信息传输、压缩和表示的数学理论,其中一个重要概念是信息熵(Information Entropy)。信息熵度量了一个随机变量的不确定性或信息量。

AIC的计算公式为:AIC = 2k - 2ln(L),其中k是模型参数的数量,L是似然函数的最大值。AIC的原理是通过最大化似然函数来拟合数据,然后用模型参数的数量k对拟合优度进行惩罚。AIC的数值越小,表示模型的拟合优度越好。

BIC的计算公式为:BIC = k * ln(n) - 2ln(L),其中k是模型参数的数量,n是样本量,L是似然函数的最大值。BIC的原理是在AIC的基础上引入了对样本量n的惩罚。BIC的数值越小,表示模型的拟合优度越好。

下面通过一个简单的案例来说明AIC和BIC的应用:

假设有一个简单的线性回归模型,要根据数据集选择模型的阶数(即变量的数量)。

假设我们有以下数据集:

X = [1, 2, 3, 4, 5]
Y = [2, 4, 6, 8, 10]

我们可以考虑的模型阶数有1、2、3、4。对于每个阶数,我们拟合相应的线性回归模型,并计算AIC和BIC的值。

阶数为1时,模型为 Y = β0 + β1X
阶数为2时,模型为 Y = β0 + β1
X + β2X^2
阶数为3时,模型为 Y = β0 + β1
X + β2X^2 + β3X^3
阶数为4时,模型为 Y = β0 + β1X + β2X^2 + β3X^3 + β4X^4

对于每个模型,我们可以计算出似然函数的最大值(最小二乘法),然后带入AIC和BIC的计算公式得到相应的值。假设计算结果如下:

阶数1的AIC = 10.2,BIC = 12.4
阶数2的AIC = 8.5,BIC = 12.0
阶数3的AIC = 7.8,BIC = 12.8
阶数4的AIC = 9.1,BIC = 15.6

根据AIC和BIC的值,我们可以选择AIC和BIC值最小的模型作为最优模型。在这个案例中,阶数为3的模型具有最小的AIC和BIC值,因此我们选择阶数为3的模型作为最优模型。

这个案例说明了AIC和BIC在模型选择和定阶中的应用过程。它们通过考虑模型的拟合优度和复杂度,帮助我们选择最优的模型,避免过度拟合。

以下是使用库的的实现,

# 通过BIC矩阵进行模型定阶
data_w = data_w.astype(float) 
pmax = 3 # 可以根据图选定
qmax = 3
bic_matrix = []  # 初始化BIC矩阵
for p in range(pmax+1):tmp = []for q in range(qmax+1):try:tmp.append(ARIMA(data_w, (p, 2, q)).fit().bic)   except:tmp.append(None)bic_matrix.append(tmp)
bic_matrix = pd.DataFrame(bic_matrix)
# 找出最小值位置
p, q = bic_matrix.stack().idxmin()
print('当BIC最小时,p值和q值分别为: ', p, q)

以下是具体代码实现,查看细节可以更好了解原理

import numpy as np
from sklearn.linear_model import LinearRegression
from scipy.stats import normdef calculate_aic(n, k, rss):aic = 2 * k - 2 * np.log(rss)return aicdef calculate_bic(n, k, rss):bic = k * np.log(n) - 2 * np.log(rss)return bic# 生成示例数据
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
Y = np.array([2, 4, 6, 8, 10])# 计算模型的AIC和BIC值
n = len(X)  # 样本量
aic_values = []
bic_values = []for k in range(1, 5):  # 尝试不同的阶数model = LinearRegression()model.fit(X[:, :k], Y)y_pred = model.predict(X[:, :k])rss = np.sum((Y - y_pred) ** 2)  # 残差平方和aic = calculate_aic(n, k, rss)bic = calculate_bic(n, k, rss)aic_values.append(aic)bic_values.append(bic)# 选择最优模型的阶数
best_aic_index = np.argmin(aic_values)
best_bic_index = np.argmin(bic_values)best_aic_order = best_aic_index + 1
best_bic_order = best_bic_index + 1print("AIC values:", aic_values)
print("BIC values:", bic_values)
print("Best AIC order:", best_aic_order)
print("Best BIC order:", best_bic_order)

其实就是在机器学习的根据参数和残差作为损失值,选择损失值最小的

在这里插入图片描述

						  🤞到这里,如果还有什么疑问🤞🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳

相关文章:

【机器学习 | ARIMA】经典时间序列模型ARIMA定阶最佳实践,确定不来看看?

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…...

Python web自动化测试 —— 文件上传

​文件上传三种方式: (一)查看元素标签,如果是input,则可以参照文本框输入的形式进行文件上传 方法:和用户输入是一样的,使用send_keys 步骤:1、找到定位元素,2&#…...

wpf使用CefSharp.OffScreen模拟网页登录,并获取身份cookie,C#后台执行js

目录 框架信息&#xff1a;MainWindow.xamlMainWindow.xaml.cs爬取逻辑模拟登录拦截请求Cookie获取 CookieVisitorHandle 框架信息&#xff1a; CefSharp.OffScreen.NETCore 119.1.20 MainWindow.xaml <Window x:Class"Wpf_CHZC_Img_Identy_ApiDataGet.MainWindow&qu…...

【代码随想录刷题】Day18 二叉树05

文章目录 1.【513】找树左下角的值1.1题目描述1.2 解题思路1.2.1 迭代法思路1.2.2 递归法思路 1.3 java代码实现1.3.1 迭代法java代码实现1.3.2 递归法java代码实现 2. 【112】路径总和2.1题目描述2.2 解题思路2.3 java代码实现 3.【106】从中序与后序遍历序列构造二叉树3.1题目…...

2023.11.25更新关于mac开发APP(flutter)的笔记与整理(实机开发一)

我自己写的笔记很杂&#xff0c;下面的笔记是我在chatgpt4的帮助下完成的&#xff0c;希望可以帮到正在踩坑mac开发APP&#xff08;flutter&#xff09;的小伙伴 目标&#xff1a;通过MAC电脑使用flutter框架开发一款适用于苹果手机的一个APP应用 本博客的阅读顺序是&#xf…...

万宾科技可燃气体监测仪的功能有哪些?

随着城市人口的持续增长和智慧城市不断发展&#xff0c;燃气作为一种重要的能源供应方式&#xff0c;已经广泛地应用于居民生活和工业生产的各个领域。然而燃气泄漏和安全事故的风险也随之增加&#xff0c;对城市的安全和社会的稳定构成了潜在的威胁。我国燃气管道安全事故的频…...

Binlog vs. Redo Log:数据库日志的较劲【高级】

&#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 Binlog vs. Redo Log&#xff1a;数据库日志的较劲【高级】 前言第一&#xff1a;事务的生命周期事务的生命周期Binlog和Redo Log记录事务的一致性和持久性Binlog的记录过程R…...

移动机器人路径规划(二)--- 图搜索基础,Dijkstra,A*,JPS

目录 1 图搜索基础 1.1 机器人规划的配置空间 Configuration Space 1.2 图搜索算法的基本概念 1.3 启发式的搜索算法 Heuristic search 2 A* Dijkstra算法 2.1 Dijkstra算法 2.2 A*&&Weighted A*算法 2.3 A* 算法的工程实践中的应用 3 JPS 1 图搜索基础 1.1…...

消息中间件——RabbitMQ(四)命令行与管控台的基本操作!

前言 在前面的文章中我们介绍过RabbitMQ的搭建&#xff1a;RabbitMQ的安装过以及各大主流消息中间件的对比&#xff1a;&#xff0c;本章就主要来介绍下我们之前安装的管控台是如何使用以及如何通过命令行进行操作。 1. 命令行操作 1.1 基础服务的命令操作 rabbitmqctl sto…...

性能压测工具:wrk

一般我们压测的时候&#xff0c;需要了解衡量系统性能的一些参数指标&#xff0c;比如。 1、性能指标简介 1.1 延迟 简单易懂。green:一般指响应时间 95线&#xff1a;P95。平均100%的请求中95%已经响应的时间 99线&#xff1a;P99。平均100%的请求中99%已经响应的时间 平…...

[Matlab有限元分析] 2.杆单元有限元分析

1. 一维杆单元有限元分析程序 一维刚单元的局部坐标系&#xff08;单元坐标系&#xff09;与全局坐标系相同。 1.1 线性杆单元 如图所示是一个杆单元&#xff0c;由两个节点i和j&#xff0c;局部坐标系的X轴沿着杆的方向&#xff0c;由i节点指向j节点&#xff0c;每个节点有…...

透过对话聊天聊网络tcp三次握手四次挥手

序 说起来网络&#xff0c;就让我想起的就是一张图。我在网上可以为所欲为&#xff0c;反正你又不能顺着网线来打我。接下来我们来详细说一下网络到底是怎么连接的。 TCP三次打招呼 首先我会用男女生之间的聊天方式&#xff0c;来举一个例子。 从tcp三次握手来说&#xff0c;…...

项目管理套路:看这一篇绝对够用❤️

写论文必不可少的&#xff0c;就是创建代码并进行实验。好的项目管理可以让实验进行得更加顺利。本篇博客以一次项目实践为例&#xff0c;介绍项目管理的方法&#xff0c;以及可能遇到的问题&#xff0c;并提供一些可行的解决方案。 目录 项目管理工具开始第一步版本管理十分关…...

华为-算法---测试开发工程师----摘要牛客网

Java面试题---摘要牛客网-CSDN博客package extendNiuKeWang;import java.util.Scanner;public class GoodHuaWei {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int money = sc.nextInt();System.out.println("n值总金额:"+money)…...

python环境搭建-yolo代码跑通-呕心沥血制作(告别报错no module named torch)

安装软件 安装过的可以查看有没有添加环境变量 好的! 我们发车! 如果你想方便快捷的跑通大型项目,那么必须安装以下两个软件: 1.pycharm2.anaconda对应作用: pycharm:专门用来跑通python项目的软件,相当于一个编辑器,可以debug调试,可以接受远程链接调试!anaconda:专…...

Cisco Packet Tracer配置命令——路由器篇

路由基础 路由器用于互联两个或多个网络&#xff0c;具有两项功能&#xff1a;为要转发的数据包选择最佳路径以及将数据包交换到正确的端口&#xff0c;概括为路由选择和分组转发。 路由选择 路由选择就是路由器根据目的IP地址的网络地址部分&#xff0c;通过路由选择算法确…...

setContentsMargins(QMargins()) 是 QWidget 类的成员函数,用于设置小部件的内容边距(Contents Margins)

setContentsMargins(QMargins()) 是 QWidget 类的成员函数&#xff0c;用于设置小部件的内容边距&#xff08;Contents Margins&#xff09;。 在 Qt 中&#xff0c;内容边距指的是小部件内部内容与小部件边界之间的空白区域。通过设置内容边距&#xff0c;可以控制和调整小部…...

Redis key 过期监听实现

1.技术背景&#xff0c;想知道 redis 设置了TTL时间的key 过期&#xff0c;且有后续的业务处理的场景可以使用。 bug点&#xff1a; 使用redis 缓存失效监听会有一定的延迟&#xff0c; 过期事件是在redis服务器删除键的时候生成的&#xff0c;而不是在理论上生存时间到达0值得…...

Gee教程2.上下文Context

先来看看Gin框架的简单例子 func main() {engine : gin.Default()engine.GET("/", func(c *gin.Context) {c.String(http.StatusOK, "hello World!")})//监听并启动服务&#xff0c;默认 http://localhost:8080/engine.Run() }//我们自己写的 func main()…...

【从浅识到熟知Linux】基本指定之cat、more和less

&#x1f388;归属专栏&#xff1a;从浅学到熟知Linux &#x1f697;个人主页&#xff1a;Jammingpro &#x1f41f;每日一句&#xff1a;写完这篇我要去吃晚饭啦&#xff01;&#xff01; 文章前言&#xff1a;本文介绍cat、more和less指令三种查看文件的用法并给出示例和截图…...

超级千问语音设计世界:电商产品语音详情页批量生成教程

超级千问语音设计世界&#xff1a;电商产品语音详情页批量生成教程 1. 为什么选择语音详情页&#xff1f; 在电商领域&#xff0c;商品详情页是转化用户的关键环节。传统图文详情页虽然内容丰富&#xff0c;但在用户注意力碎片化的今天&#xff0c;很难让消费者完整阅读所有信…...

lora-scripts详细使用手册:图文并茂,带你完成LoRA训练全流程

LoRA-Scripts详细使用手册&#xff1a;图文并茂&#xff0c;带你完成LoRA训练全流程 1. 工具概述与核心价值 LoRA-Scripts是一款开箱即用的LoRA训练自动化工具&#xff0c;它将复杂的模型微调流程封装为简单易用的命令行操作。无论你是想为Stable Diffusion定制专属艺术风格&…...

Wan2.2-I2V-A14B效果惊艳展示:夕阳沙滩10秒高清视频生成实录

Wan2.2-I2V-A14B效果惊艳展示&#xff1a;夕阳沙滩10秒高清视频生成实录 1. 开篇&#xff1a;当文字变成流动的画面 想象一下&#xff0c;你只需要输入一段简单的文字描述&#xff0c;就能在几分钟内获得一段专业级的高清视频。这不是科幻电影里的场景&#xff0c;而是Wan2.2…...

低轨星座融合:撬动万亿低空经济的天地密钥

低轨星座融合&#xff1a;撬动万亿低空经济的天地密钥 引言 当无人机飞越无信号的深山&#xff0c;当空中出租车需要厘米级导航时&#xff0c;地面网络已力不从心。低轨星座与低空经济的融合&#xff0c;正构建一张“空天地海”一体化的智能网络&#xff0c;成为解锁万亿级市…...

【限时公开】SITS2026实验室未发布数据:92.7%的商用大模型API在无防护下3.8秒内被FGSM变体攻破?

第一章&#xff1a;SITS2026专家&#xff1a;大模型对抗攻击防护 2026奇点智能技术大会(https://ml-summit.org) 在大模型规模化部署的背景下&#xff0c;对抗样本攻击正从学术威胁演变为真实业务风险——微小扰动即可导致LLM输出恶意指令、泄露训练数据或绕过安全护栏。SITS…...

嵌入式无锁任务队列:裸机与RTOS下的零内存分配串行化方案

1. 项目概述TaskQueue 是一个轻量级、无依赖的嵌入式任务序列化库&#xff0c;专为资源受限的裸机&#xff08;Bare-Metal&#xff09;或实时操作系统&#xff08;RTOS&#xff09;环境设计。其核心工程目标明确且务实&#xff1a;在不引入复杂同步原语&#xff08;如互斥锁、信…...

MetaboAnalystR 4.0:代谢组学数据分析的终极R包指南

MetaboAnalystR 4.0&#xff1a;代谢组学数据分析的终极R包指南 【免费下载链接】MetaboAnalystR R package for MetaboAnalyst 项目地址: https://gitcode.com/gh_mirrors/me/MetaboAnalystR MetaboAnalystR 4.0是一个功能强大的R语言代谢组学分析工具包&#xff0c;为…...

C# 面试高频题:装箱和拆箱是如何影响性能的?痛

OCP原则 ocp指开闭原则&#xff0c;对扩展开放&#xff0c;对修改关闭。是七大原则中最基本的一个原则。 依赖倒置原则&#xff08;DIP&#xff09; 什么是依赖倒置原则 核心是面向接口编程、面向抽象编程&#xff0c; 不是面向具体编程。 依赖倒置原则的目的 降低耦合度&#…...

AXI总线协议---关键信号时序解析与实战应用

1. AXI总线协议基础与核心信号解析 AXI&#xff08;Advanced eXtensible Interface&#xff09;总线协议是ARM公司推出的高性能片上总线标准&#xff0c;广泛应用于现代SoC设计和FPGA开发中。我第一次接触AXI是在一个图像处理项目里&#xff0c;当时为了调试DMA传输问题&#x…...

3步轻松优化Windows系统:Winhance中文版让你的电脑飞起来!

3步轻松优化Windows系统&#xff1a;Winhance中文版让你的电脑飞起来&#xff01; 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors…...