您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“如何使用python實(shí)現(xiàn)時(shí)間序列預(yù)測(cè)中的數(shù)據(jù)滑窗操作”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“如何使用python實(shí)現(xiàn)時(shí)間序列預(yù)測(cè)中的數(shù)據(jù)滑窗操作”這篇文章吧。
面向數(shù)據(jù)分析的小白,水平有限,錯(cuò)誤難免,歡迎指正。
進(jìn)行機(jī)器學(xué)習(xí)時(shí),一般都要涉及到劃分訓(xùn)練集和測(cè)試集的步驟。特別地,在做數(shù)據(jù)預(yù)測(cè)時(shí),一般把預(yù)測(cè)的依據(jù)(也就是歷史數(shù)據(jù))稱作X,把需要預(yù)測(cè)的數(shù)據(jù)稱為y。即首先把原始數(shù)據(jù)劃分為train_X, train_y這兩個(gè)訓(xùn)練數(shù)據(jù)集和test_X, test_y這兩個(gè)測(cè)試數(shù)據(jù)集。
對(duì)于時(shí)間序列數(shù)據(jù)的預(yù)測(cè),往往是建立由好幾個(gè)歷史數(shù)據(jù)預(yù)測(cè)下一時(shí)刻的未來數(shù)據(jù),這時(shí)候?yàn)榱顺浞掷萌繑?shù)據(jù),應(yīng)該對(duì)原始數(shù)據(jù)集進(jìn)行滑窗操作,如下圖所示。
這里展示的是多個(gè)特征的時(shí)間序列,其中每一行數(shù)據(jù)均屬于同一時(shí)刻。假設(shè),我們要以H( humidity)、PT(pressure)、PE(power)三個(gè)特征為預(yù)測(cè)依據(jù),取當(dāng)前和上三個(gè)時(shí)刻共四個(gè)時(shí)刻的已知數(shù)據(jù)對(duì)下一時(shí)刻的PE(功率)進(jìn)行預(yù)測(cè),那么對(duì)于X數(shù)據(jù)集的滑窗就應(yīng)該如上圖所示,而對(duì)y數(shù)據(jù)集的滑窗應(yīng)該如下圖所示。
下面給出滑窗實(shí)例。
滑窗函數(shù)
def sliding_window(DataSet, X_width, y_width, gap = 1, multi_vector = None, X_data = True): ''' DataSet has to be as a DataFrame ''' if X_data: if multi_vector: a,b = DataSet.shape else: a = DataSet.shape[0] b = 1 c = (a-X_width-y_width-a%gap)/gap X = np.reshape(DataSet.iloc[0:X_width,:].values,(1,X_width,b)) for i in range(len(DataSet) - X_width - y_width): i += 1 if i > c: break j = i * gap tmp = DataSet.iloc[j:j + X_width,:].values tmp = np.reshape(tmp,(1,X_width,b)) X = np.concatenate([X,tmp],0) return X else: if multi_vector: print('y_data-error:expect 1D ,given %dD'%DataSet.shape[1]) return; else: a = DataSet.shape[0] c = (a-X_width-y_width-a%gap)/gap y = np.reshape(DataSet.iloc[X_width:X_width + y_width,0].values,(1,y_width)) for i in range(len(DataSet) - X_width - y_width): i += 1 if i > c: break j = i * gap + X_width tmp = DataSet.iloc[j:j + y_width,:].values tmp = np.reshape(tmp,(1,y_width)) y = np.concatenate([y,tmp]) return y
單特征時(shí)間序列是指僅有一個(gè)特征的一維時(shí)間序列,如股票收盤價(jià)、風(fēng)電場(chǎng)風(fēng)速數(shù)據(jù)、日營業(yè)額等。對(duì)單特征時(shí)間序列滑窗操作如下:
#DataSet訓(xùn)練數(shù)據(jù)集 #X_width使用的歷史數(shù)據(jù)長(zhǎng)度 #y_width要預(yù)測(cè)的數(shù)據(jù)長(zhǎng)度 #X_data是否是X數(shù)據(jù)集 train_X = sliding_window(DataSet, X_width, y_width) train_y = sliding_window(DataSet, X_width, y_width, X_data = None)
假設(shè)訓(xùn)練數(shù)據(jù)集是一個(gè)100*1的序列,使用24個(gè)數(shù)據(jù)預(yù)測(cè)未來的1個(gè)數(shù)據(jù),那么滑窗操作就將原數(shù)據(jù)做了這樣的變換:
多特征時(shí)間序列指時(shí)間序列的特征不止一個(gè),如上文所舉的H、PT、PE三特征序列。這種數(shù)據(jù)一般使用在待預(yù)測(cè)的數(shù)據(jù)跟多個(gè)特征相關(guān)性較高的場(chǎng)合中,如氣象數(shù)據(jù)嵌入的風(fēng)速預(yù)測(cè)、股市數(shù)據(jù)嵌入的收盤價(jià)格預(yù)測(cè)等。進(jìn)行多特征時(shí)間序列滑窗操作如下:
#DataSet訓(xùn)練數(shù)據(jù)集 #X_width使用的歷史數(shù)據(jù)長(zhǎng)度 #y_width要預(yù)測(cè)的數(shù)據(jù)長(zhǎng)度 #multi_vector是否為多特征 #X_data是否是X數(shù)據(jù)集 train_X = sliding_window(DataSet, X_width, y_width, multi_vector = True) test_y = sliding_window(DataSet, X_width, y_width, multi_vector = True, X_data = None)
假設(shè)訓(xùn)練數(shù)據(jù)集是一個(gè)100*3的序列,使用24個(gè)數(shù)據(jù)預(yù)測(cè)未來的1個(gè)數(shù)據(jù),那么滑窗操作就將原數(shù)據(jù)做了這樣的變換:
DataSet必須是DataFrame格式。
y數(shù)據(jù)集只能是一維。
以上是“如何使用python實(shí)現(xiàn)時(shí)間序列預(yù)測(cè)中的數(shù)據(jù)滑窗操作”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。