【机器学习 | 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)

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

在这里插入图片描述

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

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

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

相关文章

SpringBoot:ch02 配置文件(日志)

前言 简单介绍 Spring Boot 中常见的配置文件类型&#xff0c;如 application.properties 和 application.yml 等&#xff0c;并说明它们各自的特点和用途。 一、前期准备 1、新建项目&#xff0c;结构如下 2、添加依赖 <?xml version"1.0" encoding"UTF…

单片机语音芯片开发要解决的问题

在单片机语音芯片开发过程中&#xff0c;可能会遇到多种问题&#xff0c;这些问题可能来自于技术层面&#xff0c;也可能来自于芯片本身的设计和应用层面。下面让我们具体从芯片的功耗、语音识别的准度、芯片的尺寸和芯片的可靠性四个方面开展讨论。 1.芯片的功耗问题 首先&a…

【AIGC重塑教育】AI大爆发的时代,未来的年轻人怎样获得机会和竞争力?

目录 AI浪潮来袭 AI与教育 AI的优势 延伸阅读 推荐语 ​作者&#xff1a;刘文勇 来源&#xff1a;IT阅读排行榜 本文摘编自《AIGC重塑教育&#xff1a;AI大模型驱动的教育变革与实践》&#xff0c;机械工业出版社出版 AI浪潮来袭 这次&#xff0c;狼真的来了。 AI正迅猛地…

81基于matlab GUI的图像处理

基于matlab GUI的图像处理&#xff0c;功能包括图像颜色处理&#xff08;灰度图像、二值图像、反色变换、直方图、拉伸变换&#xff09;&#xff1b;像素操作&#xff08;读取像素、修改像素&#xff09;、平滑滤波&#xff08;均值平滑、高斯平滑、中值平滑&#xff09;、图像…

Java多线程之线程安全问题

文章目录 一. 线程安全概述1. 什么是线程安全问题2. 一个存在线程安全问题的程序 二. 线程不安全的原因和线程加锁1. 案例分析2. 线程加锁2.1 理解加锁2.2 synchronized的使用2.3 再次分析案例 3. 线程不安全的原因 三. 线程安全的标准类 一. 线程安全概述 1. 什么是线程安全问…

基于C#实现赫夫曼树

赫夫曼树又称最优二叉树&#xff0c;也就是带权路径最短的树&#xff0c;对于赫夫曼树&#xff0c;我想大家对它是非常的熟悉&#xff0c;也知道它的应用场景&#xff0c;但是有没有自己亲手写过&#xff0c;这个我就不清楚了&#xff0c;不管以前写没写&#xff0c;这一篇我们…

【LeetCode刷题笔记】DFSBFS(二)

994. 腐烂的橘子(树/图的BFS问题) 解题思路: 多源BFS ,首选找到 所有的腐烂的橘子 ,放入队列中,然后进行 BFS 广搜,广搜的 层数 - 1 就是所需要花费的分钟数。 在最开始先扫描一遍二维数组,将所有的 腐烂的橘子 加入 队列 ,同时统计新鲜橘子的数量 <

Blender烘焙AO操作及对应的python代码

&#xff08;一&#xff09;Blender软件操作 1. 导入模型&#xff08;这里省略&#xff09; 2. 材质设置 模型使用的所有材质都需要删除Surface Shader&#xff0c;没有其他多余的计算&#xff0c;可以大量缩短烘焙时间。删除之后的只留下一个材质输出节点&#xff0c;如图所…

CentOS Stream 9系统Cgroup问题处理

安装docker容器启动失败 之前适配过Ubuntu系统的容器&#xff0c;由于版本比较高&#xff0c;没有挂载Cgroup的路径。这次使用Centos Stream 9系统安装docker容器时也遇到了这个情况。由于处理方式有些不一样&#xff0c;所以记录一下。 这是docker容器启动过报错的输出日志。…

Haclon简介及数据类型

Haclon简介 HALCON是由德国MVtec公司开发的机器视觉算法包&#xff0c;它由一千多个各自独立的函数&#xff08;算子&#xff09;构成&#xff0c;其中除了包含各类滤波、色彩以及几何、数学转换、形态学计算分析、图像校正&#xff0c;目标分类辨识、形状搜寻等基本的图像处理…

C/C++文件操作————写文件与读文件以及通讯录的改进 (保姆级教学)

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 1.前言 2.写文件函数与读文件函数 …

多个JDK版本可以吗:JDK17、JDK19、JDK1.8轻松切换(无坑版)小白也可以看懂

多个版本JDK切换 多个JDK&#xff1a;JDK17、JDK19、JDK1.8轻松切换&#xff08;无坑版&#xff09;小白也可以看懂 提示&#xff1a;看了网上很多教程&#xff0c;5w观看、32w观看、几千观看的&#xff0c;多多少少带点坑&#xff0c;这里我就把踩过的坑都给抹了 文章目录 多…

「Verilog学习笔记」不重叠序列检测

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 题目要求检测a的序列&#xff0c;a为单bit输入&#xff0c;每个时刻可能具有不同的值&#xff0c; 当连续的六个输入值符合目标序列表示序列匹配&#xff0c;当六个输入值的…

Redisson分布式锁源码解析、集群环境存在的问题

一、使用Redisson步骤 Redisson各个锁基本所用Redisson各个锁基本所用Redisson各个锁基本所用 二、源码解析 lock锁 1&#xff09; 基本思想&#xff1a; lock有两种方法 一种是空参 另一种是带参 * 空参方法&#xff1a;会默认调用看门狗的过期时间30*1000&…

内网穿透的应用-如何在本地安装Flask,以及将其web界面发布到公网上并进行远程访问

轻量级web开发框架&#xff1a;Flask本地部署及实现公网访问界面 文章目录 轻量级web开发框架&#xff1a;Flask本地部署及实现公网访问界面前言1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 前言 本篇文章讲解如何…

『亚马逊云科技产品测评』活动征文|通过Lightsail搭建个人笔记

提示&#xff1a;授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 文章目录 前言实践知识储备Lightsail介绍Leanote介绍实践…

VSCode插件koroFileHeader的使用。

文章目录 前言一、koroFileHeader是什么&#xff1f;二、使用步骤1.安装1.配置2.食用 前言 今天的天气还不错&#xff0c;真是金风玉露一相逢&#xff0c;便胜却人间无数&#xff0c;写篇博客玩玩&#xff0c;主题&#xff1a;注释。注释的本质就是对代码的解释和说明&#xf…

STM32_6(TIM)

TIM定时器&#xff08;第一部分&#xff09; TIM&#xff08;Timer&#xff09;定时器定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元&#xff0c;在72MHz计数时钟下可以实现最大59.65s的定时不仅…

在游戏开发中,实时渲染和离线渲染对于游戏平衡的影响有哪些?

实时渲染和离线渲染对游戏平衡有那些影响呢&#xff1f;在游戏开发中&#xff0c;渲染方式的选择对游戏的整体表现和玩家体验有着至关重要的作用。那么&#xff0c;实时渲染和离线渲染究竟有哪些利弊呢&#xff1f; 一、实时渲染 实时渲染&#xff0c;顾名思义&#xff0c;是…