将大型数据集 PCA 保存在磁盘上以供以后在磁盘空间有限的情况下使用

Posted

技术标签:

【中文标题】将大型数据集 PCA 保存在磁盘上以供以后在磁盘空间有限的情况下使用【英文标题】:saving large data set PCA on disk for later use with limited disc space 【发布时间】:2017-07-18 13:23:56 【问题描述】:

我有一个非常大的数据集(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 泡菜更小?使用 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)

【讨论】:

以上是关于将大型数据集 PCA 保存在磁盘上以供以后在磁盘空间有限的情况下使用的主要内容,如果未能解决你的问题,请参考以下文章

将大型 Python 数组保存到磁盘以供以后重复使用 --- hdf5?还有啥方法?

如何在 Google Colab 上以流模式加载数据集?

apollo-ios 如何在磁盘上缓存数据?

在 Python 中追加列表

解压不适用于自己的文件

处理大型数据集和内存限制 [关闭]