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.)
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:
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.
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% Die Funktion princomp
wurde zugunsten von pca
, die in R2012b eingeführt wurde, veraltet viele weitere Optionen.
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.
Mathworks-Ingenieur Stuart McGarrity hat ein nettes Webinar
Tags und Links memory matlab linear-algebra out-of-memory pca