Keras LSTM中的面板数据

6
我正在研究面板数据,其结构如下:
D = {(x^{(k)}_{t},y^{(k)}_{t}) | k=1,...,N, t=t_0,...,t_k}_{k=1}^{N}
其中,x^{(k)}表示第k个序列,x^{(k)}_{t}表示第k个序列在时间t的值,此外,x^{(k)}_{i,t}是向量x^{(k)}_{t}中的第i个条目。也就是说,x^{(k)}_{t}是时间t时第k个序列的特征向量。子脚本和上标对于标签数据y^{(k)}_{t}也有相同的含义,但这里y^{(k)}_{t}∈{0,1}。
简而言之:数据集包含随时间观察到的个体,对于每个观察时间点记录了他是否购买物品(y∈{0,1})。
我想使用Keras中带有LSTM单元的循环神经网络来预测在给定时间点一个人是否会购买物品。我只能找到每个序列都有标签值的RNN示例(philipperemy link),而没有像我描述的问题中每个序列元素都有标签值的示例。
到目前为止,我的方法是创建一个具有维度(samples,timesteps,features)的张量,但我无法弄清楚如何格式化标签,以便keras可以将其与特征匹配。它应该是这样的(samples,timesteps,1),其中最后一个维度表示一个单一的维度,包含标签值0或1。
此外,我遇到的一些方法将序列拆分为子序列并添加到训练数据中,从而极大地增加了内存需求(mlmastery link)。在我的情况下,这是不可行的,因为我有多个GB的数据,如果添加子序列,我将无法在内存中存储它。
我想使用的模型类似于这样:
mod = Sequential()
mod.add(LSTM(30,input_dim=116, return_sequences = True))
mod.add(LSTM(10))
mod.add(Dense(2))

有人在keras中使用面板数据的经验吗?


1
数学模式似乎无法正常工作,我遵循了这个教程:http://meta.math.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference - Math_kv
我想知道您是否仍然在stackoverflow上,如果您不介意的话,能否发布您的数据和完整模型?我正在尝试学习用于面板的keras,我的数据与您的相似,但是关于面板keras示例的内容并不多。 - John Stud
嗨John,不幸的是我再也没有访问数据或模型的权限了。 - Math_kv
2个回答

5

尝试:

mod = Sequential()
mod.add(LSTM(30, input_shape=(timesteps, features), return_sequences = True))
mod.add(LSTM(10, return_sequences = True))
mod.add(TimeDistributed(Dense(1, activation='sigmoid')))
# In newest Keras version you can change the line above to mod.add(Dense(1, ..))

mod.compile(loss='binary_crossentropy', optimizer='rmsprop')

1
批量大小对面板数据有影响吗?批量大小可以超过1个个体吗? - gannawag

0

看起来唯一的选择是在数据不平衡时为每个个体(这里是一个序列)单独运行lstm,因为我假设你的问题中时间取决于k。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接