我有数据序列,想用LSTM预测下一个时间步长(评分!)。原始数据看起来像这样(示例)。
Name Age School Rating
John 9 West 1
John 10 West 2
John 11 West 1
John 12 West 3
Name Age School Rating
Sally 15 West 2
Sally 16 West 1
Sally 17 West 1
现在有几件事要提及。
1.序列可以具有不同的长度
2.就上下文(年龄)而言,样本可能处于不同的时间步
3.时间步长可能在前面,中间和末尾丢失。
到目前为止,我的解决方案。
1.我使用DictVectorizer
将类别特征转换为数字特征
2.我使用的是LSTM
模型(keras),batch_size = 13
3.我手动填充条目以创建长度为13的序列
示例:
Name Age School Rating
Sally 6 None 0
Sally 7 None 0
Sally 8 None 0
Sally 9 None 0
Sally 10 None 0
Sally 11 None 0
Sally 12 None 0
Sally 13 None 0
Sally 14 None 0
Sally 15 West 2
Sally 16 West 1
Sally 17 West 1
Sally 18 None 0
现在,当我将填充值输入LSTM时,我当然想跳过它。我想使用遮罩层。但是我不能给masking层一个masking_values,因为我的矢量化分类数据中有几个1和0。等级是我的Y值。我想给遮罩层一个特征School=None
的索引,如果它显示1
,则应该跳过时间步长。
这是我的模型设置:
model = Sequential()
model.add(Masking(mask_value=0, batch_input_shape=(24, 1, 1471)))
model.add(LSTM(4, input_shape=(None,1471), return_sequences=False, stateful=True))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')