import numpy as np

start_date = '2024-01-01'
end_date = '2024-12-31'
dates = pd.date_range(start=start_date, end=end_date)

data = {
'Feature1': np.random.randn(len(dates)),
'Feature2': np.random.rand(len(dates)) * 100, # 生成0到100之間的隨機數
'Feature3': np.random.randint(1, 100, size=len(dates)) # 生成1到100之間的隨機整數
}

df = pd.DataFrame(data, index=dates)
df

在這里我們生成一個時序數據,接下將使用不同的窗口形式對該數據進行時間窗口劃分。

2. 單輸入單輸出單步預測

def prepare_data(data, win_size):
X = []
y = []

for i in range(len(data) - win_size):
temp_x = data[i:i + win_size]
temp_y = data[i + win_size]
X.append(temp_x)
y.append(temp_y)

X = np.asarray(X)
y = np.asarray(y)
X = np.expand_dims(X, axis=-1)
return X, y

win_size = 12
X, y = prepare_data(df['Feature1'].values, win_size)

train_size = int(len(X) * 0.7)

X_train, X_test = X[:train_size], X[train_size:]
y_train, y_test = y[:train_size], y[train_size:]

print("訓練集形狀:", X_train.shape, y_train.shape)
print("測試集形狀:", X_test.shape, y_test.shape)

單輸入單輸出單步預測指的是在時間序列預測中,使用單個特征(或變量)的歷史觀測數據來預測未來該輸入特征單個時間點的結果。

在這里數據形狀維度的含義為:訓練集包含 247 個樣本,每個樣本時間窗口為12,每個時間步長有 1 個特征;測試集包含 107 個樣本,每個樣本時間窗口為12,每個時間步長有 1 個特征。

3.?單輸入單輸出多步預測

def prepare_data(data, win_size, steps):
X = []
y = []

for i in range(len(data) - win_size - steps + 1):
temp_x = data[i:i + win_size]
temp_y = data[i + win_size:i + win_size + steps]
X.append(temp_x)
y.append(temp_y)

X = np.asarray(X)
y = np.asarray(y)
X = np.expand_dims(X, axis=-1)
return X, y

win_size = 12
steps = 3 # 修改為多步預測,預測未來3個時間步
X, y = prepare_data(df['Feature1'].values, win_size, steps)

train_size = int(len(X) * 0.7)

X_train, X_test = X[:train_size], X[train_size:]
y_train, y_test = y[:train_size], y[train_size:]

print("訓練集形狀:", X_train.shape, y_train.shape)
print("測試集形狀:", X_test.shape, y_test.shape)

單輸入單輸出多步預測指的是使用單個特征的歷史觀測數據來預測未來連續多個時間點的結果。

在這里數據形狀維度的含義為:訓練集包含 246 個樣本,每個樣本有 12 個時間步長,每個時間步長有 1 個特征,同時輸出該輸入特征未來三個時間點的預測結果;測試集包含 106 個樣本,每個樣本有 12 個時間步長,每個時間步長有 1 個特征,同時輸出該輸入特征未來三個時間點的預測結果。

4. 多輸入單輸出單步預測

ef prepare_data(data, win_size, target_feature_idx):
num_features = data.shape[1]
X = []
y = []
for i in range(len(data) - win_size):
temp_x = data[i:i + win_size, :]
temp_y = data[i + win_size, target_feature_idx]
X.append(temp_x)
y.append(temp_y)
X = np.asarray(X)
y = np.asarray(y)

return X, y

win_size = 12
target_feature_idx = 0 # 指定待預測特征列
X, y = prepare_data(df.values, win_size, target_feature_idx)

train_size = int(len(X) * 0.7)

X_train, X_test = X[:train_size], X[train_size:]
y_train, y_test = y[:train_size], y[train_size:]

print("訓練集形狀:", X_train.shape, y_train.shape)
print("測試集形狀:", X_test.shape, y_test.shape)

多輸入單輸出單步預測是指使用多個特征的歷史觀測數據來預測未來單個時間點的結果。

在這里數據形狀維度的含義為:訓練集包含 247 個樣本,每個樣本有 12 個時間步長,每個時間步長有 3 個特征,同時有 1 個目標變量;測試集包含 107 個樣本,每個樣本有 12 個時間步長,每個時間步長有 3 個特征,同時有 1 個目標變量。

5. 多輸入單輸出多步預測

