Keras LSTM 中的面板数据

Panel data in Keras LSTM

我正在查看面板数据,其结构如下:

D = \{(x^{(k)}_{t},y^{(k)}_{t})\,|\, k=1,\dots,N\, , t=t_0,\dots,t_k \}_{k=1}^{N}

其中 x^{(k)} 表示第 k 个序列,x^{(k)}_{t} 表示时间 t 的第 k 个序列值,此外 x^{(k)}_{i,t} 是向量 x^{(k)}_{t} 中的第 i 个条目。即x^{(k)}_{t}是第k个序列在t时刻的特征向量。 sub- 和 super 脚本对于标签数据 y^{(k)}_{t} 的含义相同,但这里 y^{(k)}_{t} \in \{0,1\}.

说白了就是:数据集包含了随着时间的推移观察到的个体,对于观察到个体的每个时间点,记录他是否购买了物品(y\in \{0,1\})。

我想使用来自 Keras 的循环神经网络和 LSTM 单元来预测一个人是否会在给定时间点购买商品。我只能找到每个序列都有一个标签值 (philipperemy link) 的 RNN 示例,而不是我描述的问题中每个序列元素都有一个标签值的示例。

到目前为止,我的方法是创建一个具有维度(样本、时间步长、特征)的张量,但我不知道如何格式化标签,以便 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 中使用面板数据的经验?

尝试:

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')

看起来唯一的选择是 运行 当数据不平衡时,每个人的 lstm 分别(这里是一个序列),正如我假设的那样,因为时间取决于你问题中的 k。