Die Hauptkomponentenanalyse (PCA) kann zur Dimensionsreduzierung verwendet werden. Wie kann man nach einer solchen Dimensionsreduktion die ursprünglichen Variablen / Merkmale aus einer kleinen Anzahl von Hauptkomponenten näherungsweise rekonstruieren?
Wie kann man alternativ mehrere Hauptkomponenten aus den Daten entfernen oder verwerfen?
Mit anderen Worten, wie PCA umkehren?
Angesichts der Tatsache, dass PCA in enger Beziehung zur Singularwertzerlegung (SVD) steht, kann dieselbe Frage wie folgt gestellt werden: Wie kann die SVD umgekehrt werden?
pca
dimensionality-reduction
svd
Amöbe
quelle
quelle
Antworten:
PCA berechnet Eigenvektoren der Kovarianzmatrix ("Hauptachsen") und sortiert sie nach ihren Eigenwerten (Betrag der erklärten Varianz). Die zentrierten Daten können dann auf diese Hauptachsen projiziert werden, um Hauptkomponenten ("Scores") zu erhalten. Zum Zwecke der Dimensionsreduzierung kann man nur eine Teilmenge der Hauptkomponenten behalten und den Rest verwerfen. ( Eine Einführung in PCA für Laien finden Sie hier .)
Dies wird in der folgenden Abbildung veranschaulicht: Die erste Teilzeichnung zeigt einige zentrierte Daten (dieselben Daten, die ich in meinen Animationen im verknüpften Thread verwende) und ihre Projektionen auf der ersten Hauptachse. Der zweite Untergrund zeigt nur die Werte dieser Projektion; Die Dimensionalität wurde von zwei auf eins reduziert:
Um die beiden ursprünglichen Variablen aus dieser einen Hauptkomponente rekonstruieren zu können, können wir sie mit wieder auf Dimensionen abbilden . In der Tat sollten die Werte jedes PCs auf den gleichen Vektor gelegt werden, der für die Projektion verwendet wurde. Vergleiche Untergrund 1 und 3. Das Ergebnis ergibt sich dann aus . Ich zeige es im dritten Untergrund oben an. Um die endgültige Rekonstruktion , müssen wir den mittleren Vektor hinzufügen :p V⊤ X^=ZV⊤=XVV⊤ X^raw μ
Beachten Sie, dass Sie direkt vom ersten zum dritten Untergrund wechseln können, indem Sie mit der Matrix multiplizieren . es wird eine Projektionsmatrix genannt . Wenn alle Eigenvektoren verwendet werden, ist die Identitätsmatrix (es wird keine Dimensionsreduktion durchgeführt, daher ist "Rekonstruktion" perfekt). Wenn nur eine Teilmenge von Eigenvektoren verwendet wird, handelt es sich nicht um Identität.X VV⊤ p VV⊤
Dies funktioniert für einen beliebigen Punkt im PC-Bereich. Es kann über auf den ursprünglichen Bereich abgebildet werden .z x^=zV⊤
Verwerfen (Entfernen) führender PCs
Manchmal möchte man einen oder mehrere der führenden PCs verwerfen (entfernen) und den Rest behalten, anstatt die führenden PCs zu behalten und den Rest zu verwerfen (wie oben). In diesem Fall bleiben alle Formeln exakt gleich , aber sollte aus allen Hauptachsen bestehen, mit Ausnahme derjenigen, die verworfen werden sollen. Mit anderen Worten, sollte immer alle PCs enthalten, die man behalten möchte.V V
Einschränkung bezüglich PCA auf Korrelation
Wenn PCA in einer Korrelationsmatrix (und nicht in einer Kovarianzmatrix) durchgeführt wird, werden die Rohdaten nicht nur durch Subtrahieren von zentriert, sondern auch durch Teilen jeder Spalte durch ihre Standardabweichung . In diesem Fall müssen zur Rekonstruktion der Originaldaten die Spalten von mit und erst dann der mittlere Vektor .Xraw μ σi X^ σi μ
Beispiel für die Bildverarbeitung
Dieses Thema taucht häufig im Rahmen der Bildverarbeitung auf. Betrachten Sie Lenna - eines der Standardbilder in der Bildverarbeitungsliteratur (folgen Sie den Links, um herauszufinden, woher es kommt). Unten links zeige ich die Graustufenvariante dieses Bilds an (Datei hier verfügbar ).512×512
Wir können dieses Graustufenbild als Datenmatrix . Ich führe PCA darauf durch und berechne Verwendung der ersten 50 Hauptkomponenten. Das Ergebnis wird rechts angezeigt.512×512 Xraw X^raw
SVD wird zurückgesetzt
PCA ist sehr eng mit der Singular Value Decomposition (SVD) verwandt, siehe Beziehung zwischen SVD und PCA. Wie verwende ich SVD, um PCA durchzuführen? für mehr Details. Wenn eine Matrix als SVD-ed ist und man einen dimensionalen Vektor auswählt , der den Punkt im "reduzierten" Raum darstellt von Dimensionen, dann muss man es mit multiplizieren , um es wieder auf Dimensionen .n×p X X=USV⊤ k z U k p S⊤1:k,1:kV⊤:,1:k
Beispiele in R, Matlab, Python und Stata
Ich werde eine PCA für die Fisher Iris-Daten durchführen und sie dann unter Verwendung der ersten beiden Hauptkomponenten rekonstruieren. Ich mache PCA auf der Kovarianzmatrix, nicht auf der Korrelationsmatrix, dh ich skaliere hier nicht die Variablen. Aber ich muss noch den Mittelwert hinzufügen. Einige Pakete, wie z. B. Stata, erledigen dies mithilfe der Standardsyntax. Vielen Dank an @StasK und @Kodiologist für die Hilfe beim Code.
Wir werden die Rekonstruktion des ersten Datenpunktes überprüfen, nämlich:
Matlab
Ausgabe:
R
Ausgabe:
Zum ausgearbeiteten R-Beispiel der PCA-Rekonstruktion von Bildern siehe auch diese Antwort .
Python
Ausgabe:
Beachten Sie, dass dies geringfügig von den Ergebnissen in anderen Sprachen abweicht. Dies liegt daran, dass Pythons Version des Iris-Datensatzes Fehler enthält .
Stata
quelle
nComp