【機器學習 | 白噪聲檢驗】檢驗模型學習成果 檢驗平穩性最佳實踐,確定不來看看?

在這里插入圖片描述

🤵?♂? 個人主頁: @AI_magician
📡主頁地址: 作者簡介:CSDN內容合伙人,全棧領域優質創作者。
👨?💻景愿:旨在于能和更多的熱愛計算機的伙伴一起成長!!🐱?🏍
🙋?♂?聲明:本人目前大學就讀于大二,研究興趣方向人工智能&硬件(雖然硬件還沒開始玩,但一直很感興趣!希望大佬帶帶)

在這里插入圖片描述

【深度學習 | 核心概念】那些深度學習路上必經的核心概念,確定不來看看? (一)
作者: 計算機魔術師
版本: 1.0 ( 2023.8.27 )

摘要: 本系列旨在普及那些深度學習路上必經的核心概念,文章內容都是博主用心學習收集所寫,歡迎大家三聯支持!本系列會一直更新,核心概念系列會一直更新!歡迎大家訂閱

該文章收錄專欄
[?— 《深入解析機器學習:從原理到應用的全面指南》 —?]

白噪聲檢驗

白噪聲序列是一種在統計學和信號處理中常見的隨機過程。它具有一些特定的特性,使其在各個頻率上具有均勻的能量分布。由一系列相互獨立、具有相同概率分布的隨機變量組成的。這些隨機變量之間沒有任何相關性,因此在時間上是完全不相關的。這意味著序列中的每個值都是獨立地從相同的概率分布中生成的。

其名稱來源于光學中的類比。在光學中,白光是由各種頻率的光波混合而成的,這些光波具有均勻的能量分布。類似地,白噪聲序列在頻率域上具有均勻的能量分布,從低頻到高頻都有相似的能量。

白噪聲序列在許多領域中都有應用,包括信號處理、通信系統、金融市場建模等。它常被用作基準參考,用于比較其他信號或系統的性能。此外,白噪聲序列還用于測試和校準設備,以及進行隨機性分析和模擬實驗。

在時間序列中,白噪聲檢驗除了用于在預測前判斷平穩序列是否隨機外,還能有哪些用法呢?

-- 檢驗殘差是否為白噪聲,判斷模型擬合的是否足夠好,是否還存在有價值的信息待提取。

\1. 殘差為白噪聲,說明模型擬合的很好,殘差部分為無法捕捉的純隨機數據。
\2. 殘差非白噪聲,說明模型哪里出了問題,比如參數沒調好,需要繼續優化;若如何優化模型也無法使得殘差為白噪聲,換模型或者集成模型,或者對殘差進行二次預測。

白噪聲的定義很簡單,只要滿足以下3個條件即可:
\1) E(εt)=μ
\2) Var(εt)=σ2
\3) Cov(εt,εs)=0,t≠s
另外一種常見的定義方式為一個具有零均值同方差的獨立同分布的序列為白噪聲。

白噪聲檢驗方法常用有以下3種方法(自相關圖Box-Pierce檢驗Ljung-Box檢驗),其中Ljung-Box檢驗相對用的多一些,在調用statsmodels庫的acf函數計算自相關系數時,指定qstat=True,會同時返回對應滯后期數下的Ljung-Box檢驗結果。

自相關圖

由定義知,白噪聲完全無自相關性,除0階自相關系數為1外,理想情況下?k,(k>0) ,延遲k階的樣本自相關系數均為0。實際上由于樣本序列的有限性,延遲k階自相關系數并不完全為0,只要在0值附近即認為無自相關性。

由于隨機擾動的存在,自相關系數并不嚴格等于0,我們期望在95%的置信度下,即相關系數均在 ±2/T 之間。如果一個序列中有較多自相關系數的值在邊界之外,那么該序列很可能不是白噪聲序列。上圖中自相關系數均在邊界之內,為白噪聲序列。

Ljung-Box檢驗

實際應用中人們發現 Q 統計量在大樣本場合( n 很大的場合)檢驗效果很好(傳統檢驗方法中樣本量大于30即認為大樣本量,Joel等人指出當樣本量在500這個量級時 Q 統計量檢驗效果較好),但是在小樣本場合不太精確。為了彌補這一缺陷,Box和Ljung于1979年對其進行了改進,推導出LB(Ljung-Box)統計量。

