将大数据集 PCA 保存在磁盘上供以后使用有限的磁盘 space
saving large data set PCA on disk for later use with limited disc space
我有一个非常大的数据集(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 文件对于我有限的磁盘来说太大了 space。
缩减数据集 smaller_data
的大小可以接受,可以保存为 .npy
文件:
np.save('train_data_pca.npy', train_data)
如何使用此文件进行转换 (test_data),或使保存的 pca pickle 变小?使用 gzip 包压缩是不够的,我试过了。
找到方法了,看了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)
我有一个非常大的数据集(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 文件对于我有限的磁盘来说太大了 space。
缩减数据集 smaller_data
的大小可以接受,可以保存为 .npy
文件:
np.save('train_data_pca.npy', train_data)
如何使用此文件进行转换 (test_data),或使保存的 pca pickle 变小?使用 gzip 包压缩是不够的,我试过了。
找到方法了,看了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)