Wie kann ich interpretieren, was ich von PCA bekomme?

14

Im Rahmen eines Universitätsauftrages muss ich eine Datenvorverarbeitung für einen ziemlich großen, multivariaten (> 10) Rohdatensatz durchführen. Ich bin kein Statistiker im wahrsten Sinne des Wortes, also bin ich ein wenig verwirrt, was los ist. Entschuldigung im Voraus für die wahrscheinlich lächerlich einfache Frage - mein Kopf dreht sich, nachdem ich mir verschiedene Antworten angesehen und versucht habe, durch die Statistiken zu waten.

Ich habe gelesen, dass:

  • Mit PCA kann ich die Dimensionalität meiner Daten reduzieren
  • Dies geschieht durch Zusammenführen / Entfernen von Attributen / Dimensionen, die viel miteinander korrelieren (und daher ein wenig unnötig sind).
  • Dies geschieht, indem Eigenvektoren anhand von Kovarianzdaten gefunden werden (dank eines netten Tutorials, das ich durchgearbeitet habe, um dies zu lernen).

Was toll ist.

Ich bin jedoch sehr bemüht zu sehen, wie ich dies praktisch auf meine Daten anwenden kann. Zum Beispiel (dies ist nicht der Datensatz, den ich verwenden werde, sondern ein Versuch mit einem anständigen Beispiel, mit dem Menschen arbeiten können), wenn ich einen Datensatz mit so etwas wie ... haben würde.

PersonID     Sex     Age Range    Hours Studied     Hours Spent on TV      Test Score     Coursework Score 
1            1       2            5                 7                      60             75
2            1       3            8                 2                      70             85 
3            2       2            6                 6                      50             77
...          ...     ...          ...               ...                    ...            ...

Ich bin mir nicht ganz sicher, wie ich die Ergebnisse interpretieren würde.

Die meisten Tutorials, die ich online gesehen habe, scheinen mir eine sehr mathematische Sicht auf PCA zu geben. Ich habe einige Nachforschungen angestellt und sie durchgearbeitet - aber ich bin mir immer noch nicht ganz sicher, was das für mich bedeutet, der nur versucht, aus diesem Datenstapel, den ich vor mir habe, irgendeine Art von Bedeutung herauszuholen.

Durch einfaches Durchführen einer PCA für meine Daten (unter Verwendung eines Statistikpakets) wird eine NxN-Zahlenmatrix (wobei N die Anzahl der ursprünglichen Dimensionen ist) ausgespuckt, die für mich völlig griechisch ist.

Wie kann ich PCA machen und das, was ich bekomme, in einer Weise aufnehmen, die ich dann in Klartext in Bezug auf die ursprünglichen Dimensionen ausdrücken kann?

Nitsua
quelle
3
Ihre Beispieldaten zeigen eine Mischung von Datentypen: Geschlecht ist dichotom, Alter ist ordinal, die anderen 3 sind Intervalle (und diese sind in verschiedenen Einheiten). Die lineare PCA ist für Intervalldaten geeignet (Sie müssen diese Variablen jedoch aufgrund der Einheiten zuerst z-standardisieren). Es ist fraglich, ob PCA für binäre oder dichotome Daten geeignet ist . In linearen PCA sollten Sie keine Ordnungsdaten verwenden. Aber die Hauptfrage bei Ihren Beispieldaten: Warum überhaupt PCA damit machen? Welchen Sinn könnte es in diesem Fall machen?
TTNPHNS
Dieses PDF ist nützlich für die Anwendung von PCA . Die anderen Beiträge hier machen einen guten Job als Beschreibung der "Bedeutung" Ihrer PCA-Ergebnisse.
ams
(Bitte korrigieren Sie mich, wenn ich falsch liege.) Ich glaube, dass PCA sehr nützlich ist / sein kann, um Trends in den Daten zu finden und herauszufinden, welche Attribute sich auf welche beziehen können (was letztendlich zu einer Klärung führen würde) Muster und dergleichen). Meine Aufgabe besteht darin, dass ich über diesen umfangreichen Datensatz verfüge und nur Clustering und Klassifikatoren anwenden muss. Einer der Schritte, die für die Vorverarbeitung als wichtig eingestuft werden, ist PCA. Wäre es hilfreich, wenn ich versuchen würde, einige Attribute zweiter Ordnung aus dem Datensatz zu extrahieren, und versuchen müsste, sie alle in Intervalldaten abzurufen?
Nitsua
3
Ich kann Ihnen derzeit nur empfehlen, mehr über PCA zu lesen (auch auf dieser Site). Viele Unsicherheiten werden sicherlich verschwinden.
TTNPHNS
Viele gute Links oben, hier ein kurzes Beispiel, das Ihnen ein gutes Gefühl für PCA in Bezug auf Regression vermitteln könnte, mit einem praktischen Beispiel und sehr wenigen, wenn überhaupt, technischen Begriffen. sites.stat.psu.edu/~ajw13/stat505/fa06/16_princomp/...
Leviathan

