首页 > 解决方案 > 如何使用神经网络对分类数据集执行时间序列分析

问题描述

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

标签: kerasneural-networktime-seriesconv-neural-networkforecasting

解决方案


好的,我试着回答。我假设你已经安装了 tensorflow。你说你有这种形式的数据

date          state
01.01.2018    state1
02.01.2018    state2
....

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

假设您的数据集如下所示:

state1
state2
state1
state3
state2
state1
state1
state2

您的第一选择是定义 n(用于预测 n+1 样本的样本数)。现在考虑 n 3。您的输入数据应如下所示:

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

输出将是:

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

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

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

关于模型,我假设您计划使用在 Keras 需要将输入塑造为样本 x 时间步长 x 特征的 LSTM 。所以对于这个例子,这意味着你的输入数据应该看起来像

[[[[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)

推荐阅读