O'Reilly's „Machine Learning For Hackers” mówi, że każdy główny składnik reprezentuje procent wariancji. Cytowałem odpowiednią część poniższej strony (rozdział 8, s.207). W rozmowie z innym ekspertem zgodzili się, że jest to procent.
Jednak 24 składniki sumują się do 133,2095%. Jak to możliwe?
Przekonawszy się, że możemy korzystać z PCA, jak to zrobić w R? Znowu jest to miejsce, w którym świeci R: całość PCA może być wykonana w jednym wierszu kodu. Używamy funkcji princomp do uruchamiania PCA:
pca <- princomp(date.stock.matrix[,2:ncol(date.stock.matrix)])
Jeśli po prostu wpiszemy pca w R, zobaczymy krótkie podsumowanie głównych składników:
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.
W tym podsumowaniu odchylenia standardowe mówią nam, ile wariancji w zbiorze danych stanowią różne główne składniki. Pierwszy składnik, zwany Comp.1, stanowi 29% wariancji, podczas gdy następny składnik stanowi 20%. Do końca ostatni składnik, Comp.24, stanowi mniej niż 1% wariancji. Sugeruje to, że możemy się wiele dowiedzieć o naszych danych, patrząc tylko na pierwszy główny składnik.
[Kod i dane można znaleźć na github .]
Standard deviations
jest nieco niepoprawna. Ponieważ odchylenia standardowe są w rzeczywistości odchyleniami standardowymi, musimy je wyrównać, aby zobaczyć, ile wariancji reprezentuje każdy składnik. Pierwszy składnik reprezentowałby procent całkowitej wariancji.R
oprogramowania. Znalezienie tego błędu było dobrym chwytem (mam nadzieję, że odkrywanie, co naprawdę dzieje się w PCA, było satysfakcjonujące)!Odpowiedzi:
Użyj,
summary.princomp
aby zobaczyć „Proporcję wariancji” i „Skumulowaną proporcję”.źródło
sqrt(pca$sdev[1]/sum(pca$sdev))
(z grubszasqrt(29.1/133.2)
) daje 0,4673904.sdev
oznacza, że patrzysz na odchylenie standardowe , tj. Pierwiastek kwadratowy wariancji (lub , używając zapisu z mojej odpowiedzi), co powinno wyjaśnić różnicę. Spróbuj zamiast tego.pca$sdev[1]^2/sum(pca$sdev^2)
stats:::print.summary.princomp
pokazuje, że kwadrat komponuje do kwadratusdev
, costats:::princomp.default
pokazuje , że jest tosqrt
wartość własna.Powinny one sumować się do100 %.
Całkowitą wariancję zmiennej losowej zmiennej z macierzą kowariancji określa się jakoX Σp X Σ
źródło
Oto część kodu R, który uzupełnia poprzednie odpowiedzi (
pca[["sdev"]]
jest zwykle zapisywanypca$sdev
, ale powoduje nieprawidłowe formatowanie we fragmencie poniżej).Jak wskazuje @Max, praca z wariancją zamiast odchylenia standardowego i nie zapominanie o podzieleniu przez całkowitą wariancję rozwiązuje problem.
źródło