2017-02-27 68 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)