python - 如何表示 LSTM 的数据?
问题描述
我有序列数据,可以告诉我在不同时间点观察到多个受试者的颜色。例如:
ID | 时间 | 颜色 |
---|---|---|
一个 | 1 | 蓝色的 |
一个 | 2 | 红色的 |
一个 | 5 | 红色的 |
乙 | 3 | 蓝色的 |
乙 | 6 | 绿色的 |
C | 1 | 红色的 |
C | 3 | 橙子 |
我想获得对接下来 3 个时间步的最可能颜色的预测,以及该颜色出现的概率。例如,对于 ID A,我想知道序列中接下来的 3 个项目(时间、颜色)以及它出现颜色的概率。
我知道 LSTM 通常用于预测这种类型的顺序数据,并且我会输入一个 3d 数组,例如
input =[
[[1,1], [2,2], [5,2]], #blue at t=1, red at t=2, red at t=5 for ID A
[[0,0], [3,1], [6,3]], #nothing for first entry, blue at t=3, green at t=6 for ID B
[[0,0], [1,2], [3,4]]
]
将颜色映射到数字后(蓝色-> 1、红色-> 2、绿色-> 3、橙色-> 4 等)。我的理解是,默认情况下,LSTM 只是预测每个序列中的下一个项目,例如
output = [
[[7, 2]], #next item is most likely red at t=7
[[9, 3]], # next item is most likely red at t=9
[[6, 2]]
]
是否可以修改我的 LSTM 的输出,以便不仅预测下一次出现时间和颜色,还可以获得接下来的 3 次颜色和颜色出现的概率?例如,像这样的输出
output = [
[[7, 2, 0.93], [8,2, 0.79], [10,4, 0.67]],
[[9, 2, 0.88], [11,3, 0.70], [14,3, 0.43]],
...
]
我试过查看Sequential
Keras 的文档,但我不确定是否找到任何东西。
此外,我看到有一个 TrainX 和 TrainY 通常用于,model.fit()
但我也不确定我的 TrainY 会在这里做什么?
解决方案
LSTM 只是预测每个序列中的下一个项目......
并非如此,LSTM 只是帮助编码顺序数据的一层。决定模型要“预测”什么的是下游任务(密集层和输出层)。
虽然您可以训练基于 LSTM 的模型来预测序列中的下一个值(通过巧妙地将最后一个时间戳作为回归目标 y),但理想情况下,您希望使用基于 LSTM 的编码器-解码器架构从输入中正确生成序列序列。
这与用于生成文本的语言模型或用于将英语翻译成法语的机器翻译模型的架构相同。
你可以在这里找到一个很好的教程来实现这个。该模型的优势在于,您现在可以根据需要选择解码任意数量的时间步长。因此,对于您的情况,您可以向编码器输入一个填充的、固定长度的颜色序列,并解码 3 个时间步。
从数据准备的角度来看,您必须获取每个颜色序列,删除最后 3 种颜色作为 y,并将其余颜色填充到固定长度
sample = [R, G, B, B, R, G, R, R, B]
X = [<start>, 0, 0, 0, 0, 0, R, G, B, B, R, G, <end>] #Padded input sequence
y = [<start>, R, R, B, <end>] #Y sequence
您将在上面的链接中找到必要的预处理、训练和推理步骤。
推荐阅读
- apache-kafka - Kafka Stream KTable 延迟
- django - Django 中的 PostgreSQL 文本搜索未按预期工作
- javascript - 如何防止在标签上自动执行 onclick 事件?
- email - 未从 AWS SES 接收邮件
- javascript - 如何在javascript中的函数中传递不同数量的变量
- python - 使用 OneHotEncoder 编码
- android-studio - 如何为注释行应用缩进设置(IntelliJ IDEA / Android Studio)
- amazon-web-services - aws 数据迁移服务未选择任何源表
- c++ - 初始化任何联合成员(指定初始化器)
- android - 如何仅显示 listview.builder 的选定索引的显示进度/进度指示器?