"Machine Learning For Hackers" O'Reilly mengatakan bahwa setiap komponen utama mewakili persentase perbedaan. Saya mengutip bagian yang relevan dari halaman di bawah ini (bab 8, hal.207). Berbicara dengan ahli lain, mereka sepakat itu persentase.
Namun 24 komponen berjumlah 133,2095%. Bagaimana itu bisa terjadi?
Setelah meyakinkan diri sendiri bahwa kita dapat menggunakan PCA, bagaimana kita melakukannya dalam R? Sekali lagi, ini adalah tempat di mana R bersinar: keseluruhan PCA dapat dilakukan dalam satu baris kode. Kami menggunakan fungsi princomp untuk menjalankan PCA:
pca <- princomp(date.stock.matrix[,2:ncol(date.stock.matrix)])
Jika kita cukup mengetik pca ke R, kita akan melihat ringkasan cepat dari komponen utama:
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.
Dalam ringkasan ini, standar deviasi memberi tahu kami berapa banyak varian dalam set data yang diperhitungkan oleh komponen utama yang berbeda. Komponen pertama, disebut Comp.1, menyumbang 29% dari varians, sedangkan komponen berikutnya menyumbang 20%. Pada akhirnya, komponen terakhir, Comp.24, menyumbang kurang dari 1% dari varians. Ini menunjukkan bahwa kita dapat belajar banyak tentang data kita hanya dengan melihat komponen utama pertama.
[Kode dan data dapat ditemukan di github .]
Standard deviations
ini sedikit salah. Karena standar deviasi sebenarnya adalah standar deviasi, kita harus mengaturnya untuk melihat berapa banyak varian yang diwakili oleh masing-masing komponen. Komponen pertama akan mewakili persen dari total varians.R
perangkat lunak itu sendiri. Menemukan kesalahan itu adalah tangkapan yang bagus (saya harap Anda merasa senang mengetahui apa yang sebenarnya terjadi dengan PCA)!Jawaban:
Gunakan
summary.princomp
untuk melihat "Proporsi Varian" dan "Proporsi Kumulatif".sumber
sqrt(pca$sdev[1]/sum(pca$sdev))
(kira-kirasqrt(29.1/133.2)
) memberi 0,4673904.sdev
menyiratkan bahwa Anda sedang melihat deviasi standar , yaitu akar kuadrat dari varians (atau , menggunakan notasi dari jawaban saya), yang seharusnya menjelaskan perbedaannya. Cobasaja.pca$sdev[1]^2/sum(pca$sdev^2)
stats:::print.summary.princomp
menunjukkan kepada Anda bahwa itu kuadratsdev
komponen, yangstats:::princomp.default
menunjukkan adalahsqrt
nilai eigen.Mereka harus berjumlah100 %.
Varians total dari -variate variabel acak X dengan matriks kovarians Σ didefinisikan sebagai t r ( Σ ) = σ 11 + σ 22 + ⋯ + σ p p .p X Σ
sumber
Berikut adalah beberapa kode R untuk melengkapi jawaban sebelumnya (
pca[["sdev"]]
biasanya ditulispca$sdev
, tetapi menyebabkan kesalahan format pada snippet di bawah).Jadi, seperti yang ditunjukkan oleh @Max, bekerja dengan varians alih-alih standar deviasi dan tidak lupa untuk membaginya dengan total varian menyelesaikan masalah.
sumber