tensorflow - 如何将分类特征和标签输入 TensorFlow 时间序列预测?
问题描述
所以,我在这里追求的目标是使用 Tensorflow 进行时间序列预测。我的数据结构如下:
时间戳 | 浮动64 | 数值 |
---|---|---|
特色 | 浮动64 | 数值 |
特征 b | 浮动64 | 数值 |
特征 c | 细绳 | 分类的 |
目标 | 细绳 | 分类的 |
我面临的问题是正确输入我拥有的分类数据列。
目前,我的管道大致如下所示:
- 将数据框拆分为训练、验证和测试
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):]
- 用于
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,)
- 将结果拆分
tf.dataset
为窗口(紧跟时间序列预测的 tensorflow 文档) - 我有这个简单的模型
lstm_model = tf.keras.models.Sequential([
tf.keras.layers.LSTM(32, return_sequences=True),
tf.keras.layers.Dense(units=1)
])
- 然后我使用我的训练和验证数据编译和拟合模型
如果我自己将分类数据列映射到int
(低基数),这确实可以编译。但这会使该列处于有序状态。如果我不这样做,第 2 步将不起作用。
现在,我研究了 One Hot Encoding,但无法找到一种将其实现到我当前管道中的方法。也许我完全误解了这个过程,但问题是我需要一个只有float32
值作为步骤 2 输入的数据框。因此,我必须在该步骤之前对数据进行编码。我发现 Tensorflow 中 One Hot Encoding 的每个示例都将模型内的编码作为附加层执行;不是在预处理阶段。
我可能完全不在了,但我想不出办法来解决这个问题。如果有人能指出我正确的方向,我会欣喜若狂。
解决方案
推荐阅读
- javascript - 谷歌地图 - 隐藏目的地标记
- javascript - 在引导表上获取当前显示的页面
- node.js - MongoDB 在其他字段中插入自己的对象 ID
- sql - 如何为 column1 中的每个相同值以及它们的数据以及它们在 column2 中的总和创建一个新列?
- javascript - Selenium IDE - 没有 assertConfirmation 的选择OkOnNextConfirmation?
- java - 有没有办法从 boxfuse 中提取我的源代码?
- java - 如何使用 java 创建 Multipart 文件
- python - 使字符串中的一个单词在QT中成为一种颜色
- sql-server - 如何匹配属于 2 个不同表的这些记录
- python - 如何在 plotly 中使用滑块更新 y 值(python)