Keras LSTM 中的面板数据

Mat*_*_kv 6 neural-network panel-data lstm keras

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

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} 表示时间 的第 k' 个序列值 t,此外 x^{(k)}_{i,t}i向量中的第 ' 个条目x^{(k)}_{t}。即时间 'th 序列x^{(k)}_{t}的特征向量。子脚本和超级脚本对于标签数据的含义相同,但此处为.kty^{(k)}_{t}y^{(k)}_{t} \in \{0,1\}

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

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

到目前为止,我的方法是创建一个具有维度(样本、时间步长、特征)的张量,但我无法弄清楚如何格式化标签,以便keras将它们与特征相匹配。它应该是这样的 (samples,timesteps,1),其中最后一个维度表示包含标签值 0 或 1 的单个维度。

此外,我遇到的一些方法是拆分序列,以便将子序列添加到训练数据中,从而极大地增加了对内存的需求(mlmastery 链接)。这在我的情况下是不可行的,因为我有多个 GB 的数据,如果我添加子序列,我将无法将它存储在内存中。

我想使用的模型是这样的:

mod = Sequential()
mod.add(LSTM(30,input_dim=116, return_sequences = True))
mod.add(LSTM(10))
mod.add(Dense(2))
Run Code Online (Sandbox Code Playgroud)

有没有人有处理面板数据的经验keras

Mar*_*jko 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')
Run Code Online (Sandbox Code Playgroud)