O'Reillys "Maschinelles Lernen für Hacker" besagt, dass jede Hauptkomponente einen Prozentsatz der Varianz darstellt. Ich habe den relevanten Teil der folgenden Seite zitiert (Kapitel 8, S.207). Im Gespräch mit einem anderen Experten stimmten sie darin überein, dass es sich um den Prozentsatz handelt.
Die 24 Komponenten summieren sich jedoch auf 133,2095%. Wie kann das sein?
Nachdem wir uns davon überzeugt haben, dass wir PCA verwenden können, wie machen wir das in R? Auch dies ist ein Ort, an dem R leuchtet: Die gesamte PCA kann in einer Codezeile ausgeführt werden. Wir verwenden die Funktion princomp, um PCA auszuführen:
pca <- princomp(date.stock.matrix[,2:ncol(date.stock.matrix)])
Wenn wir nur pca in R eingeben, sehen wir eine kurze Zusammenfassung der Hauptkomponenten:
Call: princomp(x = date.stock.matrix[, 2:ncol(date.stock.matrix)]) Standard deviations: Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7 29.1001249 20.4403404 12.6726924 11.4636450 8.4963820 8.1969345 5.5438308 Comp.8 Comp.9 Comp.10 Comp.11 Comp.12 Comp.13 Comp.14 5.1300931 4.7786752 4.2575099 3.3050931 2.6197715 2.4986181 2.1746125 Comp.15 Comp.16 Comp.17 Comp.18 Comp.19 Comp.20 Comp.21 1.9469475 1.8706240 1.6984043 1.6344116 1.2327471 1.1280913 0.9877634 Comp.22 Comp.23 Comp.24 0.8583681 0.7390626 0.4347983 24 variables and 2366 observations.
In dieser Zusammenfassung geben die Standardabweichungen an, wie viel Abweichung im Datensatz von den verschiedenen Hauptkomponenten verursacht wird. Die erste Komponente, Comp.1 genannt, macht 29% der Varianz aus, während die nächste Komponente 20% ausmacht. Am Ende macht die letzte Komponente, Comp.24, weniger als 1% der Varianz aus. Dies legt nahe, dass wir viel über unsere Daten lernen können, indem wir uns nur die erste Hauptkomponente ansehen.
[Code und Daten finden Sie auf Github .]
Standard deviations
ist ein wenig abweichend. Da es sich bei den Standardabweichungen tatsächlich um Standardabweichungen handelt, müssen wir sie quadrieren, um zu sehen, wie viel von der Varianz jede Komponente darstellt. Die erste Komponente würde Prozent der Gesamtvarianz.R
Software selbst zu verweisen . Diesen Fehler zu finden, war ein guter Fang (ich hoffe, Sie fanden es lohnend, herauszufinden, was mit PCA wirklich los ist)!Antworten:
Verwenden Sie
summary.princomp
diese Option , um den "Anteil der Varianz" und den "kumulativen Anteil" anzuzeigen.quelle
sqrt(pca$sdev[1]/sum(pca$sdev))
(ungefährsqrt(29.1/133.2)
) ergibt 0,4673904.sdev
impliziert, dass Sie die Standardabweichung betrachten , dh die Quadratwurzel der Varianz (oder unter Verwendung der Notation aus meiner Antwort), die den Unterschied erklären sollte. Versuchen Sie esstattdessen.pca$sdev[1]^2/sum(pca$sdev^2)
stats:::print.summary.princomp
zeigt dir, dass sie diesdev
Komponente quadriert , diestats:::princomp.default
diesqrt
der Eigenwerte darstellt.Sie sollten zu 100 % summieren .100 %.
Die Gesamtvarianz eines -variate Zufallsvariable X mit Kovarianzmatrix Σ ist definiert als t r ( Σ ) = σ 11 + σ 22 + ⋯ + σ p p .p X Σ
quelle
Hier ist ein R-Code, der die vorherigen Antworten ergänzt (
pca[["sdev"]]
wird normalerweise geschriebenpca$sdev
, führt jedoch zu einer falschen Formatierung im folgenden Codeausschnitt).Wie @Max hervorhebt, ist das Problem gelöst, wenn Sie anstelle der Standardabweichung mit der Varianz arbeiten und nicht vergessen, durch die Gesamtvarianz zu dividieren.
quelle