我有一个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天)。
如何构建我的火车和验证数据集?
不确定是否有经验法则,但通常的方法是将数据集拆分为~80%的训练集和~20%的验证集;在你的情况下,这将是大约80k和20k。实际百分比可能会有所不同,但该比率是大多数消息来源推荐的比例。理想情况下,您还需要一个测试数据集,一个您在培训或验证期间从未使用过的测试数据集,以评估模型的最终性能。
现在,关于数据的形状,重要的是要回忆一下复述层上的keras docs所说的内容:
输入形状
具有形状的3D张量(batch_size,timesteps,input_dim)。
定义此形状取决于问题的性质。你提到你想要预测销售额,所以这可以被称为回归问题。您还提到您的数据由构成您的时间序列的300列组成,当然您拥有每个行的实际销售价值。
在这种情况下,使用批量大小为1,您的形状似乎是(1,300,1)。这意味着您正在训练1个元素的批次(最彻底的渐变更新),其中每个时间步骤有300个时间步长和1个特征或维度。
为了分割您的数据,您可以使用以前帮助我的一个选项来自train_test_split
的Sklearn方法,您只需传递数据和标签并指出您想要的比率:
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)