【機器學習 | 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.pswp.cn/news/165559.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165559.shtml
英文地址,請注明出處:http://en.pswp.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容器啟動過報錯的輸出日志。…

Windmill:最快的自托管開源工作流引擎

我們對 Windmill 進行了基準測試&#xff0c;認為它是 Airflow、Prefect 甚至 Temporal 中最快的自托管通用工作流引擎。對于 Airflow&#xff0c;有速度快了 10 倍&#xff01; 工作流引擎編排工作人員的有向無環圖 (DAG) 中定義的作業&#xff0c;同時尊重依賴性。 主要優點…

Haclon簡介及數據類型

Haclon簡介 HALCON是由德國MVtec公司開發的機器視覺算法包&#xff0c;它由一千多個各自獨立的函數&#xff08;算子&#xff09;構成&#xff0c;其中除了包含各類濾波、色彩以及幾何、數學轉換、形態學計算分析、圖像校正&#xff0c;目標分類辨識、形狀搜尋等基本的圖像處理…

通配符OV SSL證書都有哪些品牌?

隨著數字化時代的到來&#xff0c;網站和在線服務的安全性變得尤為重要。為了保護用戶的隱私和數據安全&#xff0c;SSL證書越來越受到重視。OV證書是一種高級別的SSL證書&#xff0c;可以提供更多的驗證和保護。而通配符SSL證書則可以保護多個子域名&#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;當六個輸入值的…

免費接口集合讓開發更簡單

企業基本信息(含聯系方式)&#xff1a;通過公司名稱/公司ID/注冊號或社會統一信用代碼獲取企業基本信息和企業聯系方式&#xff0c;包括公司名稱或ID、類型、成立日期、電話、郵箱、網址等字段的詳細信息。企業基本信息&#xff1a;通過公司名稱/公司ID/注冊號或社會統一信用代…

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界面 前言 本篇文章講解如何…

linux環境下samba服務器的配置

linux服務器怎么創建用戶 在Linux服務器上&#xff0c;可以使用以下步驟創建用戶&#xff1a; 使用adduser命令創建新用戶&#xff1a; sudo adduser username將 username 替換為你要創建的用戶名。這個命令會提示你輸入新用戶的密碼以及其他相關信息。 如果需要為新用戶設…