keras - 如何使用神经网络对分类数据集执行时间序列分析
问题描述
我有一个包含 2 列日期和状态的数据集(36 个唯一值)。我想在这个数据集上使用神经网络进行时间序列分析(推荐使用 keras)。我在互联网上搜索了很多,但我得到了数字数据的答案。请有人帮助我如何推进这个数据集。
解决方案
好的,我试着回答。我假设你已经安装了 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)
推荐阅读
- sql - 从 SQL Server 链接服务器到 IBM DB2 的特殊字符
- python - Python3 导入错误。以前的方法都解决不了
- javascript - 在 vuex 中添加和重新获取数组数据
- portforwarding - 端口转发说 X 规则被禁用
- c++ - 在 *ptr 初始化后声明 *ptr=x 有什么问题?
- docker - 为 Jenkins slave 编写 Swarm 文件
- r - as.vector(x) 中的错误:没有将此 S4 类强制为向量的方法
- php - PHP函数在特定字符之前插入html标签
- woocommerce - 使用更新购物车按钮旁边的钩子将代码添加到 WooCommerce 购物车页面
- python - 在pygame中使用collidepoint函数时,线被检测为矩形的对角线