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之間的隨機(jī)數(shù)
'Feature3': np.random.randint(1, 100, size=len(dates)) # 生成1到100之間的隨機(jī)整數(shù)
}
df = pd.DataFrame(data, index=dates)
df
在這里我們生成一個(gè)時(shí)序數(shù)據(jù),接下將使用不同的窗口形式對(duì)該數(shù)據(jù)進(jìn)行時(shí)間窗口劃分。
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ùn)練集形狀:", X_train.shape, y_train.shape)
print("測(cè)試集形狀:", X_test.shape, y_test.shape)
單輸入單輸出單步預(yù)測(cè)指的是在時(shí)間序列預(yù)測(cè)中,使用單個(gè)特征(或變量)的歷史觀測(cè)數(shù)據(jù)來(lái)預(yù)測(cè)未來(lái)該輸入特征單個(gè)時(shí)間點(diǎn)的結(jié)果。
在這里數(shù)據(jù)形狀維度的含義為:訓(xùn)練集包含 247 個(gè)樣本,每個(gè)樣本時(shí)間窗口為12,每個(gè)時(shí)間步長(zhǎng)有 1 個(gè)特征;測(cè)試集包含 107 個(gè)樣本,每個(gè)樣本時(shí)間窗口為12,每個(gè)時(shí)間步長(zhǎng)有 1 個(gè)特征。
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 # 修改為多步預(yù)測(cè),預(yù)測(cè)未來(lái)3個(gè)時(shí)間步
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ùn)練集形狀:", X_train.shape, y_train.shape)
print("測(cè)試集形狀:", X_test.shape, y_test.shape)
單輸入單輸出多步預(yù)測(cè)指的是使用單個(gè)特征的歷史觀測(cè)數(shù)據(jù)來(lái)預(yù)測(cè)未來(lái)連續(xù)多個(gè)時(shí)間點(diǎn)的結(jié)果。
在這里數(shù)據(jù)形狀維度的含義為:訓(xùn)練集包含 246 個(gè)樣本,每個(gè)樣本有 12 個(gè)時(shí)間步長(zhǎng),每個(gè)時(shí)間步長(zhǎng)有 1 個(gè)特征,同時(shí)輸出該輸入特征未來(lái)三個(gè)時(shí)間點(diǎn)的預(yù)測(cè)結(jié)果;測(cè)試集包含 106 個(gè)樣本,每個(gè)樣本有 12 個(gè)時(shí)間步長(zhǎng),每個(gè)時(shí)間步長(zhǎng)有 1 個(gè)特征,同時(shí)輸出該輸入特征未來(lái)三個(gè)時(shí)間點(diǎn)的預(yù)測(cè)結(jié)果。
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 # 指定待預(yù)測(cè)特征列
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ùn)練集形狀:", X_train.shape, y_train.shape)
print("測(cè)試集形狀:", X_test.shape, y_test.shape)
多輸入單輸出單步預(yù)測(cè)是指使用多個(gè)特征的歷史觀測(cè)數(shù)據(jù)來(lái)預(yù)測(cè)未來(lái)單個(gè)時(shí)間點(diǎn)的結(jié)果。
在這里數(shù)據(jù)形狀維度的含義為:訓(xùn)練集包含 247 個(gè)樣本,每個(gè)樣本有 12 個(gè)時(shí)間步長(zhǎng),每個(gè)時(shí)間步長(zhǎng)有 3 個(gè)特征,同時(shí)有 1 個(gè)目標(biāo)變量;測(cè)試集包含 107 個(gè)樣本,每個(gè)樣本有 12 個(gè)時(shí)間步長(zhǎng),每個(gè)時(shí)間步長(zhǎng)有 3 個(gè)特征,同時(shí)有 1 個(gè)目標(biāo)變量。
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 # 指定待預(yù)測(cè)特征列
steps = 3 # 預(yù)測(cè)未來(lái)3個(gè)時(shí)間步
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ùn)練集形狀:", X_train.shape, y_train.shape)
print("測(cè)試集形狀:", X_test.shape, y_test.shape)
多輸入單輸出多步預(yù)測(cè)是指使用多個(gè)特征的歷史觀測(cè)數(shù)據(jù)來(lái)預(yù)測(cè)未來(lái)連續(xù)多個(gè)時(shí)間點(diǎn)的結(jié)果。
在這里數(shù)據(jù)形狀維度的含義為:訓(xùn)練集包含 246 個(gè)樣本,每個(gè)樣本有 12 個(gè)時(shí)間步長(zhǎng),每個(gè)時(shí)間步長(zhǎng)有 3 個(gè)特征,同時(shí)輸出指定預(yù)測(cè)特征序列未來(lái)三個(gè)時(shí)間點(diǎn)的預(yù)測(cè)結(jié)果;測(cè)試集包含 106 個(gè)樣本,每個(gè)樣本有 12 個(gè)時(shí)間步長(zhǎng),每個(gè)時(shí)間步長(zhǎng)有 3 個(gè)特征,同時(shí)輸出指定預(yù)測(cè)特征序列未來(lái)三個(gè)時(shí)間點(diǎn)的預(yù)測(cè)結(jié)果。
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] # 指定待預(yù)測(cè)特征列
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ùn)練集形狀:", X_train.shape, y_train.shape)
print("測(cè)試集形狀:", X_test.shape, y_test.shape)
多輸入多輸出單步預(yù)測(cè)是指使用多個(gè)特征的歷史觀測(cè)數(shù)據(jù)來(lái)預(yù)測(cè)未來(lái)多個(gè)特征單個(gè)時(shí)間點(diǎn)的輸出特征結(jié)果。
在這里數(shù)據(jù)形狀維度的含義為:訓(xùn)練集包含 247 個(gè)樣本,每個(gè)樣本有 12 個(gè)時(shí)間步長(zhǎng),每個(gè)時(shí)間步長(zhǎng)有 3 個(gè)特征,同時(shí)有 3 個(gè)目標(biāo)變量(也就是指定的待預(yù)測(cè)序列);測(cè)試集包含 107 個(gè)樣本,每個(gè)樣本有 12 個(gè)時(shí)間步長(zhǎng),每個(gè)時(shí)間步長(zhǎng)有 3 個(gè)特征,同時(shí)有 3 個(gè)目標(biāo)變量(也就是指定的待預(yù)測(cè)序列)。
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] # 指定待預(yù)測(cè)特征列
steps = 4 # 預(yù)測(cè)未來(lái)4個(gè)時(shí)間步
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ùn)練集形狀:", X_train.shape, y_train.shape)
print("測(cè)試集形狀:", X_test.shape, y_test.shape)
多輸入多輸出多步預(yù)測(cè)是指使用多個(gè)特征的歷史觀測(cè)數(shù)據(jù)來(lái)預(yù)測(cè)未來(lái)多個(gè)特征多個(gè)時(shí)間點(diǎn)的輸出特征結(jié)果。
在這里數(shù)據(jù)形狀維度的含義為:訓(xùn)練集包含 245 個(gè)樣本,每個(gè)樣本有 12 個(gè)時(shí)間步長(zhǎng),每個(gè)時(shí)間步長(zhǎng)有 3 個(gè)特征,同時(shí)有 3 個(gè)目標(biāo)變量(也就是指定的待預(yù)測(cè)序列),同時(shí)輸出每個(gè)目標(biāo)變量未來(lái)三個(gè)時(shí)間點(diǎn)的預(yù)測(cè)結(jié)果;測(cè)試集包含 106 個(gè)樣本,每個(gè)樣本有 12 個(gè)時(shí)間步長(zhǎng),每個(gè)時(shí)間步長(zhǎng)有 3 個(gè)特征,同時(shí)有 3 個(gè)目標(biāo)變量(也就是指定的待預(yù)測(cè)序列),同時(shí)輸出每個(gè)目標(biāo)變量未來(lái)三個(gè)時(shí)間點(diǎn)的預(yù)測(cè)結(jié)果。
文章轉(zhuǎn)自微信公眾號(hào)@Python機(jī)器學(xué)習(xí)AI
對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對(duì)比試用API 限時(shí)免費(fèi)