MATLAB ist nicht mehr genügend Arbeitsspeicher, aber das sollte nicht sein

8

Ich versuche, PCA auf meine Daten anzuwenden, indem ich princomp(x) , das wurde standardisiert.

Die Daten sind <16 x 1036800 double> . Dies führt unseren Speicher, der zu erwarten ist, außer für die Tatsache, dass dies ein neuer Computer ist, hält der Computer 24 GB RAM für Data Mining. MATLAB listet sogar die 24 GB auf, die bei einer Speicherprüfung verfügbar sind.

Ist MATLAB während der Ausführung einer PCA nicht genügend Arbeitsspeicher zur Verfügung oder nutzt MATLAB den RAM nicht vollständig? Irgendwelche Informationen oder Ideen wären hilfreich. (Möglicherweise muss ich den virtuellen Speicher erhöhen, nehme aber an, dass die 24 GB ausreichend gewesen wären.)

    
user379362 05.07.2010, 18:50
quelle

3 Antworten

19

Für eine Datenmatrix der Größe n-by-p gibt PRINCOMP eine Koeffizientenmatrix der Größe p-nach-p zurück, wobei jede Spalte eine Hauptkomponente ist, die mit den ursprünglichen Dimensionen ausgedrückt wird. In diesem Fall erstellen Sie eine Ausgabematrix der Größe:

%Vor%

Verwenden Sie PRINCOMP(X,'econ') , um nur die PCs mit signifikanter Varianz zurückzugeben

Alternativ können Sie PCA von SVD durchführen: in Ihrem Fall n<<p , und die Kovarianzmatrix ist unmöglich berechnen. Anstatt die p-mal-p-Matrix XX' zu zerlegen, reicht es daher aus, nur die kleinere n-mal-n-Matrix X'X zu zerlegen. Siehe dieses Dokument als Referenz.

BEARBEITEN:

Hier ist meine Implementierung, die Ausgaben dieser Funktion stimmen mit denen von PRINCOMP überein (die ersten drei sowieso) :

%Vor%

Ich habe es gerade auf meinem 4GB-Rechner versucht, und es lief ganz gut:

%Vor%

Aktualisierung:

Die Funktion princomp wurde zugunsten von pca , die in R2012b eingeführt wurde, veraltet viele weitere Optionen.

    
Amro 05.07.2010, 19:58
quelle
1

Matlab hat Beschränkungen für Matrixgrößen festgeschrieben. Siehe diesen Link . Wenn Sie denken, dass Sie diese Grenzen nicht überschreiten, dann haben Sie wahrscheinlich einen Fehler in Ihrem Code und sind es tatsächlich.

    
Donnie 05.07.2010 18:55
quelle
0

Mathworks-Ingenieur Stuart McGarrity hat ein nettes Webinar ist leicht lösbar .

    
Ofek Shilon 05.07.2010 19:14
quelle