簡體   English   中英

將時間序列數據拆分為 Python 中的訓練測試集和有效集

[英]Split time series data into Train Test and Valid sets in Python

我正在做一個項目,在這個項目中,如果時間序列(例如 D1、D2),我結合了 2 個數據集。 D15-minutes間隔, D21-minute間隔,所以我將D1轉換為 1 分鍾間隔並與D2結合。 現在我想根據這些條件將這個新數據集D1D2拆分為訓練集、測試集和有效集:

注意:我進行了很多搜索並嘗試找到解決我的問題的方法,但沒有任何答案適合我的問題,所以請不要將其標記為重復!

  1. 有效集應該是數據集末尾的 60 個值。
  2. 然后,測試集應該是直到valid set的最新值
  3. 然后,我將使用剩余數據設置火車。

這是我現在進行拆分的方式:

def split_train_test(dataset, train_size, test_size):
    train = dataset[:train_size, :]
    test = dataset[test_size:, :]
    # split into input and outputs
    train_X, train_y = train[:, :-1], train[:, -1]
    test_X, test_y = test[:, :-1], test[:, -1]
    # reshape input to be 3D [samples, timesteps, features]
    train_X = train_X.reshape((train_X.shape[0], 1, train_X.shape[1]))
    test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1]))
    print(train_X.shape, train_y.shape, test_X.shape)
    return train, test, train_X, train_y, test_X, test_y

但是現在我需要在上述條件的基礎上轉換成訓練、測試和拆分?

我怎樣才能做到這一點? 而且它是分割時間序列數據集的正確方法嗎?

嘗試這個:

valid_set = dataset.iloc[-60:, :]
test_set = dataset.iloc[-120:-60]
train_set = dataset.iloc[:-120]

概括:

def split_train_test(dataset, validation_size):
    valid = dataset.iloc[-validation_size:, :]
    train_test = dataset.iloc[:-validation_size)]

    train_length = int(0.63 * len(train_test))

    # split into input and outputs
    train_X, train_y = train_test.iloc[:train_length, :-1], train_test.iloc[:train_length, -1]
    test_X, test_y = train_test.iloc[train_length:, :-1], train_test.iloc[train_length:, -1]
    valid_X, valid_y = valid.iloc[:, :-1], valid.iloc[:, -1]

    return train_test, valid, train_X, train_y, test_X, test_y, valid_X, valid_y

您可以將 % 拆分率作為參數傳遞到 function 中,而不是像我一樣將其硬編碼到 function 中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM