日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

使用遞歸圖 recurrence plot 表征時間序列

來源: 責編: 時間:2023-11-10 17:07:16 300觀看
導讀在本文中,我將展示如何使用遞歸圖 Recurrence Plots 來描述不同類型的時間序列。我們將查看具有500個數據點的各種模擬時間序列。我們可以通過可視化時間序列的遞歸圖并將其與其他已知的不同時間序列的遞歸圖進行比較,

在本文中,我將展示如何使用遞歸圖 Recurrence Plots 來描述不同類型的時間序列。我們將查看具有500個數據點的各種模擬時間序列。我們可以通過可視化時間序列的遞歸圖并將其與其他已知的不同時間序列的遞歸圖進行比較,從而直觀地表征時間序列。o8W28資訊網——每日最新資訊28at.com

o8W28資訊網——每日最新資訊28at.com

遞歸圖

Recurrence  Plots(RP)是一種用于可視化和分析時間序列或動態系統的方法。它將時間序列轉化為圖形化的表示形式,以便分析時間序列中的重復模式和結構。Recurrence Plots 是非常有用的,尤其是在時間序列數據中存在周期性、重復事件或關聯結構時。o8W28資訊網——每日最新資訊28at.com

Recurrence Plots 的基本原理是測量時間序列中各點之間的相似性。如果兩個時間點之間的距離小于某個給定的閾值,就會在 Recurrence Plot 中繪制一個點,表示這兩個時間點之間存在重復性。這些點在二維平面上組成了一種圖像。o8W28資訊網——每日最新資訊28at.com

import numpy as np import matplotlib.pyplot as plt  def recurrence_plot(data, threshold=0.1):    """    Generate a recurrence plot from a time series.     :param data: Time series data    :param threshold: Threshold to determine recurrence    :return: Recurrence plot    """    # Calculate the distance matrix    N = len(data)    distance_matrix = np.zeros((N, N))    for i in range(N):        for j in range(N):            distance_matrix[i, j] = np.abs(data[i] - data[j])     # Create the recurrence plot    recurrence_plot = np.where(distance_matrix <= threshold, 1, 0)     return recurrence_plot

上面的代碼創建了一個二進制距離矩陣,如果時間序列i和j的值相差在0.1以內(閾值),則它們的值為1,否則為0。得到的矩陣可以看作是一幅圖像。o8W28資訊網——每日最新資訊28at.com

白噪聲

接下來我們將可視化白噪聲。首先,我們需要創建一系列模擬的白噪聲:o8W28資訊網——每日最新資訊28at.com

# Set a seed for reproducibility np.random.seed(0)  # Generate 500 data points of white noise white_noise = np.random.normal(size=500)  # Plot the white noise time series plt.figure(figsize=(10, 6)) plt.plot(white_noise, label='White Noise') plt.title('White Noise Time Series') plt.xlabel('Time') plt.ylabel('Value') plt.legend() plt.grid(True) plt.show()

圖片o8W28資訊網——每日最新資訊28at.com

遞歸圖為這種白噪聲提供了有趣的可視化效果。對于任何一種白噪聲,圖看起來都是一樣的:o8W28資訊網——每日最新資訊28at.com

# Generate and plot the recurrence plot recurrence = recurrence_plot(white_noise, threshold=0.1)  plt.figure(figsize=(8, 8)) plt.imshow(recurrence, cmap='binary', origin='lower') plt.title('Recurrence Plot') plt.xlabel('Time') plt.ylabel('Time') plt.colorbar(label='Recurrence') plt.show()

o8W28資訊網——每日最新資訊28at.com

可以直觀地看到一個嘈雜的過程。可以看到圖中對角線總是黑色的。o8W28資訊網——每日最新資訊28at.com

隨機游走

接下來讓我們看看隨機游走(Random Walk)是什么樣子的:o8W28資訊網——每日最新資訊28at.com

# Generate 500 data points of a random walk steps = np.random.choice([-1, 1], size=500) # Generate random steps: -1 or 1 random_walk = np.cumsum(steps) # Cumulative sum to generate the random walk  # Plot the random walk time series plt.figure(figsize=(10, 6)) plt.plot(random_walk, label='Random Walk') plt.title('Random Walk Time Series') plt.xlabel('Time') plt.ylabel('Value') plt.legend() plt.grid(True) plt.show()

o8W28資訊網——每日最新資訊28at.com

