将高斯过程模型拟合到 PCA预测看起来非常错误

问题描述

我目前正在尝试将高斯过程模型拟合到我的数据中,并让它提前几天进行预测。我已经通过 sklearn 中的 PCA 将我的 ~10 个功能减少到只有 2 个组件。所以现在我有 PCA1 和 PCA2。这是通过对训练集 (40%) 执行 PCA 获得的。

pca = PCA(n_components=2)
pca.fit(train_data)
PCAs = pca.transform(train_data)
PCA1 = PCAs[:,0]
PCA2 = PCAs[:,1]

其中 train_data 是具有约 10 个特征和 50 行的数据框,并应用了 StandardScaler()

kernel = RBF()
model = gaussian_process.GaussianProcessRegressor(kernel=kernel,normalize_y=True,n_restarts_optimizer=10)
model.fit(x_days_train,PCA1)
y_pred,y_std = model.predict(x_days,return_std=True)
model.score(x_days_train,PCA1)

其中 x_days 如果是完整的 50 天,而 x_days_train 是 20 天 (0,1,2....)。我得了 1.0 分。但是,我的预测结果看起来很糟糕(如下所示)。就像在训练数据之后,它只是下降然后停滞。

enter image description here

不完全确定出了什么问题,但有几个猜测:

  • 由于我的数据没有目标变量,我对数据框中的所有特征都使用了 PCA,它们应该是 x 变量?然后我将它们用作 y 变量(通过预测)。也许这是一种不正确的方法
  • 在此之后,PCA 甚至可以用作 y_prediction 吗?
  • 我是否应该不仅将 PCA 应用于训练数据,还要应用于测试数据(应用 fit_transform)?
  • 我似乎只使用 PCA1 而不是 PCA2(也不是两者的组合)。我应该同时使用两者吗?如果是这样,怎么办?

非常感谢您的帮助,谢谢。

解决方法

由于我的数据没有目标变量,所以我对所有特征都使用了 PCA 在数据框中,它们应该是 x 变量?然后我 将它们用作 y 变量(通过预测)。也许这是一个不正确的 方法?

你说得对。 PCA 旨在将高维数据转换为更小的维度。从本质上讲,数据已被压缩,但仍包含与数据中每个元素相关的相同信息。 Sci-kit 学习变换函数不接受 y 变量。而是使用 fit_transform() 函数,该函数接受两个变量,将正确的方法应用于 x 变量并忽略 y。

在此之后,PCA 甚至可以用作 y_prediction 吗?

PCA 只是转换数据,高斯过程回归 (GPR) 进行预测。

我是否应该不仅将 PCA 应用于训练数据,还要应用于 测试数据(应用 fit_transform)?

是的。

我似乎只使用 PCA1 而不是 PCA2(也不是 二)。我应该同时使用两者吗?如果是这样,如何?

像这样使用 fit_transform() 方法后:

pca_x,pca_y = pca.fit_transform(train_data)

像这样应用数据:

kernel = RBF()
model = gaussian_process.GaussianProcessRegressor(kernel=kernel,normalize_y=True,n_restarts_optimizer=10)
model.fit(pca_x,pca_y)

这里是 PCAGPR 的 Sci-kit Learn 用户指南。