Bagaimana saya bisa menafsirkan apa yang saya dapatkan dari PCA?


14

Sebagai bagian dari tugas Universitas, saya harus melakukan pra-pemrosesan data pada kumpulan data mentah multivariat (> 10) yang cukup besar. Saya bukan ahli statistik dalam arti kata, jadi saya agak bingung tentang apa yang terjadi. Permintaan maaf sebelumnya untuk apa yang mungkin merupakan pertanyaan sederhana yang menggelikan - kepalaku berputar setelah melihat berbagai jawaban dan mencoba mengarungi statistik-berbicara.

Saya pernah membaca itu:

  • PCA memungkinkan saya mengurangi dimensi data saya
  • Ia melakukannya dengan menggabungkan / menghapus atribut / dimensi yang banyak berkorelasi (dan dengan demikian sedikit tidak perlu)
  • Ia melakukannya dengan mencari vektor eigen pada data kovarians (berkat tutorial yang bagus yang saya ikuti untuk mempelajari ini)

Bagus sekali.

Namun, saya benar-benar berjuang untuk melihat bagaimana saya bisa menerapkan ini secara praktis ke data saya. Misalnya (ini bukan set data yang akan saya gunakan, tetapi upaya contoh yang layak dapat digunakan oleh orang-orang), jika saya memiliki set data dengan sesuatu seperti ...

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
...          ...     ...          ...               ...                    ...            ...

Saya tidak yakin bagaimana saya akan menafsirkan hasil apa pun.

Sebagian besar tutorial yang saya lihat online tampaknya memberi saya pandangan yang sangat matematis tentang PCA. Saya telah melakukan beberapa penelitian ke dalamnya dan mengikuti mereka melalui - tetapi saya masih tidak sepenuhnya yakin apa artinya ini bagi saya, yang hanya mencoba untuk mengekstrak beberapa bentuk makna dari tumpukan data yang saya miliki di depan saya.

Cukup melakukan PCA pada data saya (menggunakan paket statistik) mengeluarkan matriks angka NxN (di mana N adalah jumlah dimensi asli), yang sepenuhnya Yunani bagi saya.

Bagaimana saya bisa melakukan PCA dan mengambil apa yang saya dapatkan dengan cara yang kemudian dapat saya masukkan ke dalam bahasa Inggris sederhana dalam hal dimensi aslinya?


3
Contoh data Anda menunjukkan campuran tipe data: Seks adalah dikotomis, Usia adalah ordinal, 3 lainnya adalah interval (dan mereka berada di unit yang berbeda). Melakukan PCA linier adalah tepat untuk data interval (tetapi Anda harus terlebih dahulu melakukan z-standarisasi variabel-variabel tersebut, karena unit-unitnya). Masih bisa diperdebatkan apakah PCA sesuai untuk data biner atau dikotomis . Anda seharusnya tidak menggunakan data ordinal dalam PCA linier. Tapi pertanyaan utama dengan contoh data Anda: mengapa sama sekali untuk melakukan PCA dengan itu; apa artinya dalam kasus ini?
ttnphns

Pdf ini berguna untuk aplikasi PCA . Posting lain di sini melakukan pekerjaan dengan baik sebagai menggambarkan "makna" dari hasil PCA Anda.
ams

(Tolong koreksi saya jika saya salah) Saya percaya bahwa PCA adalah / bisa sangat berguna untuk membantu menemukan tren dalam data dan untuk mencari tahu atribut mana yang berhubungan dengan yang (yang saya kira pada akhirnya akan mengarah pada mencari tahu pola dan sejenisnya). Tugas saya merinci bahwa saya memiliki kumpulan data besar ini dan saya hanya perlu menerapkan pengelompokan dan pengklasifikasi, dan salah satu langkah yang tercantum sebagai hal yang vital untuk pra-pemrosesan adalah PCA. Apakah akan membantu jika saya mencoba mengekstrak beberapa atribut urutan kedua dari kumpulan data yang saya harus coba dan dapatkan semuanya dalam data interval?
nitsua

3
Saya hanya dapat merekomendasikan Anda, saat ini, untuk membaca lebih lanjut tentang PCA (di situs ini juga). Banyak ketidakpastian pasti akan hilang.
ttnphns

