2013-03-15 43 views
3

我有一个使用scikit-learn和PCA的降维问题。scikits-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) 

回答

13

呼叫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) 
+0

谢谢HYRY,它的作品!但是,如果我有第三个矩阵来减少维度(忘记培训和测试),我应该使用哪一个? transform()或fit_transform()? – mad 2013-03-15 00:33:51

+0

你应该使用'fit_transform()'作为独立的数据。在(火车,测试)设置的情况下,它们是相同的数据集,所以您适合火车数据,并且转换火车和测试数据。 – HYRY 2013-03-15 00:36:18

+0

再次感谢HYRY。 – mad 2013-03-15 00:38:45