一文搞明白时序数据输入到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)列是标签
三、小结
由于滑动窗口,实际的训练数据数量少一个窗口数量,实际能预测的数据量也少一个窗口数量。
热门推荐
昆明米线产业转型升级:标准化引领,创新赋能
昆明小锅米线必打卡配料全攻略!
昆明过桥米线:从历史到网红
篆新农贸市场豆花米线:昆明必打卡网红美食!
西安,可能又又又挖出全国最多的古墓……
云南自驾小众旅游线路攻略
张嘴耳朵响?医生教你远离TMD
颞下颌关节紊乱:张嘴耳朵响怎么办?
我们离AGI有多远?UIUC最新120页论文阐述AGI定义、目标和发展轨迹
秋天打卡婺源篁岭,五桂堂观景台必拍!
婺源篁岭秋景赏枫,摄影爱好者的天堂
篁岭晒秋:徽派文化的最美符号
科技赋能保险客服:从AI交互到大数据应用的创新革命
银保监会发布风险提示:警惕保险销售误导,这些套路要当心!
鸿宴饭庄:一道肘子见证唐山百年变迁
保险合同里的那些坑,你真的懂吗?
双十一保险理财大比拼:如何护航家庭财富?
唐山鸿宴肘子:舌尖上的非遗美味
头痛是什么原因
澳大利亚15处必看自然景点:从大堡礁到粉红湖
特斯拉裁员潮:成本控制与未来发展的平衡之道
企业破产重整下的裁员真相揭秘
被裁后如何快速重建信心?听听“IT赶路人”的建议
世卫组织推荐:地中海饮食助力控制LDL胆固醇
七叶皂苷钠联合疗法:颈椎病治疗的新突破
七叶皂苷钠片:消肿止痛的临床应用与使用体验
七叶皂苷钠片:骨科患者的福音?
岳阳楼人像摄影指南:文艺范儿拍法大揭秘!
掌握黄金分割和三分法,拍出惊艳风景人像!
开平碉楼&凤凰古城:国内最佳风景人像摄影地推荐!