2017-02-27 4 views
0

私は、次元削減のためにPCAを実行する非常に大きなデータセット(numpy配列)を持っています。データセットはtrain_dataです。これら二つの間、しかし大きなデータセットをディスクに保存して、後でディスクスペースを制限して使用する

smaller_test = pca.transform(test_data) 

:私はこのように、上の同じ変換を使用したいtest_dataと呼ばれる第二のデータセットを持ってscikit-学び、この

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

のようにこれを行うに使用します私はモデルをディスクに保存する必要があります。

scikitのドキュメントによると、私はピクルス

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

でこれを行うことができますが、この漬物ファイルは私の限られたディスクスペースのためにあまりにも大きいです。

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

がどのように変換(TEST_DATA)を行うには、このファイルを使用することができ、または保存されたPCAのピクルスを小さく:

低減されたデータは、.npyファイルとして保存することが許容できる大きさであるsmaller_dataを設定しますか? 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) 
と同じをもたらし
関連する問題