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

news2024/11/15 18:06:48

在这里插入图片描述

🤵‍♂️ 个人主页: @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 norm

def calculate_aic(n, k, rss):
    aic = 2 * k - 2 * np.log(rss)
    return aic

def 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 + 1

print("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.coloradmin.cn/o/1243939.html

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

相关文章

宣传技能培训1——《新闻摄影技巧》

新闻摄影技巧 写在最前面摘要 构图与拍摄角度景别人物表情与叙事远景与特写 构图与拍摄角度案例 主体、陪体、前景、背景强调主体利用前景和背景层次感的创造 探索新闻摄影中的构图技巧基本构图技巧构图技巧的应用实例实例分析1. 黄金分割和九宫格2. 三角型构图3. 引导线构图4.…

JSP过滤器和监听器

什么是过滤器 Servlet过滤器与Servlet十分相似,但它具有拦截客户端(浏览器)请求的功能,Servlet过滤器可以改变请求中的内容,来满足实际开发中的需要。 对于程序开发人员而言,过滤器实质就是在Web应用服务器…

Matrix

Matrix 如下是四种变换对应的控制参数: Rect 常用的一个“绘画相关的工具类”,常用来描述长方形/正方形,他只有4个属性: public int left; public int top; public int right; public int bottom; 这4个属性描述着这一个“方块…

IAR为恩智浦S32M2提供全面支持,提升电机控制能力

IAR Embedded Workbench for Arm已全面支持恩智浦最新的S32系列,可加速软件定义汽车的车身和舒适性应用的开发 瑞典乌普萨拉,2023年11月22日 – 嵌入式开发软件和服务的全球领导者IAR现已全面支持恩智浦半导体(NXP Semiconductors&#xff0…

数字化时代,数据资产交易困境的治理

数据作为五大生产要素之一,正与行业应用深度结合,成为推动产业、企业数字化转型升级的重要驱动力量。数据作为基础的战略性资源和新的生产要素,如果不能充分流通和交易,就丧失了价值和作用。因此,数据资产的交易关系着…

8.HTML中表单标签

8. 表单标签 8.1 为什么需要表单 使用表单的目的是为了收集用户信息, 在我们网页中,我们也需要跟用户进行交互,收集用户资料,此时就需要表单 8.2 表单的组成 在HTML中,一个完整的表单通常由表单域,表单控件…

微信小程序 - 云开发

1、小程序云开发 1.1、云开发简介 小程序云开发是微信团队联合腾讯云推出的专业的小程序开发服务。开发者可以使用云开发快速开发小程序、小游戏、公众号网页等,并且原生打通微信开放能力。开发者无需搭建服务器,可免鉴权直接使用平台提供的API进行业务…

港口大型设备状态监测及预测性维护策略

在现代港口运营中,大型设备的正常运行对于保障港口作业的高效性至关重要。为了实现设备的可靠性和持续性,港口管理者需要采取一系列状态监测和预测性维护策略。 推进自动化和智能化是提高港口大型设备状态监测和维护管理效率的重要途径。通过应用先进的…

JavaWeb——感谢尚硅谷官方文档

JavaWeb——感谢尚硅谷官方文档 XML一、xml简介二、xml的语法1、文档申明2、xml注释3、xml元素4、xml属性5、xml语法规则 三、xml解析技术1、使用dom4j解析xml Tomcat一、JavaWeb的概念二、web资源的分类三、常见的web服务器四、Tomcat的使用1、安装2、Tomcat的目录介绍3 启动T…

【Python】np.unique() 介绍与使用

简述 numpy.unique:用于去除数组中重复元素,并从小到大排序(找到唯一元素并排序)。 def unique(ar, return_indexFalse, return_inverseFalse,return_countsFalse, axisNone):ar: 这是输入的数组或类数组对象。return_index: 如…

6.1.webrc媒体协商

那今天呢?我们来看一下y8 rtc的媒体协商,那实际上在我们之前的课程中呢?我已经向你介绍过y8 rtc的媒体协商了。只不过呢,角度是不一样的,在之前介绍外边tc媒体协商的时候呢,我们是从应用的角度来看。那web …

【Vue】插值表达式

作用&#xff1a;利用表达式进行插值渲染 语法&#xff1a;{ { 表达式 } } 目录 案例一&#xff1a; 案例二&#xff1a; 案例三&#xff1a; ​编辑 注意&#xff1a; 案例一&#xff1a; <!DOCTYPE html> <html lang"en"> <head><me…

基于SSM的校园奶茶点单管理系统

基于SSM的校园奶茶点单管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringMyBatisSpringMVC工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 奶茶列表 登录界面 管理员界面 用户界面 摘要 随着社会的发展和科技的进…

YOLOv8训练自己的目标检测数据集

YOLOv8训练自己的目标检测数据集 目录标题 源码下载环境配置安装包训练自己的数据集数据集文件格式数据集文件配置超参数文件配置训练数据集命令行训练脚本.py文件训练 进行detect显示detect的效果 源码下载 YOLOv8官方的GitHub代码&#xff0c;同时上面也有基础环境的配置要…

springboot+jsp学生健康体检档案评估系统_ju8pu

本基于Java的学生健康档案管理信息系统采用Java语言来进行开发&#xff0c;从角色上分为管理员&#xff0c;辅导员&#xff0c;档案管理员和学生几个具体功能如下 &#xff08;1&#xff09;管理员部分功能主要包括&#xff0c;个人中心&#xff0c;档案员管理&#xff0c;辅…

【iOS】数据持久化(二)之归档和解档(iOS 13以后)

在之前介绍的数据存储方法中&#xff0c;不管是NSUserDefaults还是plist文件都不能对自定义对象进行存储&#xff0c;OC提供的解归档恰好解决了这个问题 本片文章对 iOS13 以后的版本 归档和解档 进行介绍。老版本的解归档见这篇文章&#xff1a;【iOS】文件&#xff08;对象数…

使用【画图】软件修改图片像素、比例和大小

打开电脑画图软件&#xff0c;点击开始 windows附件 画图 在画图软件里选择需要调整的照片&#xff0c;点击文件 打开 在弹出窗口中选择照片后点击打开 照片在画图软件中打开后&#xff0c;对照片进行调整。按图中顺序进行 确定后照片会根据设定的值自动调整 保存…

关于接口测试自动化的总结与思考!

序 近期看到阿里云性能测试 PTS 接口测试开启免费公测&#xff0c;本着以和大家交流如何实现高效的接口测试为出发点&#xff0c;本文包含了我在接口测试领域的一些方法和心得&#xff0c;希望大家一起讨论和分享&#xff0c;内容包括但不仅限于&#xff1a; 服务端接口测试介…

51单片机IO口的四种工作状态切换

51单片机IO口的四种工作状态切换 1.概述 这篇文章介绍单片机IO引脚的四种工作模式&#xff0c;每个模式都有各自的用武之地&#xff0c;后面在驱动外设硬件时会用它不同的模式。 2.IO口四种工作模式介绍 PnM1PnM0I/O口工作模式00准双向口&#xff1a;灌电流达20mA&#xff…

刷题学习记录(含2023ISCTFweb题的部分知识点)

[SWPUCTF 2021 新生赛]sql 进入环境 查看源码&#xff0c;发现是get传参且参数为wllm fuzz测试&#xff0c;发现空格&#xff0c;&#xff0c;and被过滤了 同样的也可以用python脚本进行fuzz测试 import requests fuzz{length ,,handler,like,select,sleep,database,delete,h…