2017-03-09 73 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