def prepare_data(data, win_size, target_feature_idx, steps):
num_features = data.shape[1]
X = []
y = []
for i in range(len(data) - win_size - steps + 1):
temp_x = data[i:i + win_size, :]
temp_y = data[i + win_size:i + win_size + steps, target_feature_idx]
X.append(temp_x)
y.append(temp_y)
X = np.asarray(X)
y = np.asarray(y)

return X, y

win_size = 12
target_feature_idx = 0 # 指定待預測特征列
steps = 3 # 預測未來3個時間步
X, y = prepare_data(df.values, win_size, target_feature_idx, steps)

train_size = int(len(X) * 0.7)

X_train, X_test = X[:train_size], X[train_size:]
y_train, y_test = y[:train_size], y[train_size:]

print("訓練集形狀:", X_train.shape, y_train.shape)
print("測試集形狀:", X_test.shape, y_test.shape)

多輸入單輸出多步預測是指使用多個特征的歷史觀測數據來預測未來連續多個時間點的結果。

在這里數據形狀維度的含義為:訓練集包含 246 個樣本,每個樣本有 12 個時間步長,每個時間步長有 3 個特征,同時輸出指定預測特征序列未來三個時間點的預測結果;測試集包含 106 個樣本,每個樣本有 12 個時間步長,每個時間步長有 3 個特征,同時輸出指定預測特征序列未來三個時間點的預測結果。

6. 多輸入多輸出單步預測

def prepare_data(data, win_size, target_feature_idx):
num_features = data.shape[1]
X = []
y = []
for i in range(len(data) - win_size):
temp_x = data[i:i + win_size, :]
temp_y = data[i + win_size, target_feature_idx]
X.append(temp_x)
y.append(temp_y)
X = np.asarray(X)
y = np.asarray(y)

return X, y

win_size = 12
target_feature_idx = [0,1,2] # 指定待預測特征列
X, y = prepare_data(df.values, win_size, target_feature_idx)

train_size = int(len(X) * 0.7)

X_train, X_test = X[:train_size], X[train_size:]
y_train, y_test = y[:train_size], y[train_size:]

print("訓練集形狀:", X_train.shape, y_train.shape)
print("測試集形狀:", X_test.shape, y_test.shape)

多輸入多輸出單步預測是指使用多個特征的歷史觀測數據來預測未來多個特征單個時間點的輸出特征結果。

在這里數據形狀維度的含義為:訓練集包含 247 個樣本,每個樣本有 12 個時間步長,每個時間步長有 3 個特征,同時有 3 個目標變量(也就是指定的待預測序列);測試集包含 107 個樣本,每個樣本有 12 個時間步長,每個時間步長有 3 個特征,同時有 3 個目標變量(也就是指定的待預測序列)。

7. 多輸入多輸出多步預測

def prepare_data(data, win_size, target_feature_idx, steps):
num_features = data.shape[1]
X = []
y = []
for i in range(len(data) - win_size - steps + 1):
temp_x = data[i:i + win_size, :]
temp_y = data[i + win_size:i + win_size + steps, target_feature_idx]
X.append(temp_x)
y.append(temp_y)
X = np.asarray(X)
y = np.asarray(y)

return X, y

win_size = 12
target_feature_idx = [0, 1, 2] # 指定待預測特征列
steps = 4 # 預測未來4個時間步
X, y = prepare_data(df.values, win_size, target_feature_idx, steps)

train_size = int(len(X) * 0.7)

X_train, X_test = X[:train_size], X[train_size:]
y_train, y_test = y[:train_size], y[train_size:]

print("訓練集形狀:", X_train.shape, y_train.shape)
print("測試集形狀:", X_test.shape, y_test.shape)

多輸入多輸出多步預測是指使用多個特征的歷史觀測數據來預測未來多個特征多個時間點的輸出特征結果。

在這里數據形狀維度的含義為:訓練集包含 245 個樣本,每個樣本有 12 個時間步長,每個時間步長有 3 個特征,同時有 3 個目標變量(也就是指定的待預測序列),同時輸出每個目標變量未來三個時間點的預測結果;測試集包含 106 個樣本,每個樣本有 12 個時間步長,每個時間步長有 3 個特征,同時有 3 個目標變量(也就是指定的待預測序列),同時輸出每個目標變量未來三個時間點的預測結果。

文章轉自微信公眾號@Python機器學習AI

上一篇:

時間序列預測:CNN-BiLSTM模型實踐

下一篇:

基于LSTM模型的多輸入多輸出單步時間序列預測

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費