在 LSTM 中包含分类特征和序列以进行序列预测的最佳实践?

Posted

技术标签:

【中文标题】在 LSTM 中包含分类特征和序列以进行序列预测的最佳实践?【英文标题】:Best practice to include categorical features along with sequences in LSTM for sequence prediction? 【发布时间】:2021-01-14 21:52:18 【问题描述】:

我有一个数据集,其中包含与每个序列相关的序列和分类属性。

为了捕捉不同属性之间的序列变化,包含这些分类属性的最佳做法是什么?

一个例子 df

 Sequence      |   Country   |   User  |
[A,B,D,E,F]          USA          U1
[B,C,D,E]            DE           U123
[A,B,F,E,G,H]        USA          U2456
  ...                ...          ....

我想建立一个能够预测序列中下一个事件的 LSTM 模型。

如果我只将序列作为输入,我知道如何构建 LSTM 模型。

但是我怎样才能同时添加属性 Country 和 User 呢?

如果我对序列数据应用一种热编码,我应该将一种热编码的特征向量连接到它吗?

或者这里还有其他最佳做法吗?

【问题讨论】:

【参考方案1】:

您可以使用functional model API 并连接分类特征

例如,你有国家作为分类特征,你可以concatenate它使用lstm特征作为Concatenate()([lstm, country])

from keras.models import Model
from tensorflow.keraslayers import Input,Concatenate,Dense,Activation

sequence= Input(shape=(seq_length,), name='sequence')
lstm = LSTM(300, dropout=0.3, recurrent_dropout=0.3)(sequence)
country   = Input(shape=(1,))
conc = Concatenate()([lstm, country])
dense_layer = Dense(1)(conc)
x_out= Activation('sigmoid')(dense_layer )
model = Model([sequence, country], x_out)
model.compile(loss='binary_crossentropy', optimizer='adam', metrics['accuracy'])

为了适应模型,假设您已经在sequence 中重新塑造并准备了序列列,并在country 中准备了其他特征(国家)

 model.fit([sequence,country], y_train)

【讨论】:

您好,感谢您提供此代码 sn-p,我将如何在此处调用 fit 函数以提供两个不同的输入? 谢谢,Concatenate() 行似乎不起作用,但是,如果我改为使用“concatenate”函数,它似乎可以工作。从 keras.layers 导入连接,conc = concatenate([lstm,country])。与您提供的链接中的示例类似。 你能试试这个Concatenate()([lstm, country]),让我知道这是否有效吗?我还包括了进口 我自己从事事件预测工作,目前还使用 LSTM。 对我来说,正常和经常性的辍学并没有多大作用。尽管验证错误上升(直到某个点),但我看到验证准确性有所提高,所以让它上升一段时间,看看你是否也是这种情况。我的意思是让你的早期停止耐心值有点大。 (顺便说一句,尝试 0.05-0.3)

以上是关于在 LSTM 中包含分类特征和序列以进行序列预测的最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章

LSTM回归预测基于matlab LSTM神经网络回归预测含Matlab源码 2227期

LSTM时间序列预测基于matlab深度学习的长短期记忆网络LSTM时间序列预测未来含Matlab源码 2345期

在 keras 中使用 CNN-LSTM 模型进行序列到序列分类

风电功率预测基于matlab EMD优化LSTM风电功率预测含Matlab源码 1402期

使用 LSTM 和 keras 进行时间序列预测的分类变量

基于注意力机制的CNN-LSTM模型及其应用(含软硬注意力区别)