假設條件:

  • H0:ρ1=ρ2=…=ρm=0 (滯后m階序列值之間相互獨立,序列為獨立同分布的白噪聲)
  • H1:?ρk≠0$,1<=k<=m (滯后 m 階序列值之間有相關性,序列為非獨立同分布的白噪聲)
    其中, ρk 為延遲k階的自相關系數, m 為最大延遲階數。

檢驗統計量: Q L B = n ( n + 2 ) ∑ k = 1 m ρ k 2 / n ? k Q_{LB}=n(n+2)∑_{k=1}^mρ^{2}_k/n?k QLB?=n(n+2)k=1m?ρk2?/n?k

LB統計量同樣近似服從自由度為 m 的 χ2 分布。其中, n 為序列觀察期數, m 為指定的最大延遲階數, ρ^__k 為延遲 k 階自相關系數的估計值。

由于LB統計量就是Box和Pierce的Q統計量的修正,所以人們習慣把它們統稱為Q統計量。

判斷準則:

LB統計量小于選定置信水平下的臨界值,或者 p 值大于顯著性水平(如0.05),不能拒絕原假設,序列為白噪聲;

LB統計量大于選定置信水平下的臨界值,或者 p 值小于顯著性水平(如0.05),拒絕原假設,序列非白噪聲;

實踐環節:

序列檢驗
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.stats.diagnostic import acorr_ljungboxnp.random.seed(123)
# 白噪音
white_noise=np.random.standard_normal(size=100)# 不再指定boxpierce參數,近返回QLB統計量檢驗結果
# 同時設置lags參數為一個列表,相應只返回對應延遲階數的檢驗結果
res = acorr_ljungbox(white_noise, lags=[6,12,24,48], return_df=True)
print(res)

在這里插入圖片描述

延遲6階、12階時 p值較大,增加到延遲24階時,p值略小但也大于0.05,所以在95%的置信水平下認為序列為白噪聲。(這部分則是隨機序列的偶然因素了)

還有一種實現Ljung-Box檢驗的方式為,調用statsmodels包中的acf函數,計算自相關系數時指定qstat為True,表示返回結果中除返回自相關系數外,另返回自相關系數的獨立性檢驗結果 QLB 統計量及對應 p 值。

import numpy as np
import pandas as pd
import statsmodels as smnp.random.seed(123)
white_noise=np.random.standard_normal(size=100)r, q, p = sm.tsa.stattools.acf(white_noise, nlags=12, qstat=True) # 額外返回q p 統計量
df = pd.DataFrame(zip(range(1,41), q, p), columns=['lag', 'lb_stat', 'lb_pvalue'])
print(df)

在這里插入圖片描述

舉一個為非白噪聲的例子(太陽黑子)

import matplotlib.pyplot as plt
import statsmodels.api as sm
data = sm.datasets.sunspots.load_pandas().data
data = data.set_index('YEAR')res = acorr_ljungbox(data.SUNACTIVITY, lags=[6,12,24], boxpierce=True, return_df=True)
print(res)data.plot(figsize=(12, 4))
plt.show()

在這里插入圖片描述

顯而易見的數據有著周期性。

模型效果檢驗

而在檢驗模型效果的應用中,假設我們有一個時間序列數據如下:

[1.2, 2.4, 3.1, 4.6, 5.3, 6.8, 7.5, 8.9, 9.7, 10.2]

我們可以使用ARIMA模型對該數據進行擬合,并得到殘差序列。然后,我們可以進行Ljung-Box白噪聲檢驗來判斷殘差序列是否存在自相關。

import numpy as np
from statsmodels.tsa.arima_model import ARIMA
from statsmodels.stats.diagnostic import acorr_ljungbox# 原始數據
data = np.array([1.2, 2.4, 3.1, 4.6, 5.3, 6.8, 7.5, 8.9, 9.7, 10.2])# 擬合ARIMA模型,得到殘差序列
model = ARIMA(data, order=(1, 0, 0))  # 這里以ARIMA(1, 0, 0)為例
model_fit = model.fit(disp=0)
residuals = model_fit.resid # 訓練數據中的殘差# 進行Ljung-Box白噪聲檢驗
lbvalue, pvalue = acorr_ljungbox(residuals, lags=5)  # 檢驗前5個滯后期# 打印檢驗結果
print("Ljung-Box白噪聲檢驗結果:")
for lag, p in enumerate(pvalue):print(f"滯后期{lag+1}:p-value={p}")

運行以上代碼,我們可以得到如下的檢驗結果:

