Sklearn PCA:用于训练和测试的组件数量不同

Posted

技术标签:

【中文标题】Sklearn PCA:用于训练和测试的组件数量不同【英文标题】:Sklearn PCA: Different number of components for train and test 【发布时间】:2018-08-18 04:42:03 【问题描述】:

我正在使用 Sklearn 的 PCA 进行降维。我正在拟合和转换我的输入数据X,如下所示:

pca = PCA(n_components=0.9999)
final_X = pca.fit_transform(X)

这产生了 13 个特征。然后我将它应用到我的测试集:

test_X = pca.fit_transform(test_1)

它只产生 9 个特征,这在我进行预测时是有问题的。我将在具有 13 个特征的数据上进行训练,然后对具有 9 个特征的数据进行测试(不保证 9 个是 13 个特征的子集)。

我是否应该跟踪 PCA 选择的哪些功能,然后只保留那些?

如果是这样,我该怎么做?

谢谢!

【问题讨论】:

你不应该打电话给fit_transform()。你应该打电话给transform()。更多关于my answer 的类似问题。 【参考方案1】:

您应该在测试数据上使用transform 而不是fit_transform,以便trainingtesting 数据以相同的方式转换(通过相同的@987654323 @ 模型)。 test_X = pca.transform(test_1)

【讨论】:

以上是关于Sklearn PCA:用于训练和测试的组件数量不同的主要内容,如果未能解决你的问题,请参考以下文章

为啥 sklearn 的训练/测试拆分加上 PCA 会使我的标签不正确?

如何将使用 PCA 和随机森林训练的模型应用于测试数据?

训练和测试集中不同数量的特征 - 随机森林 sklearn Python

XGBoost 与 GridSearchCV、缩放、PCA 和 sklearn 管道中的 Early-Stopping

为啥sklearn kNN分类器运行得这么快,而我的训练样本和测试样本的数量很大

sklearn - 如何从传递给 GridSearchCV 的管道中检索 PCA 组件和解释方差