【问题标题】:Panel data in Keras LSTMKeras LSTM 中的面板数据
【发布时间】:2017-07-30 09:38:25
【问题描述】:

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

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

其中x^{(k)} 表示k'th 序列,x^{(k)}_{t} 表示k'th 序列值t,此外x^{(k)}_{i,t} 是向量@ 中的i'th 条目987654332@。即x^{(k)}_{t}k'th 序列在时间t 的特征向量。对于标签数据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 有处理面板数据的经验?

【问题讨论】:

  • 数学模式似乎不起作用,我按照本教程进行操作:meta.math.stackexchange.com/questions/5020/…
  • 我想知道您是否仍在使用 stackoverflow,是否介意发布您的数据和完整模型?我正在尝试为面板学习 keras,我的数据与您的相似,但面板 keras 示例并不多。
  • 嗨,John,很遗憾,我无法再访问数据或模型了。

标签: neural-network keras lstm panel-data


【解决方案1】:

试试:

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 个吗?
【解决方案2】:

看起来唯一的选择是在数据不平衡时分别为每个人(这里是一个序列)运行 lstm,因为我认为这是因为时间取决于您问题中的 k。

【讨论】:

    猜你喜欢
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 2019-11-10
    相关资源
    最近更新 更多