時間序列預測中的數據滑窗操作實例(python實現)
撰寫背景
面向數據分析的小白,水平有限,錯誤難免,歡迎指正。
什麼是數據滑窗
進行機器學習時,一般都要涉及到劃分訓練集和測試集的步驟。特別地,在做數據預測時,一般把預測的依據(也就是歷史數據)稱作X,把需要預測的數據稱為y。即首先把原始數據劃分為train_X, train_y這兩個訓練數據集和test_X, test_y這兩個測試數據集。
對於時間序列數據的預測,往往是建立由好幾個歷史數據預測下一時刻的未來數據,這時候為瞭充分利用全部數據,應該對原始數據集進行滑窗操作,如下圖所示。
這裡展示的是多個特征的時間序列,其中每一行數據均屬於同一時刻。假設,我們要以H( humidity)、PT(pressure)、PE(power)三個特征為預測依據,取當前和上三個時刻共四個時刻的已知數據對下一時刻的PE(功率)進行預測,那麼對於X數據集的滑窗就應該如上圖所示,而對y數據集的滑窗應該如下圖所示。
下面給出滑窗實例。
代碼實現
滑窗函數
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
單特征時間序列
單特征時間序列是指僅有一個特征的一維時間序列,如股票收盤價、風電場風速數據、日營業額等。對單特征時間序列滑窗操作如下:
#DataSet訓練數據集 #X_width使用的歷史數據長度 #y_width要預測的數據長度 #X_data是否是X數據集 train_X = sliding_window(DataSet, X_width, y_width) train_y = sliding_window(DataSet, X_width, y_width, X_data = None)
假設訓練數據集是一個100*1的序列,使用24個數據預測未來的1個數據,那麼滑窗操作就將原數據做瞭這樣的變換:
多特征時間序列
多特征時間序列指時間序列的特征不止一個,如上文所舉的H、PT、PE三特征序列。這種數據一般使用在待預測的數據跟多個特征相關性較高的場合中,如氣象數據嵌入的風速預測、股市數據嵌入的收盤價格預測等。進行多特征時間序列滑窗操作如下:
#DataSet訓練數據集 #X_width使用的歷史數據長度 #y_width要預測的數據長度 #multi_vector是否為多特征 #X_data是否是X數據集 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)
假設訓練數據集是一個100*3的序列,使用24個數據預測未來的1個數據,那麼滑窗操作就將原數據做瞭這樣的變換:
註意事項
DataSet必須是DataFrame格式。
y數據集隻能是一維。
總結
到此這篇關於時間序列預測中的數據滑窗操作(python實現)的文章就介紹到這瞭,更多相關python數據滑窗操作內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python實現K-近鄰算法的示例代碼
- Python中LSTM回歸神經網絡時間序列預測詳情
- Python機器學習之底層實現KNN
- Python基於LightGBM進行時間序列預測
- Python Pandas基礎操作詳解