2017-02-27 76 views
0

我有一个非常大的数据集(numpy数组),我为了降维而做了PCA。数据集称为train_data。我用scikit学习和做类似这样的将大型数据集PCA保存在磁盘上供以后与有限的磁盘空间一起使用

pca = PCA(n_components=1000, svd_solver='randomized') 
pca.fit() 
smaller_data = pca.transform(train_data) 

我有第二个数据集被称为test_data,我想使用相同的变换,就像这样:

smaller_test = pca.transform(test_data) 

然而,这两者之间我需要将模型保存到磁盘的步骤。

按照scikit文档,我能做到这一点与泡菜

pickle.dump(pca, open("pca.p", "wb")) 

但这咸菜文件是我有限的磁盘空间的方式过大。

缩减数据集合smaller_data是可以接受的尺寸被保存为.npy文件:

np.save('train_data_pca.npy', train_data) 

我如何使用这个文件做一个变换(TEST_DATA),或使保存的PCA咸菜小?使用gzip软件包压缩是不够的,我尝试过。

回答

1

我找到了一种方法,在scikit中查看transform方法的源代码后,它实际上非常简单。

我不得不保存部件装置

means = pca.means_ #put this into a .npy file 

,然后它仅仅是矩阵乘法:

from sklearn.utils.extmath import fast_dot 
td = test_data - means 
tdd = fast_dot(td, pca.components_.T) 

产生相同

pca.transform(test_data)