Ljung-Box白噪聲檢驗結果:
滯后期1:p-value=0.8811740567913574
滯后期2:p-value=0.9395957812016121
滯后期3:p-value=0.9444992061584102
滯后期4:p-value=0.9826682340484362
滯后期5:p-value=0.9658631275329448

在這個案例中,我們可以看到每個滯后期的p-value都遠大于0.05,意味著殘差序列在這些滯后期上沒有顯著的自相關。因此,我們可以認為殘差序列是一個白噪聲序列,即沒有自相關(模型效果優秀)。

參考文章:

https://zhuanlan.zhihu.com/p/430365631

在這里插入圖片描述

						  🤞到這里,如果還有什么疑問🤞🎩歡迎私信博主問題哦,博主會盡自己能力為你解答疑惑的!🎩🥳如果對你有幫助,你的贊是對博主最大的支持!!🥳

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164536.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164536.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164536.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++ Day09 容器

C-STL01- 容器 引入 我們想存儲多個學員的信息 , 現在學員數量不定 通過以前學習的知識 , 我們可以創建一個數組存儲學員的信息 但是這個數組大小是多少呢 ? 過大會導致空間浪費 , 小了又需要擴容 對其中的數據進行操作也較為復雜 每次刪除數據后還要對其進行回收等操作…

cookie的跨站策略 跨站和跨域

借鑒&#xff1a;Cookie Samesite簡析 - 知乎 (zhihu.com) 1、跨站指 協議、域名、端口號都必須一致 2、跨站 頂級域名二級域名 相同就行。cookie遵循的是跨站策略

PowerDesigner異構數據庫轉換

主要流程:sql->pdm->cdm->other pdm->sql 1.根據sql生成pdm 2.根據pdm生成cdm 3.生成其他類型數據庫pdm

【Java】認識String類

文章目錄 一、String類的重要性二、String類中的常用方法1.字符串構造2.String對象的比較3.字符串查找4.轉換5.字符串替換6.字符串拆分7.字符串截取8.其他操作方法9.字符串的不可變性10.字符串修改 三、StringBuilder和StringBuffer 一、String類的重要性 在C語言中已經涉及到…

C語言第二十五彈--打印菱形

C語言打印菱形 思路&#xff1a;想要打印一個菱形&#xff0c;可以分為上下兩部分&#xff0c;通過觀察可以發現上半部分星號的規律是 1 3 5 7故理解為 2對應行數 1 &#xff0c;空格是4 3 2 1故理解為 行數-對應行數-1。 上半部分代碼如下 for (int i 0;i < line;i){//上…

Vivado Modelsim聯合進行UVM仿真指南

打開Vivado&#xff0c;打開對應工程&#xff0c;點擊左側Flow Navigator-->PROJECT MANAGER-->Settings&#xff0c;打開設置面板。點擊Project Settings-->Simulation選項卡&#xff0c;如下圖所示。 將Target simulator設為Modelsim Simulator。 在下方的Compil…

OpenGL 繪制圓形平面(Qt)

文章目錄 一、簡介二、代碼實現三、實現效果一、簡介 這里使用一種簡單的思路來生成一個圓形平面: 首先,我們需要生成一個單位圓,半徑為1,法向量為(0, 0, 1),這一步我們可以使用一些函數生成圓形點集。之后,指定面片的索引生成一個圓形平面。當然這里為了后續管理起來方便…

Py之PyMuPDF:PyMuPDF的簡介、安裝、使用方法之詳細攻略

Py之PyMuPDF&#xff1a;PyMuPDF的簡介、安裝、使用方法之詳細攻略 目錄 PyMuPDF的簡介 PyMuPDF的安裝 PyMuPDF的使用方法 1、基礎用法 PyMuPDF的簡介 PyMuPDF是一個高性能的Python庫&#xff0c;用于PDF(和其他)文檔的數據提取&#xff0c;分析&#xff0c;轉換和操作。 …

Matrix

Matrix 如下是四種變換對應的控制參數&#xff1a; Rect 常用的一個“繪畫相關的工具類”&#xff0c;常用來描述長方形/正方形&#xff0c;他只有4個屬性&#xff1a; public int left; public int top; public int right; public int bottom; 這4個屬性描述著這一個“方塊…

基于JavaWeb+SSM+Vue校園水電費管理小程序系統的設計和實現