# Generate and plot the recurrence plot recurrence = recurrence_plot(random_walk, threshold=0.1)  plt.figure(figsize=(8, 8)) plt.imshow(recurrence, cmap='binary', origin='lower') plt.title('Recurrence Plot') plt.xlabel('Time') plt.ylabel('Time') plt.colorbar(label='Recurrence') plt.show()

o8W28資訊網——每日最新資訊28at.com

SARIMA

SARIMA(4,1,4)(1,0,0,12)的模擬數據o8W28資訊網——每日最新資訊28at.com

from statsmodels.tsa.statespace.sarimax import SARIMAX  # Define SARIMA parameters p, d, q = 4, 1, 4 # Non-seasonal order P, D, Q, s = 1, 0, 0, 12 # Seasonal order  # Simulate data model = SARIMAX(np.random.randn(100), order=(p, d, q), seasonal_order=(P, D, Q, s), trend='ct') fit = model.fit(disp=False) # Fit the model to random data to get parameters simulated_data = fit.simulate(nsimulatinotallow=500)  # Plot the simulated time series plt.figure(figsize=(10, 6)) plt.plot(simulated_data, label=f'SARIMA({p},o6guu0a,{q})({P},{D},{Q},{s})') plt.title('Simulated Time Series from SARIMA Model') plt.xlabel('Time') plt.ylabel('Value') plt.legend() plt.grid(True) plt.show()

o8W28資訊網——每日最新資訊28at.com

recurrence = recurrence_plot(simulated_data, threshold=0.1)  plt.figure(figsize=(8, 8)) plt.imshow(recurrence, cmap='binary', origin='lower') plt.title('Recurrence Plot') plt.xlabel('Time') plt.ylabel('Time') plt.colorbar(label='Recurrence') plt.show()

o8W28資訊網——每日最新資訊28at.com

混沌的數據

def logistic_map(x, r):    """Logistic map function."""    return r * x * (1 - x)  # Initialize parameters N = 500         # Number of data points r = 3.9         # Parameter r, set to a value that causes chaotic behavior x0 = np.random.rand() # Initial value  # Generate chaotic time series data chaotic_data = [x0] for _ in range(1, N):    x_next = logistic_map(chaotic_data[-1], r)    chaotic_data.append(x_next)  # Plot the chaotic time series plt.figure(figsize=(10, 6)) plt.plot(chaotic_data, label=f'Logistic Map (r={r})') plt.title('Chaotic Time Series') plt.xlabel('Time') plt.ylabel('Value') plt.legend() plt.grid(True) plt.show()

o8W28資訊網——每日最新資訊28at.com

recurrence = recurrence_plot(chaotic_data, threshold=0.1)  plt.figure(figsize=(8, 8)) plt.imshow(recurrence, cmap='binary', origin='lower') plt.title('Recurrence Plot') plt.xlabel('Time') plt.ylabel('Time') plt.colorbar(label='Recurrence') plt.show()

o8W28資訊網——每日最新資訊28at.com

標準普爾500指數

作為最后一個例子,讓我們看看從2013年10月28日至2023年10月27日的標準普爾500指數真實數據:o8W28資訊網——每日最新資訊28at.com

import pandas as pd  df = pd.read_csv('standard_and_poors_500_idx.csv', parse_dates=True) df['Date'] = pd.to_datetime(df['Date']) df.set_index('Date', inplace = True) df.drop(columns = ['Open', 'High', 'Low'], inplace = True)  df.plot() plt.title('S&P 500 Index - 10/28/2013 to 10/27/2023') plt.ylabel('S&P 500 Index') plt.xlabel('Date');

o8W28資訊網——每日最新資訊28at.com

recurrence = recurrence_plot(df['Close/Last'], threshold=10)  plt.figure(figsize=(8, 8)) plt.imshow(recurrence, cmap='binary', origin='lower') plt.title('Recurrence Plot') plt.xlabel('Time') plt.ylabel('Time') plt.colorbar(label='Recurrence') plt.show()

o8W28資訊網——每日最新資訊28at.com

選擇合適的相似性閾值是 遞歸圖分析的一個關鍵步驟。較小的閾值會導致更多的重復模式,而較大的閾值會導致更少的重復模式。閾值的選擇通常需要根據數據的特性和分析目標進行調整。o8W28資訊網——每日最新資訊28at.com

這里我們不得不調整閾值,最終確得到的結果為10,這樣可以獲得更大的對比度。上面的遞歸圖看起來很像隨機游走遞歸圖和無規則的混沌數據的混合體。o8W28資訊網——每日最新資訊28at.com

