问题描述
我目前正在尝试将高斯过程模型拟合到我的数据中,并让它提前几天进行预测。我已经通过 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 分。但是,我的预测结果看起来很糟糕(如下所示)。就像在训练数据之后,它只是下降然后停滞。
不完全确定出了什么问题,但有几个猜测:
- 由于我的数据没有目标变量,我对数据框中的所有特征都使用了 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)