基于JavaWebSSMVue校園水電費管理小程序系統的設計和實現 源碼獲取入口Lun文目錄前言主要技術系統設計功能截圖訂閱經典源碼專欄Java項目精品實戰案例《500套》 源碼獲取 源碼獲取入口 Lun文目錄 摘 要 III Abstract 1 1 系統概述 2 1.1 概述 2 1.2課題意義 3 1.3 主要內容 3…

使用【畫圖】軟件修改圖片像素、比例和大小

打開電腦畫圖軟件&#xff0c;點擊開始 windows附件 畫圖 在畫圖軟件里選擇需要調整的照片&#xff0c;點擊文件 打開 在彈出窗口中選擇照片后點擊打開 照片在畫圖軟件中打開后&#xff0c;對照片進行調整。按圖中順序進行 確定后照片會根據設定的值自動調整 保存…

Codeforces Round 745 (Div. 2)(C:前綴和+滑動窗口,E:位運算加分塊)

Dashboard - Codeforces Round 745 (Div. 2) - Codeforces A&#xff1a; 答案就是2n!/2, 對于當前滿足有k個合法下標的排列&#xff0c;就是一個n-k個不合法的下標的排列&#xff0c; 所以每一個合法排列都相反的存在一個 對稱性 #include<bits/stdc.h> using nam…

【Redisson】基于自定義注解的Redisson分布式鎖實現

前言 在項目中&#xff0c;經常需要使用Redisson分布式鎖來保證并發操作的安全性。在未引入基于注解的分布式鎖之前&#xff0c;我們需要手動編寫獲取鎖、判斷鎖、釋放鎖的邏輯&#xff0c;導致代碼重復且冗長。為了簡化這一過程&#xff0c;我們引入了基于注解的分布式鎖&…

JS獲取時間戳的五種方法

一、JavasCRIPT時間轉時間戳 JavaScript獲得時間戳的方法有五種&#xff0c;后四種都是通過實例化時間對象new Date() 來進一步獲取當前的時間戳&#xff0c;JavaScript處理時間主要使用時間對象Date。 方法一&#xff1a;Date.now() Date.now()可以獲得當前的時間戳&#x…

思維模型 等待效應

本系列文章 主要是 分享 思維模型 &#xff0c;涉及各個領域&#xff0c;重在提升認知。越是等待&#xff0c;越是焦慮。 1 等待效應的應用 1.1 等待效應在管理中的應用 西南航空公司是一家美國的航空公司&#xff0c;它在管理中運用了等待效應。西南航空公司鼓勵員工在工作中…

快速學會使用Python3.12的新特性

一、 PEP 695: 類型形參語法的革新 PEP 695 在 Python 3.12 中引入了一種新穎且更為清晰的方式來定義泛型類和函數&#xff0c;旨在提升類型參數的明確性和簡潔性。這個提案不僅改善了類型系統的可讀性&#xff0c;還增強了其功能性。以下是這些變化的詳細概述&#xff1a; 1…

(四)C語言之符號常量概述

&#xff08;四&#xff09;C語言之符號常量概述 一、符號常量概述 一、符號常量概述 在程序中使用像300,20等這樣的等類似的“幻數”不是一個好的習慣&#xff0c;它們無法向閱讀該程序的人提供更多有用的信息&#xff0c;從而使得修改程序變得困難。處理這種幻數的一種方法是…

unreal 指定windows SDK

路徑 &#xff1a; “C:\Users\Administrator\AppData\Roaming\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml” 在Configuration中添加 <WindowsPlatform><WindowsSdkVersion>10.0.20348.0</WindowsSdkVersion></WindowsPlatform>示例&…

R數據分析:集成學習方法之隨機生存森林的原理和做法,實例解析

很久很久以前給大家寫過決策樹&#xff0c;非常簡單明了的算法。今天給大家寫隨機&#xff08;生存&#xff09;森林&#xff0c;隨機森林是集成了很多個決策數的集成模型。像隨機森林這樣將很多個基本學習器集合起來形成一個更加強大的學習器的這么一種集成思想還是非常好的。…

算法面試題:反轉一個整數

題目&#xff1a;反轉一個整數。例如&#xff0c;輸入123&#xff0c;輸出321&#xff1b;輸入-456&#xff0c;輸出-654。注意&#xff1a;反轉后的整數在32位帶符號整數范圍內。 編寫一個函數 reverseInteger(x: int) -> int 來實現這個功能。 答案&#xff1a; def re…