【发布时间】:2020-05-08 13:48:26
【问题描述】:
我一直在关注有关使用 LSTM 进行时间序列预测的 tensorflow 教程: https://www.tensorflow.org/tutorials/structured_data/time_series?_sm_byp=iVVPDS34q1N5fqcV
我的目标是在将这种架构用于项目之前先尝试一下。 在示例中,数据集中有 10 个特征,但我要使用的特征大约有 14000 个。
因此,在教程的最后一部分“多步模型”之后,我尝试添加一个 PCA 转换来获得前 3 个主成分 (PC),而不是仅仅随机选择 3 个特征。
我的假设是,我应该稍微提高性能或什么都没有,但结果反而下降了,错误率翻了一番。
我在运行修改后的部分之前设置种子以将结果与教程进行比较。
这是我修改为包含 PCA 的代码:
from sklearn.decomposition import PCA
features = df.drop(["Date Time"], axis = 1)
features.index = df['Date Time']
dataset = PCA(n_components = 3).fit_transform(features)
data_mean = dataset[:TRAIN_SPLIT].mean(axis=0)
data_std = dataset[:TRAIN_SPLIT].std(axis=0)
dataset = (dataset-data_mean)/data_std
有人知道为什么会发生这种行为吗?是不是我错过了一些步骤?
PS :我在论文中看到在 RNN 之前在时间序列上使用 PCA,因此该方法在理论上并不无效。
谢谢,
【问题讨论】:
-
你必须在 PCA 拟合之前应用数据缩放
-
@MarcoCerliani :我虽然 PCA 的 Sikitlearn 实现正在处理自动缩放。不是这样吗?
-
绝对不行...请仅在您的 X_train 上执行 PCA/缩放,然后在 X_valid/X_test 上应用变换
-
谢谢@MarcoCerliani,我现在的表现与预期一样,并提供了实质性的改进。
标签: tensorflow lstm