Banyak tautan bagus di atas, berikut adalah contoh singkat yang "bisa" memberi Anda perasaan baik tentang PCA dalam hal regresi, dengan contoh praktis dan sangat sedikit, jika sama sekali, istilah teknis. sites.stat.psu.edu/~ajw13/stat505/fa06/16_princomp/…
leviathan

Jawaban:


15

Halaman 13-20 dari tutorial yang Anda posting memberikan penjelasan geometris yang sangat intuitif tentang bagaimana PCA digunakan untuk pengurangan dimensi.

Matriks 13x13 yang Anda sebutkan mungkin adalah matriks "memuat" atau "rotasi" (Saya menduga data asli Anda memiliki 13 variabel?) Yang dapat ditafsirkan dalam salah satu dari dua cara (setara):

  1. Kolom (nilai absolut) dari matriks pemuatan Anda menggambarkan seberapa banyak masing-masing variabel "berkontribusi" secara proporsional untuk setiap komponen.

  2. Matriks rotasi memutar data Anda ke dasar yang ditentukan oleh matriks rotasi Anda. Jadi jika Anda memiliki data 2-D dan mengalikan data Anda dengan matriks rotasi Anda, sumbu X baru Anda akan menjadi komponen utama pertama dan sumbu Y baru akan menjadi komponen utama kedua.

EDIT: Pertanyaan ini banyak ditanyakan, jadi saya hanya akan memberikan penjelasan visual yang terperinci tentang apa yang terjadi ketika kita menggunakan PCA untuk pengurangan dimensi.

Pertimbangkan sampel 50 poin yang dihasilkan dari y = x + noise. Komponen utama pertama akan terletak di sepanjang garis y = x dan komponen kedua akan terletak di sepanjang garis y = -x, seperti yang ditunjukkan di bawah ini.

masukkan deskripsi gambar di sini

Rasio aspek mengacaukannya sedikit, tetapi anggap saja bahwa komponennya ortogonal. Menerapkan PCA akan memutar data kami sehingga komponen menjadi sumbu x dan y:

masukkan deskripsi gambar di sini

Data sebelum transformasi adalah lingkaran, data setelahnya adalah salib. Dalam contoh khusus ini, data tidak dirotasi sebanyak seperti membalik melewati garis y = -2x, tetapi kita bisa dengan mudah membalikkan sumbu y untuk menjadikan ini benar-benar rotasi tanpa kehilangan keumuman seperti dijelaskan di sini .

Sebagian besar varian, yaitu informasi dalam data, tersebar di sepanjang komponen utama pertama (yang diwakili oleh sumbu x setelah kami mengubah data). Ada sedikit perbedaan di sepanjang komponen kedua (sekarang sumbu y), tetapi kita dapat menjatuhkan komponen ini sepenuhnya tanpa kehilangan informasi yang berarti . Jadi untuk memecah ini dari dua dimensi menjadi 1, kami membiarkan proyeksi data ke komponen utama pertama sepenuhnya menggambarkan data kami.

masukkan deskripsi gambar di sini

Kami dapat memulihkan sebagian data asli kami dengan memutar (ok, memproyeksikan) kembali ke sumbu asli.

masukkan deskripsi gambar di sini

Titik biru gelap adalah data "pulih", sedangkan titik kosong adalah data asli. Seperti yang Anda lihat, kami telah kehilangan beberapa informasi dari data asli, khususnya perbedaan arah komponen utama kedua. Tetapi untuk banyak tujuan, deskripsi terkompresi ini (menggunakan proyeksi sepanjang komponen utama pertama) mungkin sesuai dengan kebutuhan kita.

Inilah kode yang saya gunakan untuk menghasilkan contoh ini jika Anda ingin mereplikasi sendiri. Jika Anda mengurangi varians komponen derau pada baris kedua, jumlah data yang hilang oleh transformasi PCA akan berkurang juga karena data akan menyatu ke komponen utama pertama:

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)

5
David, tolong, jangan menggunakan istilah "rotasi matrix" (alias vektor eigen) dan "memuat matriks" secara bergantian. Untuk kemurnian dan tidak menyesatkan orang. Pemuatan dalam PCA adalah vektor eigen setelah dinormalisasi dengan nilai eigennya. Terima kasih.
ttnphns

