如何在多个时间序列数据上训练 LSTM 模型?
用例:过去 5 年,我每周销售 20,000 名代理。需要为每个代理预测即将到来的每周销售量。
我是否需要遵循批处理技术 - 一次使用一个代理,训练 LSTM 模型然后进行预测?还有更好的方法吗?
如何在多个时间序列数据上训练 LSTM 模型?
用例:过去 5 年,我每周销售 20,000 名代理。需要为每个代理预测即将到来的每周销售量。
我是否需要遵循批处理技术 - 一次使用一个代理,训练 LSTM 模型然后进行预测?还有更好的方法吗?
将代理的身份作为特征之一,并在所有数据上进行训练。可能一次训练一个小批量(例如 128 个代理):从头到尾运行这 128 个代理的时间序列,然后选择一个新的小批量代理。对于每个小批量,运行 50 个时间步的切片,然后进行反向传播。保留该切片的结束状态,并从这些结束状态开始运行接下来的 50 个时间步。对于大约 128 个代理的小批量,冲洗并重复直到时间步长结束。
通过将每个代理的身份作为特征之一,您可以使网络:
编辑:阿尔波·何塞写道:
好的,我需要使用 one-hot 编码来制作代理的身份吗?
哦,那是真的。其中有 20,000 个。这有点多。我认为您可能想要做的是“嵌入”它们。有一个查找层,它接受一个代理 id(表示为一个整数,一个索引),并输出一个高维向量,比如一个 50-300 长度的向量,可能是一个长度与隐藏大小近似匹配的向量你的 LSTM。
从数学上讲,查找表,也称为“嵌入层”,相当于将代理 id 制成单热向量,然后通过线性(全连接)层。然而,嵌入层的内存需求大大降低。
就嵌入层将学习什么而言,当你训练它时,嵌入层将形成每个代理的某种潜在表示。潜在表示不太可能以任何方式可读/可解释,但将允许模型学习诸如“好吧,这个代理,1524,相对有效,但不是在周末;而1526每天都很棒;ETC ....'。嵌入向量的潜在维度实际上可能意味着一些东西,但没有人试图弄清楚它们的含义(我认为这很难/不可能)。然而,每个代理的高维嵌入允许模型了解每个代理的行为,并在时间序列预测中对此进行建模。