如何使用神经网络对分类数据集进行时间序列分析

时间:2019-07-09 07:23:55

标签: keras neural-network time-series conv-neural-network forecasting

我有一个包含2列日期和状态(36个唯一值)的数据集。我想在此数据集上使用神经网络进行时间序列分析(建议使用keras)。我在互联网上进行了很多搜索,但是我得到了数值数据的答案。请有人帮助我如何继续使用此数据集。

2 个答案:

答案 0 :(得分:0)

您的解决方案是否需要卷积神经网络?否则,您可以使用LSTM,这在时间序列分析中很常见。您可以在keras中找到有关LSTM网络的一些示例:

  1. First
  2. Second
  3. Third

答案 1 :(得分:0)

好的,我尝试回答。我假设您已经安装了tensorflow。您提到自己具有这种格式的数据

date          state
01.01.2018    state1
02.01.2018    state2
....

您要执行时间序列预测。我猜您不需要将日期列输入网络。因此,您的基本设置是,将n个状态作为输入,并期望模型进行预测。您写对了,您需要以某种方式对分类变量进行编码。您选择单热编码。建议您查看thisthis。但是现在我们假设您使用的是单编码。

假设您的数据集如下:

state1
state2
state1
state3
state2
state1
state1
state2

您的第一选择是定义n(用于预测n + 1个样本的样本数)。现在考虑n3。您的输入数据应该是什么样的:

[[state1, state2, state1],
 [state2, state1, state3],
 [state1, state3, state2],
 [state3, state2, state1],
 [state2, state1, state1]]

输出将是:

[[state3],
 [state2],
 [state1],
 [state1],
 [state2]]

您使用一个热点(请看一下嵌入层和word2vec),在此示例中,这意味着

state1 = [1, 0, 0]
state2 = [0, 1, 0]
state3 = [0, 0, 1]

关于模型,我假设您打算使用LSTM,在Keras,这需要将输入调整为样本x时间步长x特征。因此,对于此示例,这意味着您的输入数据应类似于

[[[[1], [0], [0]],  [[0], [1], [0]], [[1], [0], [0]]],
 [[[0], [1], [0]],  [[1], [0], [0]], [[0], [0], [1]]],
 ...

当您以这种形式获取数据时,模型将类似于

from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import LSTM, Dense
#create input output pairs in sense of example
x, y = createDataset()
#define model topology
model = Sequential()
model.add(LSTM(nb_of_units, input_shape(time_steps, features)))
model.add(Dense(size_of_one_hot_vector, activation="softmax"))
#select optimizer, loss and metric
model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=['acc'])
#fit model to data
history = model.fit(x, y, epochs=nb_of_epochs, batch_size=batch_size, shuffle=False)