我试图理解如何正确地将数据输入到我的keras模型中,以便使用LSTM神经网络将多变量时间序列数据分为三类。
我已经看了不同的资源——主要是杰森·布朗利的这三篇优秀的博客文章,其他的SO问题和不同的论文,但是没有一个信息完全符合我的问题案例,我也不知道我的问题是否数据预处理/将其输入模型是正确的,所以我想如果我在这里指定我的确切条件,我可能会得到一些帮助。
我试图对多元时间序列数据进行分类,其原始形式的结构如下:
>
我有200个样品
一个示例是一个csv文件。
一个示例可以有1到50个功能(即csv文件有1到50列)。
每个功能都在固定的时间步长内“跟踪”其值,比如说100(即每个csv文件正好有100行)。
每个csv文件有三个类(“好”、“太小”、“太大”)中的一个
因此,我目前的状态如下所示:
我有一个numpy数组“samples”,其结构如下:
# array holding all samples
[
# sample 1
[
# feature 1 of sample 1
[ 0.1, 0.2, 0.3, 0.2, 0.3, 0.1, 0.2, 0.4, 0.5, 0.1, ... ], # "time series" of feature 1
# feature 2 of sample 1
[ 0.5, 0.6, 0.7, 0.6, 0.4, 0.3, 0.2, 0.1, -0.1, -0.2, ... ], # "time series" of feature 2
... # up to 50 features
],
# sample 2
[
# feature 1 of sample 2
[ 0.1, 0.2, 0.3, 0.2, 0.3, 0.1, 0.2, 0.4, 0.5, 0.1, ... ], # "time series" of feature 1
# feature 2 of sample 2
[ 0.5, 0.6, 0.7, 0.6, 0.4, 0.3, 0.2, 0.1, -0.1, -0.2, ... ], # "time series" of feature 2
... # up to 50 features
],
... # up to sample no. 200
]
我也有一个Numpy数组标签与相同长度的样本数组(即。200)。标签的编码方式如下:
[0, 2, 2, 1, 0, 1, 2, 0, 0, 0, 1, 2, ... ] # up to label no. 200
然后使用keras'to_category
函数对该“标签”数组进行编码
to_categorical(labels, len(np.unique(labels)))
我的模型定义目前看起来是这样的:
max_nb_features = 50
nb_time_steps = 100
model = Sequential()
model.add(LSTM(5, input_shape=(max_nb_features, nb_time_steps)))
model.add(Dense(3, activation='softmax'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
然后,我将数据拆分为培训/测试数据:
samples_train, samples_test, labels_train, labels_test = train_test_split(samples, labels, test_size=0.33)
这样我们就有134个样本用于培训,66个样本用于测试。
我目前遇到的问题是,以下代码不起作用:
model.fit(samples_train, labels_train, epochs=1, batch_size=1)
错误如下:
Traceback (most recent call last):
File "lstm_test.py", line 152, in <module>
model.fit(samples_train, labels_train, epochs=1, batch_size=1)
File "C:\Program Files\Python36\lib\site-packages\keras\models.py", line 1002, in fit
validation_steps=validation_steps)
File "C:\Program Files\Python36\lib\site-packages\keras\engine\training.py", line 1630, in fit
batch_size=batch_size)
File "C:\Program Files\Python36\lib\site-packages\keras\engine\training.py", line 1476, in _standardize_user_data
exception_prefix='input')
File "C:\Program Files\Python36\lib\site-packages\keras\engine\training.py", line 113, in _standardize_input_data
'with shape ' + str(data_shape))
ValueError: Error when checking input: expected lstm_1_input to have 3 dimensions, but got array with shape (134, 1)
对我来说,它似乎不起作用,因为我的样本可能具有可变数量的特性。如果我使用“假”(生成的)数据,其中所有参数都是相同的,除了每个样本具有完全相同数量的特征(50),那么代码可以工作。
现在我试图理解的是:
batch\u size
,input\u shape
)是否正确/合理?LSTM模型需要[样本、时间步长、特征]形式的3D输入
在定义LSTM模型的第一层时,我们只需要指定时间步骤和特征。尽管这可能看起来是2D的,但实际上是3D的,因为样品大小(即批量大小)是在模型拟合时指定的。
features = x_train_d.shape[1]
因此,我们首先需要以3D格式重塑输入:
x_train_d = np.reshape(x_train_d, (x_train_d.shape[0], 1, x_train_d.shape[1]))
下面是LSTM第一层:
model.add(LSTM(5,input_shape=(1, features),activation='relu'))
模型拟合指定样本数为LSTM预期的50
model.fit(x_train_d,y_train_d.values,batch_size=50,epochs=100)
对于使用可变长度输入提出的问题,在https://datascience.stackexchange.com/questions/26366/training-an-rnn-with-examples-of-different-lengths-in-keras
我认为KERA的输入形状应为:
输入形状=(样本数、时间步数、最大特征数)。
通常,nb_时间_步数=1
附言:我试图解决一个非常相似的实习职位问题(但我的结果是错误的)。你可以看看这里:https://github.com/AbbasHub/Deep_Learning_LSTM/blob/master/2018-09-22_Multivariate_LSTM.ipynb(看看你是否能发现我的错误!)
我是时间序列的新手,需要学科专家的帮助。所以我有一个有11个变量的实验室数据,报告了时间。10个变量是可控的,第11个变量是输出。我用LSTM预测了第11个变量的时间序列。结果比预期好得多。第11个变量预测为0.001 RMSE。训练数据有5000个样本,测试数据有4599个。我对预测很满意。现在我需要分析输入10个变量是如何影响第11个输出变量的。请建议一个好的库,类似问题的教程。
我正在阅读Keras中关于使用LSTM进行多元时间序列预测的教程https://machinelearningmastery.com/multivariate-time-series-forecasting-lstms-keras/#comment-442845 我已经看完了整个教程,遇到了一个如下的问题- 在本教程中,在步骤“t-1”中,列车和测试拆分有8个功能,即“污染”、“露水”、“温度”、
我有一个包含一整年数据的时间序列数据集(日期是索引)。数据每15分钟测量一次(全年),结果是每天96个时间步。数据已规范化。这些变量是相关的。除VAR外的所有变量都是天气度量值。 VAR在一天期间和一周期间都是季节性的(因为它在周末看起来有点不同,但每个周末都不一样)。VAR值是固定的。我想预测未来两天(前192步)和未来七天(前672步)的VAR值。 以下是数据集的示例: 下面是我准备train
我试图使用Keras对多个变量进行同时预测。在这里使用这个例子,我想预测所有特征的值,包括pm 2.5,DEWP,TEMP等,而不仅仅是污染(pm 2.5)。本质上,这是,给定所有变量,建立一个模型来预测所有变量作为时间序列,而不仅仅是预测一个变量。 我使用重塑后的3D数据修改了原始示例代码,但出现了一个错误。代码如下: 输出为: 数据集在这里可用。 我的问题是: Keras LSTM层不是为此设
我试图使用LSTM对多元数据进行时间序列预测。我有50000个15维的样品。我想用10的回顾。输入到LSTM层的形状是什么。会吗 或 我正在使用Keras。
我的任务是使用MATLAB和任何神经网络框架对时间序列数据进行分类。 更具体地描述任务:是计算机视觉领域的一个问题。Is是一项场景边界检测任务。 源数据是来自视频流的4个相邻帧直方图相关阵列。基于此数据,我们必须将此时间序列分为两类: “场景中断” “没有场景中断” 因此,每个源数据输入的网络输入是4个双倍值,输出是一个二进制值。我将在下面展示src数据的示例: 问题是,来自Matlab神经工具箱