2017-03-09 65 views
3

我在看面板数据,其被构造是这样的:面板数据

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}是载体x^{(k)}_{t}中的i'th条目。那就是x^{(k)}_{t}是'th序列在时间t的特征向量。子脚本和超级脚本对于标签数据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

数学计算模式似乎不工作,我跟着这个教程:http://meta.math.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference –

回答

3

尝试:

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

使用面板数据的批量大小有什么关系?批量大小可以超过1个人吗? – gannawag