我有一个包含2列日期和状态(36个唯一值)的数据集。我想在此数据集上使用神经网络进行时间序列分析(建议使用keras)。我在互联网上进行了很多搜索,但是我得到了数值数据的答案。请有人帮助我如何继续使用此数据集。
答案 0 :(得分:0)
答案 1 :(得分:0)
好的,我尝试回答。我假设您已经安装了tensorflow。您提到自己具有这种格式的数据
date state
01.01.2018 state1
02.01.2018 state2
....
您要执行时间序列预测。我猜您不需要将日期列输入网络。因此,您的基本设置是,将n个状态作为输入,并期望模型进行预测。您写对了,您需要以某种方式对分类变量进行编码。您选择单热编码。建议您查看this和this。但是现在我们假设您使用的是单编码。
假设您的数据集如下:
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)