日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

時(shí)間序列分解是時(shí)序分析中的重要方法,廣泛應(yīng)用于時(shí)間序列預(yù)測(cè),時(shí)間序列異常檢測(cè),時(shí)間序列聚類等場(chǎng)景,在工業(yè)界有很多的落地應(yīng)用。

一個(gè)時(shí)間序列往往是以下幾類變化形式的疊加或耦合:

  • 長期趨勢(shì)(Secular trend, T):長期趨勢(shì)指現(xiàn)象在較長時(shí)期內(nèi)持續(xù)發(fā)展變化的一種趨向或狀態(tài)。
  • 季節(jié)變動(dòng)(Seasonal Variation, S):季節(jié)波動(dòng)是由于季節(jié)的變化引起的現(xiàn)象發(fā)展水平的規(guī)則變動(dòng)
  • 循環(huán)波動(dòng)(Cyclical Variation, C):循環(huán)波動(dòng)指以若干年為期限,不具嚴(yán)格規(guī)則的周期性連續(xù)變動(dòng)
  • 不規(guī)則波動(dòng)(Irregular Variation, I): 不規(guī)則波動(dòng)指由于眾多偶然因素對(duì)時(shí)間序列造成的影響

其中循環(huán)波動(dòng)和季節(jié)變動(dòng)一般可整合分解為有規(guī)律的周期序列,而長期趨勢(shì)則可整合分解為趨勢(shì)序列。分解出這兩種序列是時(shí)序分解中的重要課題。

本次文章為大家整理分解周期序列和趨勢(shì)序列的方法。

概述

這里主要使用的技術(shù)是奇異譜分析(SSA),其是根據(jù)觀測(cè)到的時(shí)間序列構(gòu)造軌跡矩陣,并對(duì)軌跡矩陣進(jìn)行分解和重構(gòu),從而提取出代表原時(shí)間序列不同成分的信號(hào),如長期趨勢(shì)信號(hào)、周期信號(hào)、噪聲信號(hào)等,從而進(jìn)一步對(duì)分解得到的信號(hào)進(jìn)行分析。

算法流程如下:

  1. 根據(jù)原始時(shí)間序列構(gòu)建軌跡矩陣 X
  2. 對(duì)矩陣X進(jìn)行奇異值分解
  3. 按奇異值生成r個(gè)子矩陣
  4. 根據(jù)某一分組原則將子矩陣 Xi 分為 m個(gè)組
  5. 對(duì)子矩陣 Xi 進(jìn)行對(duì)角均值化處理得到子序列!
  6. 對(duì)m個(gè)組中的子序列相加得到分組子序列。

矩陣分解

01 時(shí)間序列嵌入形成軌跡矩陣

輸入:原始時(shí)間序列y,窗口長度L

顯然矩陣X是一個(gè)漢克爾矩陣(每一條副對(duì)角線的元素都相等),矩陣的行數(shù)為窗口長度L,列數(shù)為N-L+1

02 奇異值分解

其中:

奇異值分解將軌跡矩陣 X 分解為酉矩陣 U,對(duì)角陣 ∑ 和酉矩陣V的線性組合。這意味著:

r表示矩陣X的非零特征根數(shù)也即矩陣的秩。

03 特征分組

不妨設(shè)根據(jù)某一分組原則將子矩陣分為了trend、periodic、noise 3組,對(duì)應(yīng)的矩陣X分解得到的子序列將被組合為3部分。

04 對(duì)角平均化

其中:

代碼實(shí)例

'''數(shù)據(jù)處理'''
import pandas as pd
import numpy as np
'''數(shù)據(jù)可視化'''
import matplotlib.pyplot as plt
plt.rcParams['figure.dpi'] = 800           #調(diào)整分辨率
plt.rcParams['font.sans-serif']=['SimHei'] #顯示中文
plt.rcParams['axes.unicode_minus']=False   #正常顯示負(fù)號(hào)

###加載數(shù)據(jù)集###
file = r'D:/關(guān)注@公眾號(hào)|機(jī)器學(xué)習(xí)研習(xí)院/crude-oil-price.csv'
oil_info = pd.read_csv(file,index_col='date')
price = oil_info['price']

# 算法封裝
class SSA(object):
    
    __supported_types = (pd.Series,np.ndarray,list) #限制時(shí)間序列的輸入類型
    
    def __init__(self,tseries,L):
        '''
        Args:
            tseries:原始時(shí)間序列
            L:窗口長度
        '''
        
        if not isinstance(tseries, self.__supported_types):
            raise TypeError("請(qǐng)確保時(shí)間序列的數(shù)據(jù)類型為Pandas Series,NumpPy array 或者list")
        else:
            self.orig_TS = pd.Series(tseries)
            
        self.N = len(tseries)        #原始時(shí)間序列長度
        if not 2 <= L <= self.N / 2:
            raise ValueError("窗口長度必須介于[2,N/2]")
        self.L = L                   #窗口長度,軌跡矩陣的行數(shù)
        self.K = self.N - self.L + 1 #軌跡矩陣的列數(shù)
        self.X = np.array([self.orig_TS.values[i:L+i] for i in range(0,self.K)]).T
        
        #奇異值分解
        self.U,self.Sigma,VH = np.linalg.svd(self.X)
        self.r = np.linalg.matrix_rank(self.X)    #矩陣的秩等于非零特征值的數(shù)量
        #每一個(gè)非零特征值都對(duì)應(yīng)一個(gè)子矩陣,子矩陣對(duì)角平均化后得到原始時(shí)間序列的一個(gè)子序列
        self.TS_comps = np.zeros((self.N,self.r)) 
        
        #對(duì)角平均還原
        for i in range(self.r):
            X_elem = self.Sigma[i] * np.outer(self.U[:,i], VH[i,:]) 
            X_rev = X_elem[::-1]
            self.TS_comps[:,i] = [X_rev.diagonal(j).mean() for j in range(-X_rev.shape[0]+1, X_rev.shape[1])]
            
    def comps_to_df(self):
        '''
        將子序列數(shù)組轉(zhuǎn)換成DataFrame類型
        '''
        cols = ["F{}".format(i) for i in range(self.r)]
        return pd.DataFrame(data=self.TS_comps,columns=cols,index=self.orig_TS.index)
    
    def reconsruct(self,indices):
        '''
        重構(gòu),可以是部分重構(gòu)(相當(dāng)于子序列的分組合并),
        也可以是全部合并(重構(gòu)為原序列)
        Args:
            indices   重構(gòu)所選擇的子序列
        '''
        if isinstance(indices,int):
            indices = [indices]
        
        ts_vals = self.TS_comps[:,indices].sum(axis=1)
        return pd.Series(ts_vals,index=self.orig_TS.index)
    
    def vis(self):
        '''
        可視化子序列
        '''
        fig,axs = plt.subplots(self.r,sharex='all')
        for i in range(self.r):
            axs[i].plot(self.reconsruct(i),lw=1)
            

price_SSA = SSA(price,7)
comps_df = price_SSA.comps_to_df()
數(shù)據(jù)來源:
https://www.kaggle.com/code/naveenkonam1985/crude-oil-price-prediction/data

分享到:
標(biāo)簽:序列
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定