一個(gè)時(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)行分析。 算法流程如下: 輸入:原始時(shí)間序列y,窗口長度L 顯然矩陣X是一個(gè)漢克爾矩陣(每一條副對(duì)角線的元素都相等),矩陣的行數(shù)為窗口長度L,列數(shù)為N-L+1 其中: 奇異值分解將軌跡矩陣 X 分解為酉矩陣 U,對(duì)角陣 ∑ 和酉矩陣V的線性組合。這意味著: r表示矩陣X的非零特征根數(shù)也即矩陣的秩。 不妨設(shè)根據(jù)某一分組原則將子矩陣分為了trend、periodic、noise 3組,對(duì)應(yīng)的矩陣X分解得到的子序列將被組合為3部分。 其中:時(shí)間序列分解是時(shí)序分析中的重要方法,廣泛應(yīng)用于時(shí)間序列預(yù)測(cè),時(shí)間序列異常檢測(cè),時(shí)間序列聚類等場(chǎng)景,在工業(yè)界有很多的落地應(yīng)用。
概述
矩陣分解
01 時(shí)間序列嵌入形成軌跡矩陣
02 奇異值分解
03 特征分組
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()
https://www.kaggle.com/code/naveenkonam1985/crude-oil-price-prediction/data
如何將一個(gè)時(shí)間序列分解為周期序列和趨勢(shì)序列的和?

網(wǎng)友整理
注冊(cè)時(shí)間:
網(wǎng)站:5 個(gè) 小程序:0 個(gè) 文章:12 篇
-
51998
網(wǎng)站
- 12
小程序
-
1030137
文章
-
747
會(huì)員
文章分類
熱門網(wǎng)站
- 各百科-專業(yè)百科問答知識(shí)名網(wǎng)站 m.geelcn.com
- 免費(fèi)軟件,綠色軟件園,手機(jī)軟件下載,熱門游戲下載中心-中當(dāng)網(wǎng) m.deelcn.com
- 魔扣科技 www.ylptlb.cn
- 體育新聞_國際體育資訊_全球體育賽事-中名網(wǎng) www.feelcn.com/tiyu/tiyuxinwen/
- 食品安全_健康飲食_舌尖上的安全-中名網(wǎng) www.feelcn.com/shenghuo/shipinanquan/
- 中合網(wǎng) www.heelcn.com
- 中當(dāng)網(wǎng) www.deelcn.com
- 魔扣網(wǎng)站維護(hù)代運(yùn)營 www.ylptlb.cn/tg
- 中合網(wǎng)-健康養(yǎng)生知識(shí)科普名站 m.heelcn.com
- 各百科 www.geelcn.com
最新入駐小程序
數(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)定
熱門文章
- 民以食為天 離線人臉識(shí)別助力打造智慧食堂 08-20
- 青桔單車發(fā)布3款新車 已進(jìn)入150個(gè)城市 08-13
- 民間大神用Win7毛玻璃UI風(fēng)格改造Win10:情懷滿滿 08-06
- 網(wǎng)站標(biāo)題是否可以修改?怎么改不影響網(wǎng)站權(quán)重? 11-19
- 關(guān)于網(wǎng)站標(biāo)題和正文的匹配度分析 09-29
- 從滾石、華納到環(huán)球,三個(gè)關(guān)鍵詞讀懂網(wǎng)易云為何成版權(quán)方最愛 08-12
- 天眼被注冊(cè)為煙草商標(biāo),中國控?zé)焻f(xié)會(huì)要求嚴(yán)查 08-13
- 深圳實(shí)現(xiàn)5G獨(dú)立組網(wǎng)全覆蓋 已累計(jì)建設(shè)5G基站超4.6萬個(gè) 08-17
- 滴滴App內(nèi)嵌買車服務(wù) 已在十余城上線 08-06
- 關(guān)鍵詞的密度要結(jié)合頁面版式來調(diào)整 11-28