将大型数据集PCA保存在磁盘上,以便以后使用有限的磁盘空间

时间:2017-02-27 19:24:08

标签: python numpy scikit-learn pca

我有一个非常大的数据集(numpy数组),我在PCA上进行降维。数据集称为train_data。我使用scikit-learn并像这样做

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

来做到这一点
pickle.dump(pca, open( "pca.p", "wb" ) )

但是这个pickle文件对于我有限的磁盘空间来说太大了。

简化数据集smaller_data的大小可以保存为.npy文件:

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

如何使用此文件进行转换(test_data),或者将保存的pca pickle缩小?使用gzip包进行压缩是不够的,我试过了。

1 个答案:

答案 0 :(得分:5)

我找到了一种方法,在查看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)
相关问题