Antworten:

14

Die Seiten 13-20 des von Ihnen veröffentlichten Lernprogramms enthalten eine sehr intuitive geometrische Erklärung, wie PCA zur Dimensionsreduzierung verwendet wird.

Die von Ihnen erwähnte 13x13-Matrix ist wahrscheinlich die "Lade" - oder "Rotations" -Matrix (ich nehme an, Ihre ursprünglichen Daten hatten 13 Variablen?), Die auf eine von zwei (äquivalenten) Arten interpretiert werden kann:

  1. Die (absoluten Werte der) Spalten Ihrer Ladematrix beschreiben, wie viel jede Variable proportional zu jeder Komponente "beiträgt".

  2. Die Rotationsmatrix rotiert Ihre Daten auf die von Ihrer Rotationsmatrix festgelegte Basis. Wenn Sie also 2D-Daten haben und Ihre Daten mit Ihrer Rotationsmatrix multiplizieren, ist Ihre neue X-Achse die erste Hauptkomponente und die neue Y-Achse die zweite Hauptkomponente.

BEARBEITEN: Diese Frage wird oft gestellt, deshalb werde ich nur eine detaillierte visuelle Erklärung darüber geben, was passiert, wenn wir PCA zur Dimensionsreduzierung verwenden.

Betrachten Sie eine Stichprobe von 50 Punkten, die aus y = x + Rauschen generiert wurden. Die erste Hauptkomponente liegt entlang der Linie y = x und die zweite Komponente liegt entlang der Linie y = -x, wie unten gezeigt.

Bildbeschreibung hier eingeben

Das Seitenverhältnis bringt es ein wenig durcheinander, aber nehmen Sie mein Wort dafür, dass die Komponenten orthogonal sind. Durch Anwenden von PCA werden unsere Daten gedreht, sodass die Komponenten zur x- und y-Achse werden:

Bildbeschreibung hier eingeben

Die Daten vor der Transformation sind Kreise, die Daten nach sind Kreuze. In diesem speziellen Beispiel wurden die Daten nicht so stark gedreht, wie sie über die Linie y = -2x gespiegelt wurden, aber wir hätten die y-Achse genauso leicht invertieren können, um dies wirklich zu einer Drehung ohne Verlust der Allgemeinheit zu machen, wie hier beschrieben .

Der Großteil der Varianz, dh die Informationen in den Daten, verteilt sich auf die erste Hauptkomponente (die durch die x-Achse dargestellt wird, nachdem wir die Daten transformiert haben). Es gibt eine kleine Abweichung entlang der zweiten Komponente (jetzt der y-Achse), aber wir können diese Komponente ganz ohne signifikanten Informationsverlust fallen lassen . Um dies von zwei Dimensionen auf 1 zu reduzieren, lassen wir die Projektion der Daten auf die erste Hauptkomponente unsere Daten vollständig beschreiben.

Bildbeschreibung hier eingeben

