我正在查看面板数据,其结构如下:
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}
个条目。即x^{(k)}_{t}
是时间k
处t
&#39序列的特征向量。子脚本和超级脚本对于标签数据y^{(k)}_{t}
意味着相同的事情,但这里y^{(k)}_{t} \in \{0,1\}
。
简单来说:数据集包含随时间观察的个体,并且对于观察个体的每个时间点,记录他是否购买了一个项目(y\in \{0,1\}
)。
我想使用来自Keras的LSTM单元的循环神经网络,用于预测某人是否会在给定时间点购买物品。我只能找到RNN的例子,其中每个序列都有一个标签值(philipperemy link),而不是每个序列元素都有标签值的例子,如我所描述的问题。
到目前为止,我的方法是创建一个尺寸(样本,时间步长,特征)的张量,但我无法弄清楚如何格式化标签,这样keras
可以将它们与特征相匹配。它应该是这样的(样本,时间步长,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
中的面板数据的经验?
答案 0 :(得分:4)
尝试:
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 :(得分:0)
看起来唯一的选择是在数据不平衡时分别为每个人(这里是一个序列)运行lstm,因为我假设这是因为时间取决于你问题中的k。