scikits-learn中的PCA降维问题

3

我在使用scikit-learn和PCA进行降维时遇到了问题。

我有两个numpy矩阵,一个大小为(1050,4096),另一个大小为(50,4096)。我尝试将两者的维度都减少以得到(1050,399)和(50,399),但是,在做完PCA后,我得到了(1050,399)和(50,50)的矩阵。其中一个矩阵用于knn训练,另一个用于knn测试。以下是我的代码,有什么问题吗?

pca = decomposition.PCA()
pca.fit(train)
pca.n_components = 399
train_reduced = pca.fit_transform(train)
pca.n_components = 399
pca.fit(test)
test_reduced = pca.fit_transform(test)
1个回答

15

在训练数据上使用 fit_transform(),在测试数据上使用 transform():

from sklearn import decomposition

train = np.random.rand(1050, 4096)
test = np.random.rand(50, 4096)

pca = decomposition.PCA()
pca.n_components = 399
train_reduced = pca.fit_transform(train)
test_reduced = pca.transform(test)

谢谢HYRY,它有效了!但是,如果我有第三个矩阵要减少维度(忘记训练和测试),我应该使用哪个?transform()还是fit_transform()? - mad
你应该使用 fit_transform() 来处理独立的数据。对于 (train, test) 数据集,它们是相同的数据集,所以你需要在训练数据上进行拟合,再同时转换训练和测试数据。 - HYRY
1
不要再感谢两次@mad了,接受答案吧!你提出了一个好问题,我点赞了,你得到了一个好答案,你就接受它!就这么简单。 - gsamaras

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接