Wir können unsere ursprünglichen Daten teilweise wiederherstellen, indem wir sie zurück auf die ursprünglichen Achsen drehen (ok, projizieren).

Bildbeschreibung hier eingeben

Die dunkelblauen Punkte sind die "wiederhergestellten" Daten, während die leeren Punkte die ursprünglichen Daten sind. Wie Sie sehen, haben wir einige Informationen aus den Originaldaten verloren, insbesondere die Abweichung in Richtung der zweiten Hauptkomponente. Für viele Zwecke kann diese komprimierte Beschreibung (unter Verwendung der Projektion entlang der ersten Hauptkomponente) jedoch unseren Anforderungen entsprechen.

Hier ist der Code, mit dem ich dieses Beispiel generiert habe, falls Sie es selbst replizieren möchten. Wenn Sie die Varianz der Rauschkomponente in der zweiten Zeile verringern, verringert sich auch die durch die PCA-Umwandlung verlorene Datenmenge, da die Daten auf die erste Hauptkomponente konvergieren:

set.seed(123)
y2 = x + rnorm(n,0,.2)
mydata = cbind(x,y2)
m2 = colMeans(mydata)

p2 = prcomp(mydata, center=F, scale=F)
reduced2= cbind(p2$x[,1], rep(0, nrow(p2$x)))
recovered = reduced2 %*% p2$rotation

plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Data with principal component vectors')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+abs(p2$rotation[1,1])
       ,y1=m2[2]+abs(p2$rotation[2,1])
       , col='red')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+p2$rotation[1,2]
       ,y1=m2[2]+p2$rotation[2,2]
       , col='blue')

plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Data after PCA transformation')
points(p2$x, col='black', pch=3)
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+abs(p2$rotation[1,1])
       ,y1=m2[2]+abs(p2$rotation[2,1])
       , col='red')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+p2$rotation[1,2]
       ,y1=m2[2]+p2$rotation[2,2]
       , col='blue')
arrows(x0=mean(p2$x[,1])
      ,y0=0
      ,x1=mean(p2$x[,1])
      ,y1=1
      ,col='blue'
       )
arrows(x0=mean(p2$x[,1])
       ,y0=0
       ,x1=-1.5
       ,y1=0
       ,col='red'
)
lines(x=c(-1,1), y=c(2,-2), lty=2)


plot(p2$x, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='PCA dimensionality reduction')
points(reduced2, pch=20, col="blue")
for(i in 1:n){
  lines(rbind(reduced2[i,], p2$x[i,]), col='blue')
}

plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Lossy data recovery after PCA transformation')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+abs(p2$rotation[1,1])
       ,y1=m2[2]+abs(p2$rotation[2,1])
       , col='red')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+p2$rotation[1,2]
       ,y1=m2[2]+p2$rotation[2,2]
       , col='blue')
for(i in 1:n){
  lines(rbind(recovered[i,], mydata[i,]), col='blue')
}
points(recovered, col='blue', pch=20)
David Marx
quelle
5
David, bitte verwenden Sie die Begriffe "Rotationsmatrix" (auch als Eigenvektoren bezeichnet) und "Ladematrix" nicht synonym. Für die Reinheit und um die Menschen nicht in die Irre zu führen. Ladungen in PCA sind Eigenvektoren, nachdem sie durch ihre Eigenwerte normalisiert wurden. Vielen Dank.
TTNPHNS
3
@ttphns Ich denke, es hängt völlig davon ab, welches Paket Sie verwenden. Oft sind diese Begriffe vollständig austauschbar. Berücksichtigen Sie hier die Verwendung von " loadings ": utdallas.edu/~herve/abdi-awPCA2010.pdf . Verweisen Sie auch auf die R-Funktion, prcompbei der die Ladematrix nur die Matrix ist, deren Spalten Einheitseigenvektoren sind. Ich denke, Sie sind unnötig technisch und in den meisten Fällen glaube ich, dass diese Begriffe synonym verwendet werden.
David Marx
4
Entschuldigung, aber ich würde nicht zustimmen. Grund: Denken Sie daran, dass Ladungen sowohl für die PCA- als auch für die Faktoranalyse von Bedeutung sind (und im gleichen Sinne!). Belastungen sind direkt vergleichbar mit den Korrelationen / Kovarianzen. Eigenvektoren sind die Rotationskosinusse. In der Faktoranalyse befassen sich viele Methoden nicht mit Rotation ( in der Extraktionsphase). Das Mischen der beiden Begriffe ist für die Schüler in der Tat irreführend und sollte vermieden werden.
TTNPHNS
Kleiner Punkt: Richtige Schreibweise ist immer und nur "Prinzip", nicht "Prinzip". Ich habe entsprechend bearbeitet, aber ein Bild kann ich nicht bearbeiten.
Nick Cox
1
Ein weiteres Bild finden Sie hier setosa.io/ev/principal-component-analysis
SIslam
2