總結

在本文中,我們介紹了遞歸圖以及如何使用Python創建遞歸圖。遞歸圖給了我們一種直觀表征時間序列圖的方法。遞歸圖是一種強大的工具,用于揭示時間序列中的結構和模式,特別適用于那些具有周期性、重復性或復雜結構的數據。通過可視化和特征提取,研究人員可以更好地理解時間序列數據并進行進一步的分析。o8W28資訊網——每日最新資訊28at.com

從遞歸圖中可以提取各種特征,以用于進一步的分析。這些特征可以包括重復點的分布、Lempel-Ziv復雜度、最長對角線長度等。o8W28資訊網——每日最新資訊28at.com

遞歸圖在多個領域中得到了廣泛應用,包括時間序列分析、振動分析、地震學、生態學、金融分析、生物醫學等。它可用于檢測周期性、異常事件、相位同步等。o8W28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-19948-0.html使用遞歸圖 recurrence plot 表征時間序列

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 系統架構七個非功能性需求

下一篇: 線性回歸,核技巧和線性核

標簽:
  • 熱門焦點
  • Java NIO內存映射文件:提高文件讀寫效率的優秀實踐!

    Java的NIO庫提供了內存映射文件的支持,它可以將文件映射到內存中,從而可以更快地讀取和寫入文件數據。本文將對Java內存映射文件進行詳細的介紹和演示。內存映射文件概述內存
  • JavaScript學習 -AES加密算法

    引言在當今數字化時代,前端應用程序扮演著重要角色,用戶的敏感數據經常在前端進行加密和解密操作。然而,這樣的操作在網絡傳輸和存儲中可能會受到惡意攻擊的威脅。為了確保數據
  • 一文掌握 Golang 模糊測試(Fuzz Testing)

    模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法??梢杂脕戆l現應用程序、操作系統和網絡協議等中的漏洞或
  • 2天漲粉255萬,又一賽道在抖音爆火

    來源:運營研究社作者 | 張知白編輯 | 楊佩汶設計 | 晏談夢潔這個暑期,旅游賽道徹底火了:有的「地方」火了&mdash;&mdash;貴州村超旅游收入 1 個月超過 12 億;有的「博主」火了&m
  • 猿輔導與新東方的兩種“歸途”

    作者|卓心月 出品|零態LT(ID:LingTai_LT)如何成為一家偉大企業?答案一定是對&ldquo;勢&rdquo;的把握,這其中最關鍵的當屬對企業戰略的制定,且能夠站在未來看現在,即使這其中的
  • 網傳小米汽車開始篩選交付中心 建筑面積不低于3000平方米

    7月7日消息,近日有微博網友@長三角行健者爆料稱,據經銷商集團反饋,小米汽車目前已經開始了交付中心的篩選工作,要求候選場地至少有120個車位,建筑不能低
  • 華為Mate60標準版細節曝光:經典星環相機模組回歸

    這段時間以來,關于華為新旗艦的爆料日漸密集。據此前多方爆料,今年華為將開始恢復一年雙旗艦戰略,除上半年推出的P60系列外,往年下半年的Mate系列也將
  • 2299元起!iQOO Pad明晚首銷:性能最強天璣平板

    5月23日,iQOO如期舉行了新品發布會,除了首發安卓最強旗艦處理器的iQOO Neo8系列新機外,還在發布會上推出了旗下首款平板電腦——iQOO Pad,其最大的賣點
  • 華為舉行春季智慧辦公新品發布會 首次推出電子墨水屏平板

    北京時間2月27日晚,華為在巴塞羅那舉行春季智慧辦公新品發布會,在海外市場推出之前已經在中國市場上市的筆記本、平板、激光打印機等辦公產品,并首次推出搭載
Top 主站蜘蛛池模板: 大理市| 望江县| 合肥市| 肃宁县| 永泰县| 涞水县| 海晏县| 唐海县| 嘉祥县| 扎赉特旗| 大理市| 娄烦县| 铅山县| 庆城县| 卓资县| 三台县| 酒泉市| 石林| 任丘市| 济南市| 天台县| 应城市| 深圳市| 湄潭县| 南木林县| 松原市| 玉田县| 尖扎县| 通城县| 沂南县| 综艺| 迭部县| 台北市| 溆浦县| 洪湖市| 新疆| 土默特左旗| 涟水县| 乌什县| 安远县| 奇台县|