3
@ttphns Saya pikir itu sepenuhnya tergantung pada paket apa yang Anda gunakan. Seringkali istilah-istilah ini sepenuhnya dapat dipertukarkan. Pertimbangkan penggunaan "pemuatan" di sini: utdallas.edu/~herve/abdi-awPCA2010.pdf . Juga referensi fungsi R di prcompmana matriks memuat hanya matriks yang kolomnya adalah vektor unit eigen. Saya pikir Anda sedang tidak perlu teknis, dan dalam banyak kasus saya percaya istilah ini digunakan secara bergantian.
David Marx

4
Maaf, tapi saya tidak setuju. Alasan: ingat bahwa memuat keduanya bermakna (dan dalam arti yang sama!) Untuk PCA dan analisis faktor. Memuat secara langsung sebanding dengan korelasi / kovariansi. Vektor eigen adalah cosinus rotasi. Dalam analisis faktor, banyak metode tidak berurusan dengan rotasi ( pada fase ekstraksi). Jadi, mencampurkan kedua istilah ini memang menyesatkan siswa dan harus dihindari.
ttnphns

Poin yang lebih kecil: ejaan yang benar selalu dan hanya "prinsipal", bukan "prinsip". Saya telah mengeditnya, tetapi satu gambar yang tidak dapat saya edit.
Nick Cox

1
Visual lain dapat ditemukan di sini setosa.io/ev/principal-component-analysis
SIslam

2

Saya akan mengatakan pertanyaan Anda adalah pertanyaan yang memenuhi syarat tidak hanya di cross validatedtetapi juga di stack overflow, di mana Anda akan diberitahu bagaimana menerapkan pengurangan dimensi dalam R (.. dll.) Untuk secara efektif membantu Anda mengidentifikasi kolom / variabel mana yang berkontribusi lebih baik pada varian dari seluruh dataset.

PCA (Principal Component Analysis) memiliki fungsi yang sama dengan SVD (Singular Value Decomposition), dan mereka sebenarnya proses yang sama persis setelah menerapkan scale/ z-transformasi ke dataset.

Berikut adalah beberapa sumber yang dapat Anda lalui dalam waktu setengah jam untuk mendapatkan pemahaman yang lebih baik.

Saya tidak mampu memberikan solusi pengkodean yang jelas untuk membantu Anda memahami cara menerapkan svd dan apa yang dilakukan masing-masing komponen, tetapi orang-orang hebat, berikut adalah beberapa posting yang sangat informatif yang saya gunakan untuk mengejar ketinggalan dengan sisi aplikasi SVD walaupun saya tahu bagaimana cara menghitung masalah 3by3 SVD .. :)

  1. Kelas Analisis Data Coursera oleh Jeff Leek: Kuliah Video / Catatan Kelas
  2. Pos siswa yang sangat informatif
  3. Sebuah posting dari American Mathematical Society.

Kelas Jeff Leek sangat bagus untuk mengetahui apa yang dapat Anda lakukan dengan PCA. Hal yang baik adalah bahwa itu tidak masuk ke rincian matematika / statistik yang kompleks (yang dapat ditemukan di banyak tempat lain) tetapi lebih memberikan pendekatan langsung yang menunjukkan bagaimana cara menggunakannya pada data.
nico

1

Di PCA Anda ingin menggambarkan data dalam variabel yang lebih sedikit. Anda bisa mendapatkan informasi yang sama dalam lebih sedikit variabel daripada dengan semua variabel. Sebagai contoh, jam belajar dan skor tes mungkin berkorelasi dan kami tidak harus memasukkan keduanya.

Dalam contoh Anda, katakanlah tujuan Anda adalah untuk mengukur seberapa "baik" seorang siswa / orang. Melihat semua variabel ini, dapat membingungkan untuk melihat bagaimana melakukan ini. PCA memungkinkan kita untuk melihat dengan jelas siswa mana yang baik / buruk.

Jika komponen utama pertama menjelaskan sebagian besar variasi data, maka ini yang kita butuhkan. Anda akan menemukan korelasi antara komponen ini dan semua variabel. Korelasi "besar" menandakan variabel penting. Sebagai contoh, komponen pertama mungkin sangat berkorelasi dengan jam belajar dan skor tes. Jadi nilai tinggi dari komponen pertama menunjukkan nilai tinggi dari waktu belajar dan skor tes.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.