python - 输入到 LSTM 的时间序列
问题描述
我有包含从不同位置收集的水样的数据集。例如,ABC1 水样取自亚利桑那州的一条河流,而 ABC2 水样取自波士顿的一条河流。它们都是河流,它们具有相同的特征列(pH、温度等),但它们位于不同的位置,因此特征的变化对它们来说是个体的。所以我的目标是创建一个河流模型,因为我没有足够的数据来创建单个模型。我想预测下个月的值总共有 11 列。我的数据集如下所示:
Date Sample_Name pH temp etc...
2009-01-01 ABC1 7.2 12
2009-01-02 ABC2 5.5 11
.
.
2009-01-02 ABC1 7.2 10
2009-01-02 ABC2 7.3 10
.
.
2013-06-02 ABC2 6.5 22
2013-06-04 ABC1 6.5 22
.
2015-01-05 ABC1 8.9 13
2015-01-05 ABC4 8.8 13
我想将每个样本及其序列提供给 LSTM 模型。例如; ABC1 的每个测量(行)都必须作为序列或批次提供给模型。是否可以使用 TimeseriesGenerator 进行这种数据准备?如前所述,我如何准备数据以将其提供给模型?使用日期和样本名称(按字母顺序)对数据集进行排序是否也有帮助?我正在努力实现这样的目标
我想使用以下方法生成数据:
from keras.preprocessing.sequence import TimeseriesGenerator
n_timesteps = 2
n_features = 10
batch_size = 5
generator = TimeseriesGenerator(df, df, length, sampling_rate = 10, stride = 1, batch_size = batch_size)
我想输入数据的简单 LSTM 模型:
from keras.models import Sequential
from keras.layers import LSTM, Dense
from keras.utils import Sequence
model = Sequential()
model.add(LSTM(n_features, activation='relu', input_shape=(n_timesteps, n_features)))
model.add(Dense(10))
model.compile(optimizer='adam', loss='mse', metrics = ['accuracy'])
解决方案
查看文档,tf.keras.preprocessing.sequence.TimeseriesGenerator 不能将字典作为第一个参数。“切片”错误只是该事实的一种表现,因为函数尝试使用第一个参数(dict)的切片并失败。再次来自文档:
参数: data:包含连续数据点(时间步长)的可索引生成器(例如列表或 Numpy 数组)。
所以也许你想通过input_dict['ABC1']
或者可能input_dict['ABC1'].values
推荐阅读
- python - split() 将哪些字符视为空格?
- javascript - if 语句给出相同的输出 如果输入框中有值,则 IF 的第一部分有效,它不会显示正确的消息
- java - 使用@beforeeach 设置一次测试代码
- javascript - 如何将变量传递给多层组件?前任。传递到 productCard 页面,然后传递到产品页面以显示所有卡片
- python - 按键后Python退出代码执行
- python - TypeError:禁止直接分配到相关集合的反面
- python - 您如何计算函数返回特定值的次数?
- javascript - 如何使用 axios vuejs 处理异步函数
- puppeteer - 会话和并发以及它们之间的关系
- charts - 在 Jasper 报告中插入轴标签