一文搞明白时序数据输入到LSTM模型的格式(案例解读)
创作时间:
作者:
@小白创作中心
一文搞明白时序数据输入到LSTM模型的格式(案例解读)
引用
CSDN
1.
https://blog.csdn.net/sinat_41858359/article/details/138646611
一、引言
本文将详细介绍时序数据输入到LSTM模型的格式,包括单变量和多变量时序数据的处理方法。通过具体的案例解读,帮助读者理解LSTM模型输入数据的格式要求。
二、实现过程
2.1 单变量时序数据
1、原始data
原始数据是一个144行1列的(144,1)的dataframe:
2、数据集按照8:2划分,并进行归一化处理
train_data_scaler是一个(115,1)的二维数组:
3、创建滑动窗口数据集
将train_data_scaler集转换为 LSTM 模型所需的形状(样本数,时间步长,特征数):
def create_sliding_windows(data, window_size):
X, Y = [], []
for i in range(len(data) - window_size):
X.append(data[i:i+window_size, 0:data.shape[1]])
Y.append(data[i+window_size,0])
return np.array(X), np.array(Y)
X_train, Y_train = create_sliding_windows(train_data_scaler, window_size)
这里假设窗口window_size设为12,i的范围0-102,103取不到:
- 当i=0时,取出train_data_scaler第【1-12】行第【1】列的12条数据作为X_train[0],取出train_data_scaler第【13】行第【1】列的1条数据作为Y_train[0];
- 当i=1时,取出train_data_scaler第【2-13】行第【1】列的12条数据作为X_train[1],取出train_data_scaler第【14】行第【1】列的1条数据作为Y_train[1];
- ...
- 当i=102时,取出train_data_scaler第【103-114】行第【1】列的12条数据作为X_train[102],取出train_data_scaler第【115】行第【1】列的1条数据作为Y_train[102];
返回的X_train是一个(103,12,1)的三维数组;Y_train是一个(103,1)的二维数组;
X_train = np.reshape(X_train, (X_train.shape[0], window_size, 1)
经过滑动窗口之后返回的形状已经是LSTM所需的形状了,所以这句话可以省略。
4、构建 LSTM 模型
# 构建 LSTM 模型
model = Sequential()
model.add(LSTM(50, activation='relu', input_shape=(window_size, 1)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
LSTM的input_shape=(时间步长,特征数),其实就是一个样本输入的形状。
5、训练 LSTM 模型
# 训练 LSTM 模型
model.fit(X_train, Y_train, epochs=100, batch_size=32)
- X_train是一个(103,12,1)的三维数组,三个维度分别表示(样本数,时间步长,特征数)
- Y_train是一个(103,1)的二维数组,两个维度分别表示(样本数,标签)
- 类似一个103行(121+1)列的表格,前(121)列是特征,第(12*1+1)列是标签
2.2 多变量时序数据
1、原始的data
是一个(5203,5)的dataframe:
2、数据集按照8:2划分,并进行归一化处理
train_data_scaler是一个(4162,5)的二维数组:
3、创建滑动窗口数据集
将数据集转换为 LSTM 模型所需的形状(样本数,时间步长,特征数):
def create_sliding_windows(data, window_size):
X, Y = [], []
for i in range(len(data) - window_size):
X.append(data[i:i+window_size, 0:data.shape[1]])
Y.append(data[i+window_size,0])
return np.array(X), np.array(Y)
X_train, Y_train = create_sliding_windows(train_data_scaler, window_size)
这里假设窗口window_size设为30,i的范围0-4131:
- 当i=0时,取出train_data_scaler第【1-30】行第【1-5】列的12条数据作为X_train[0],取出train_data_scaler第【31】行第【1】列的1条数据作为Y_train[0];
- 当i=1时,取出train_data_scaler第【2-31】行第【1-5】列的12条数据作为X_train[1],取出train_data_scaler第【32】行第【1】列的1条数据作为Y_train[1];
- ...
- 当i=4131时,取出train_data_scaler第【4132-4161】行第【1-5】列的12条数据作为X_train[4131],取出train_data_scaler第【4162】行第【1】列的1条数据作为Y_train[4131];
返回的X_train是一个(4132,30,5)的三维数组;Y_train是一个(4132,1)的二维数组;
X_train = np.reshape(X_train, (X_train.shape[0], window_size, 5)
经过滑动窗口之后返回的形状已经是LSTM所需的形状了,所以这句话可以省略。
4、构建 LSTM 模型
# 构建 LSTM 模型
model = Sequential()
model.add(LSTM(50, activation='relu', input_shape=(window_size, 5)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
LSTM的input_shape=(时间步长,特征数),其实就是一个样本输入的形状。
5、训练 LSTM 模型
# 训练 LSTM 模型
model.fit(X_train, Y_train, epochs=100, batch_size=32)
- X_train是一个(4132,30,5)的三维数组;(样本数,时间步长,特征数)
- Y_train是一个(4132,1)的二维数组;(样本数,标签)
- 类似一个4132行(305+1)列的表格,前(305)列是特征,第(30*5+1)列是标签
三、小结
由于滑动窗口,实际的训练数据数量少一个窗口数量,实际能预测的数据量也少一个窗口数量。
热门推荐
强行将鸿蒙系统安装在安卓手机上的问题及硬件兼容性探讨
洗发水是用“无硅油”的还是“有硅油”的?哪一种对头发好?
斗宿(斗木獬):二十八宿中的北方玄武之首
生命的意义到底是什么?为什么生命一定会死亡而不能永生?
机动车制动有哪些方法?
高尿酸血症营养和运动指导原则(2024年版)附数百种食物嘌呤含量表
罐头产品在商标分类中属于哪一类?
水果罐头属于生鲜吗
宝宝夜里闹不停,原来是得了小儿湿疹!医生提醒→
乔丹35亿美元居首,科比11.5亿,詹姆斯12亿:NBA三大传奇财富榜
乔丹总资产35亿美元,那科比詹姆斯呢?没有对比就没有尴尬
家庭协议是什么?如何制定一份有效的家庭协议?
美国FDA对罐头食品的认证和安全标准是什么?
欠钱不还怎么办?四种法律途径帮你追回欠款
孩子呕吐后多久能喝水?专家建议来了
重庆巫山游景点大全,探索山城秘境,体验自然奇观
梦见白龙是什么意思,好不好
充电器长期不拔引发爆炸?看完马上想回家拔插头
清(川江)长(津湖)战役为什么胜利?靠的是人民军队的传统战法
可控核聚变新里程碑,AI首次实现双托卡马克3D场全自动优化,登Nature子刊
2025年北京市通州区私立高中排名必看榜,按学费排名,内含树人、中加学校!
五行缺土的卧室风水摆件适合放哪些
个人所得税退税全流程指南:4步完成退税申请
《云边有个小卖部》:一部关于故乡、亲情与梦想的暖心之作
高院再审改判率分析:司法公正的体现与挑战
LED灯价格差异大的原因分析
2025黄委会事业编考试内容整理,别错过报名!
书荒必读,量大且口碑绝佳的小说22本,有玄幻、科幻、历史、都市
《云边有个小卖部》:寻求人性温暖,治愈但莫要煽情
龈下刮治要做几次?轻度/中度/重度不同程度的牙周情况治疗次数不同