【问题标题】:Performance drop using PCA with LSTM使用带有 LSTM 的 PCA 性能下降
【发布时间】: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


【解决方案1】:

下面的修改代码可以正常工作,我必须在 PCA 之前移动缩放。

from sklearn.decomposition import PCA

features = df.drop(["Date Time"], axis = 1)
features.index = df['Date Time']
data_mean = features[:TRAIN_SPLIT].mean(axis=0)
data_std = features[:TRAIN_SPLIT].std(axis=0)

features = (features-data_mean)/data_std

dataset = PCA(n_components = 3).fit_transform(features)

【讨论】:

  • 记住只在火车上而不是在所有数据上拟合缩放和 pca ;-)
  • @MarcoCerliani:谢谢,但我不明白为什么。在教程中,缩放既适用于训练数据,也适用于验证数据,如果我只将 PCA 应用于我的训练数据,它将如何泛化到尚未转换的新数据?
  • pca.transform() 是你需要的......因为适合所有东西就像作弊
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-05
  • 2013-03-06
相关资源
最近更新 更多