深度学习双输入不同起始时间模型代码修改咨询
解决方案:适配时间错位输入的序列数据处理代码修改
完全可以构建符合你需求的深度学习模型,核心是解决Temperature(t=0起始)和Status(t=1起始)的时间步错位问题,以下是针对你提供的代码的修改方案及说明:
核心思路
要预测t=15时刻的Temperature,对应的输入需要:
- Temperature序列:覆盖t=0到t=14(共15个时间步)
- Status序列:覆盖t=1到t=14(共14个时间步)
由于两个序列长度不一致,我们需要补全Status缺失的t=0时刻值(可根据数据类型选择合理补全方式),保证输入的时间步维度统一,方便后续模型处理。
修改后的代码
import numpy as np import pandas as pd def df_to_X_y(df, window_size=15): # 单独提取Temperature和Status列(假设Temperature是第0列,Status是第1列) temp_series = df.iloc[:, 0].to_numpy() status_series = df.iloc[:, 1].to_numpy() X = [] y = [] # 计算最大循环次数,避免Status序列越界 max_sample_idx = min(len(temp_series) - window_size, len(status_series) - (window_size - 1)) for i in range(max_sample_idx): # 提取Temperature窗口:t=i 到 t=i+14(共15个时间步) temp_window = temp_series[i:i+window_size] # 提取Status窗口:t=i+1 到 t=i+14(共14个时间步),补全t=i位置的缺失值 # 这里用0填充,可根据数据类型替换:分类变量用众数,连续变量用均值/中位数 status_window = np.concatenate([[0], status_series[i+1:i+window_size]]) # 组合成每个时间步的特征对:[Temperature, Status] combined_window = np.column_stack((temp_window, status_window)) X.append(combined_window) # 目标值:t=i+15时刻的Temperature y.append(temp_series[i+window_size]) return np.array(X), np.array(y)
关键修改说明
- 拆分特征列:不再整行处理数据,单独提取两个特征序列,避免时间步错位
- 边界控制:通过
max_sample_idx确保Status窗口不会超出数据范围,因为Status比Temperature晚一个时间步开始 - 缺失值补全:给Status的起始缺失时间步补全合理值,保证输入序列长度统一为15个时间步
- 特征组合:将同一时间步的Temperature和Status配对,形成模型需要的序列输入格式(形状为:[样本数, 时间步, 特征数])
额外建议
- 补全值选择:如果Status是分类变量,建议用数据中出现次数最多的类别填充;如果是连续变量,用均值或中位数更合适
- 数据归一化:训练模型前,对Temperature和Status分别做标准化(如
StandardScaler),能大幅提升模型收敛速度和效果 - 模型选择:可以用LSTM、GRU这类序列模型,输入形状对应修改后X的形状即可
内容的提问来源于stack exchange,提问作者Azhan Ameer
相关产品推荐
相关产品推荐

