时间窗口划分:时序预测模型的多种形式解析

技术

当涉及时间序列数据的预测和分析时,时间窗口的划分是一个至关重要的概念,时间窗口可以理解为我们在时间序列数据中选取的一段时间范围来预测下一个时间点或时间段,利用划分的数据进行训练预测模型,在时间序列预测中,我们通常面临着不同类型的预测问题,例如单输入单输出、多输入单输出、单输入多输出等等,每种预测问题都有不同的应用场景和适用模型,在本文中,我们将探讨不同类型的时间窗口如何划分,从单输入单输出到多输入多输出,以帮助读者更好地理解时间窗口是如何划分

1. 数据生成


          
import pandas as pd
          
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
      

picture.image

在这里我们生成一个时序数据,接下将使用不同的窗口形式对该数据进行时间窗口划分

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)
      

picture.image

单输入单输出单步预测指的是在时间序列预测中,使用单个特征(或变量)的历史观测数据来预测未来该输入特征单个时间点的结果

在这里数据形状维度的含义为:训练集包含 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)
      

picture.image

单输入单输出多步预测指的是使用单个特征的历史观测数据来预测未来连续多个时间点的结果

在这里数据形状维度的含义为:训练集包含 246 个样本,每个样本有 12 个时间步长,每个时间步长有 1 个特征,同时输出该输入特征未来三个时间点的预测结果;测试集包含 106 个样本,每个样本有 12 个时间步长,每个时间步长有 1 个特征,同时输出该输入特征未来三个时间点的预测结果

4.

多输入单输出单步预测


          
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 # 指定待预测特征列
          
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)
      

picture.image

多输入单输出单步预测是指使用多个特征的历史观测数据来预测未来单个时间点的结果

在这里数据形状维度的含义为: 训练集包含 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)
      

picture.image

多输入单输出多步预测是指使用多个特征的历史观测数据来预测未来连续多个时间点的结果

在这里数据形状维度的含义为:训练集包含 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)
      

picture.image

多输入多输出单步预测是指使用多个特征的历史观测数据来预测未来多个特征单个时间点的输出特征结果

在这里数据形状维度的含义为:训练集包含 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)
      

picture.image

多 输入多输出 多步预测是指使用多个特征的历史观测数据来预测未来多个特征多个时间点的输出特征 结 果

在这里数据形状维度的含义为: 训练集包含 245 个样本,每个样本有 12 个时间步长,每个时间步长有 3 个特征,同时有 3 个目标变量 (也就是指定的待预测序列 ),同时输出每个目标变量未来三个时间点的预测结果 ; 测试集包含 106 个样本 ,每个样本有 12 个时间步长,每个时间步长有 3 个特征,同时有 3 个目标变量 (也就是指定的待预测序列 ),同时输出每个目标变量未来三个时间点的预测结果

往期推荐

基于LSTM模型的多输入多输出单步时间序列预测

使用LSTM模型预测多特征变量的时间序列

TCN时间序列卷积神经网络

基于VMD分解的VMD-CNN-LSTM时间序列预测模型实现

基于VMD分解的VMD-LSTM时间序列预测模型实现,大力提升预测精度!

ARIMA模型进阶——具有季节性的SARIMAX模型实现

时间序列——移动平均(SMA、EMA、WMA)

时间序列——平稳性检验

时间序列——季节性检验

长短期记忆网络LSTM在时序数据预测演示

如果你对类似于这样的文章感兴趣。

欢迎关注、点赞、转发~

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
边缘计算在视频直播场景的应用与实践
视频直播作为当前视频行业的核心场景之一,对于高清化、实时性、交互性要求较高,需要强大算力保障用户流畅观看与互动体验。本次分享主要从视频直播场景需求切入,介绍基于边缘计算的视频直播场景方案及其架构、应用与实践。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论