2017-04-11 2 views
5

Ich versuche, die Dimensionalität einer sehr großen Matrix mit PCA in Sklearn zu reduzieren, aber es erzeugt einen Speicherfehler (RAM erforderlich übersteigt 128 GB). Ich habe bereits copy = False gesetzt und verwende die weniger rechenintensive randomisierte PCA.PCA Speicherfehler in Sklearn: Alternative Dim Reduction?

Gibt es eine Problemumgehung? Wenn nicht, welche anderen Dim-Reduktionstechniken könnte ich verwenden, die weniger Speicher benötigen. Vielen Dank.


Update: Die Matrix, die ich auf PCA versuche, ist eine Reihe von Feature-Vektoren. Es kommt von der Weitergabe einer Reihe von Trainingsbildern durch ein vortrainiertes CNN. Die Matrix ist [300000, 51200]. PCA-Komponenten versucht: 100 bis 500.

Ich möchte seine Dimensionalität reduzieren, damit ich diese Funktionen verwenden kann, um eine ML-Algo wie XGBoost zu trainieren. Vielen Dank.

+1

Das bin ich von der [XY Problem] denken lässt (https: //meta.stackexchange .com/a/66378/311624). Warum möchten Sie die Dimensionalität reduzieren? Was versuchst du mit dieser Matrix zu erreichen? Ist es eine dichte Matrix? – iled

+0

Bitte geben Sie weitere Informationen: wie viele Komponenten verwenden Sie, wie groß ist Ihre Eingabe-Dataset-Größe usw. – rth

+0

Sie könnten eine Art Feature-Reduktions-Technik ausprobieren, um redundante/nicht informative Features aus dem Set zu entfernen. – ralston

Antwort

2

Am Ende habe ich TruncatedSVD statt PCA, die von den Umgang mit großen Matrizen ohne Speicherprobleme fähig ist:

from sklearn import decomposition 

n_comp = 250 
svd = decomposition.TruncatedSVD(n_components=n_comp, algorithm='arpack') 
svd.fit(train_features) 
print(svd.explained_variance_ratio_.sum()) 

train_features = svd.transform(train_features) 
test_features = svd.transform(test_features)