Keras LSTM 中的面板数据
Panel data in Keras LSTM
我正在查看面板数据,其结构如下:
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}
表示时间 t
的第 k
个序列值,此外 x^{(k)}_{i,t}
是向量 x^{(k)}_{t}
中的第 i
个条目。即x^{(k)}_{t}
是第k
个序列在t
时刻的特征向量。 sub- 和 super 脚本对于标签数据 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
中使用面板数据的经验?
尝试:
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')
看起来唯一的选择是 运行 当数据不平衡时,每个人的 lstm 分别(这里是一个序列),正如我假设的那样,因为时间取决于你问题中的 k。
我正在查看面板数据,其结构如下:
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}
表示时间 t
的第 k
个序列值,此外 x^{(k)}_{i,t}
是向量 x^{(k)}_{t}
中的第 i
个条目。即x^{(k)}_{t}
是第k
个序列在t
时刻的特征向量。 sub- 和 super 脚本对于标签数据 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
中使用面板数据的经验?
尝试:
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')
看起来唯一的选择是 运行 当数据不平衡时,每个人的 lstm 分别(这里是一个序列),正如我假设的那样,因为时间取决于你问题中的 k。