LSTM验证

问题描述 投票:1回答:1

我有一个100k行的数据集,它是商店项目编号对(例如(商店1,项目190)),300列,这是一系列日期(例如2017-01-01,2017-01 -02,2017-01-03 ......)价值是销售额。

我尝试使用LSTM keras来预测未来的销售,我该如何构建我的火车和验证数据集?

我想像data[:, :n_days]data[:, n_days:]那样分割火车和验证。所以我的列车和验证数据集中都有相同数量的样本(100k)。我认为这不对吗?

如果是这样的话,如果列车和验证数据集的尺寸完全相同,我应该如何定义n_days? (例如,n_days = 150,19天用于预测1天)。

python validation time-series keras lstm
1个回答
2
投票

如何构建我的火车和验证数据集?

不确定是否有经验法则,但通常的方法是将数据集拆分为~80%的训练集和~20%的验证集;在你的情况下,这将是大约80k和20k。实际百分比可能会有所不同,但该比率是大多数消息来源推荐的比例。理想情况下,您还需要一个测试数据集,一个您在培训或验证期间从未使用过的测试数据集,以评估模型的最终性能。

现在,关于数据的形状,重要的是要回忆一下复述层上的keras docs所说的内容:

输入形状

具有形状的3D张量(batch_size,timesteps,input_dim)。

定义此形状取决于问题的性质。你提到你想要预测销售额,所以这可以被称为回归问题。您还提到您的数据由构成您的时间序列的300列组成,当然您拥有每个行的实际销售价值。

在这种情况下,使用批量大小为1,您的形状似乎是(1,300,1)。这意味着您正在训练1个元素的批次(最彻底的渐变更新),其中每个时间步骤有300个时间步长和1个特征或维度。

为了分割您的数据,您可以使用以前帮助我的一个选项来自train_test_splitSklearn方法,您只需传递数据和标签并指出您想要的比率:

from sklearn.cross_validation import train_test_split
#Split your data to have 15% validation split
X, X_val, Y, Y_val = train_test_split(data, labels, test_size=0.15)
© www.soinside.com 2019 - 2024. All rights reserved.