Ich würde sagen, Ihre Frage ist nicht nur in, cross validatedsondern auch in eine qualifizierte Frage stack overflow, in der Sie erfahren, wie Sie die Dimensionsreduzierung in R (...) implementieren, um effektiv zu ermitteln, welche Spalte / Variable zur Varianz von besser beiträgt den gesamten Datensatz.

Die PCA (Principal Component Analysis) hat die gleiche Funktionalität wie die SVD (Singular Value Decomposition) und ist nach dem Anwenden scale/ der Z-Transformation auf den Datensatz genau der gleiche Prozess .

Hier sind einige Ressourcen, die Sie in einer halben Stunde durchgehen können, um ein besseres Verständnis zu erlangen.

Ich bin nicht in der Lage, eine anschauliche Codierungslösung zu geben, mit der Sie verstehen, wie man svd implementiert und was die einzelnen Komponenten bewirken. Die Leute sind jedoch großartig. Hier sind einige sehr informative Beiträge, die ich verwendet habe, um mit der Anwendungsseite von SVD Schritt zu halten, auch wenn ich weiß wie man ein 3by3 SVD Problem von Hand berechnet .. :)

  1. Coursera Data Analysis Class von Jeff Leek: Videovorlesung / Kursnotizen
  2. Ein sehr informativer Studentenbeitrag
  3. Ein Beitrag der American Mathematical Society.
B.Mr.W.
quelle
Jeff Leeks Klasse ist sehr gut, um ein Gefühl dafür zu bekommen, was Sie mit PCA machen können. Das Gute ist, dass es nicht auf komplexe mathematisch-statistische Details eingeht (die an vielen anderen Stellen zu finden sind), sondern einen praktischen Ansatz bietet, der zeigt, wie man es wirklich auf Daten anwendet.
Nico
1

In PCA möchten Sie die Daten in weniger Variablen beschreiben. Sie können die gleichen Informationen in weniger Variablen erhalten als mit allen Variablen. Zum Beispiel könnten die untersuchten Stunden und die Testergebnisse korreliert sein und wir müssen nicht beide einbeziehen.

Nehmen wir in Ihrem Beispiel an, Sie möchten messen, wie "gut" ein Schüler / eine Person ist. Wenn man sich all diese Variablen ansieht, kann es verwirrend sein, zu sehen, wie das gemacht wird. Mit PCA können wir klar erkennen, welche Schüler gut oder schlecht sind.

Wenn die erste Hauptkomponente den größten Teil der Variation der Daten erklärt, dann ist dies alles, was wir brauchen. Sie würden die Korrelation zwischen dieser Komponente und allen Variablen finden. "Große" Korrelationen kennzeichnen wichtige Variablen. Zum Beispiel könnte die erste Komponente stark mit den untersuchten Stunden und dem Testergebnis korreliert sein. Hohe Werte der ersten Komponente weisen also auf hohe Werte der Lernzeit und der Testergebnisse hin.

pcaguy
quelle