首页 > 解决方案 > 如何将分类特征和标签输入 TensorFlow 时间序列预测?

问题描述

所以,我在这里追求的目标是使用 Tensorflow 进行时间序列预测。我的数据结构如下:

时间戳 浮动64 数值
特色 浮动64 数值
特征 b 浮动64 数值
特征 c 细绳 分类的
目标 细绳 分类的

我面临的问题是正确输入我拥有的分类数据列。


目前,我的管道大致如下所示:

  1. 将数据框拆分为训练、验证和测试
n = len(data)
train_df = data[0:int(n*0.7)]
val_df = data[int(n*0.7):int(n*0.9)]
test_df = data[int(n*0.9):]
  1. 用于tf.keras.preprocessing.timeseries_dataset_from_array预处理数据
data = np.array(data, dtype=np.float32)
ds = tf.keras.preprocessing.timeseries_dataset_from_array(
      data=data,
      targets=None,
      sequence_length=self.total_window_size,
      sequence_stride=1,
      shuffle=False,
      batch_size=32,)
  
  1. 将结果拆分tf.dataset为窗口(紧跟时间序列预测的 tensorflow 文档)
  2. 我有这个简单的模型
lstm_model = tf.keras.models.Sequential([
    tf.keras.layers.LSTM(32, return_sequences=True),
    tf.keras.layers.Dense(units=1)
])
  1. 然后我使用我的训练和验证数据编译和拟合模型

如果我自己将分类数据列映射到int(低基数),这确实可以编译。但这会使该列处于有序状态。如果我不这样做,第 2 步将不起作用。


现在,我研究了 One Hot Encoding,但无法找到一种将其实现到我当前管道中的方法。也许我完全误解了这个过程,但问题是我需要一个只有float32值作为步骤 2 输入的数据框。因此,我必须在该步骤之前对数据进行编码。我发现 Tensorflow 中 One Hot Encoding 的每个示例都将模型内的编码作为附加层执行;不是在预处理阶段。

我可能完全不在了,但我想不出办法来解决这个问题。如果有人能指出我正确的方向,我会欣喜若狂。

标签: tensorflowtime-serieslstmcategorical-dataone-hot-encoding

解决方案


推荐阅读