Як я можу інтерпретувати те, що я отримую з PCA?


14

Як частина завдання університету, я повинен провести попередню обробку даних на досить величезному, багатоваріантному (> 10) необробленому наборі даних. Я не статистик у будь-якому сенсі цього слова, тому я трохи розгублений у тому, що відбувається. Заздалегідь вибачте за те, що, мабуть, смішно просте запитання - моя голова крутилася після перегляду різних відповідей і намагалася пройтись через статистику-розмову.

Я читав це:

  • PCA дозволяє зменшити розмірність моїх даних
  • Це відбувається шляхом об'єднання / видалення атрибутів / розмірів, які багато співвідносяться (і, таким чином, є трохи непотрібними)
  • Це робиться, знаходячи власних векторів за коваріаційними даними (завдяки чудовому навчальному посібнику, який я дотримувався, щоб дізнатися це)

Що чудово.

Однак мені дуже важко бачити, як я можу це практично застосувати до своїх даних. Наприклад (це не набір даних, який я буду використовувати, але спроба гідного прикладу, з яким люди можуть працювати), якби я мав набір даних із чимось на зразок ...

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

Я не зовсім впевнений, як би я інтерпретував будь-які результати.

Більшість навчальних посібників, які я бачив в Інтернеті, схоже, дають мені дуже математичний погляд на PCA. Я провів деякі дослідження щодо цього і пройшов за ними, - але я все ще не зовсім впевнений, що це означає для мене, хто просто намагається витягнути певну форму сенсу з цієї маси даних, що маю перед собою.

Просто виконання PCA на моїх даних (використовуючи пакет статистики) випиляє матрицю чисел NxN (де N - кількість вихідних розмірів), що для мене цілком грецьке.

Як я можу зробити PCA і взяти те, що я отримую таким чином, щоб потім вмістити його простою англійською мовою щодо оригінальних розмірів?


3
Ваші приклади даних показують суміш типів даних: стать - дихотомічний, вік - порядковий, інші 3 - інтервальні (і ті, що знаходяться в різних одиницях). Робити лінійний PCA підходить для інтервальних даних (але ви повинні спочатку z-стандартизувати ці змінні через одиниці). Дискусійно, чи підходить PCA для двійкових чи дихотомічних даних. Не слід використовувати порядкові дані в лінійному PCA. Але головне питання з вашими прикладними даними: навіщо взагалі робити з ним PCA; який сенс він міг би мати в цьому випадку?
ttnphns

Цей pdf корисний для застосування PCA . Інші публікації тут добре допомагають описувати "значення" результатів вашої PCA.
Ams

(Будь ласка, виправте мене, якщо я помиляюся) Я вважаю, що PCA є / може бути дуже корисним для того, щоб допомогти знайти тенденції в даних і з'ясувати, які атрибути можуть бути пов’язані з цим (що, мабуть, в кінці кінців призведе до з'ясування візерунки тощо). Мої деталі призначення про те, що у мене є цей масивний набір даних, і мені просто потрібно застосувати кластеризацію та класифікатори, і один із кроків, який він перелічує як життєво важливий для попередньої обробки, це PCA. Чи допоможе це, якби я спробував отримати деякі атрибути другого порядку з набору даних, я повинен спробувати отримати їх усі в інтервальних даних?
nitsua

3
Наразі я лише можу порекомендувати вам почитати більше на PCA (і на цьому веб-сайті). Багато невизначеностей напевно зникне.
ttnphns

Нижче наведено короткий приклад, який "може" дати вам гарне відчуття щодо PCA з точки зору регресії, з практичним прикладом і дуже мало, якщо взагалі, технічних термінів. sites.stat.psu.edu/~ajw13/stat505/fa06/16_princomp/…
leviathan

Відповіді:


15

Сторінки 13-20 опублікованого вами підручника містять дуже інтуїтивне геометричне пояснення того, як PCA використовується для зменшення розмірності.

Матриця 13х13, яку ви згадуєте, мабуть, матриця "завантаження" або "обертання" (я здогадуюсь, що у ваших початкових даних було 13 змінних?), Яку можна інтерпретувати одним із двох (еквівалентних) способів:

  1. Стовпці (абсолютні значення) вашої матриці завантаження описують, наскільки кожна змінна пропорційно "сприяє" кожному компоненту.

  2. Матриця обертання повертає ваші дані на основу, визначену вашою матрицею обертання. Отже, якщо у вас є двовимірні дані та помножте свої дані за допомогою матриці обертання, ваша нова вісь X буде першим головним компонентом, а нова вісь Y - другою основною складовою.

EDIT: Це питання задають багато, тому я просто збираюся викласти детальне візуальне пояснення того, що відбувається, коли ми використовуємо PCA для зменшення розмірності.

Розглянемо вибірку з 50 балів, генерованих з у = х + шуму. Перший головний компонент буде лежати вздовж лінії y = x, а другий компонент буде лежати вздовж лінії y = -x, як показано нижче.

введіть тут опис зображення

Співвідношення сторін трохи змінює це, але візьміть моє слово на те, що компоненти є ортогональними. Застосування PCA поверне наші дані, так що компоненти стануть осями x та y:

введіть тут опис зображення

Дані перед перетворенням є колами, дані після - перехресними. У цьому конкретному прикладі дані не обертаються настільки, як перевернуті по лінії y = -2x, але ми могли так само легко перевернути вісь y, щоб зробити це справді поворотом без втрати загальності, як описано тут .

Основна частина дисперсії, тобто інформація в даних, поширюється уздовж першого основного компонента (який представлений віссю x після того, як ми перетворили дані). Існує невелика дисперсія вздовж другого компонента (тепер ось Y), але ми можемо повністю скинути цей компонент без значної втрати інформації . Отже, щоб згортати це з двох вимірів на 1, ми дозволимо проекції даних на перший головний компонент повністю описати наші дані.

введіть тут опис зображення

Ми можемо частково відновити наші вихідні дані, повернувши (добре, проектуючи) їх назад на початкові осі.

введіть тут опис зображення

Темно-сині точки - це "відновлені" дані, тоді як порожні точки - це вихідні дані. Як бачимо, ми втратили частину інформації з вихідних даних, зокрема дисперсію у напрямку другого головного компонента. Але для багатьох цілей цей стислий опис (з використанням проекції вздовж першого основного компонента) може відповідати нашим потребам.

Ось код, який я використав для створення цього прикладу, якщо ви хочете його повторити самостійно. Якщо зменшити дисперсію компонента шуму на другому рядку, кількість даних, втрачених через перетворення PCA, також зменшиться, оскільки дані будуть конвергуватися на перший головний компонент:

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
Девід, будь ласка, утримайтеся від використання термінів "матриця обертання" (також власних векторів) та "матриця завантаження" взаємозамінно. За чистоту і не вводити людей в оману. Завантаження в PCA є власними векторами після нормалізації їх власними значеннями. Дякую.
ttnphns

3
@ttphns Я думаю, що це повністю залежить від того, який пакет ви використовуєте. Часто ці терміни повністю взаємозамінні. Розглянемо використання "навантажень" тут: utdallas.edu/~herve/abdi-awPCA2010.pdf . Також посилайтесь на функцію R, prcompде матриця навантаження - це лише матриця, стовпці якої є одиничними власними векторами. Я думаю, що ви надмірно технічні, і в більшості випадків я вважаю, що ці терміни використовуються взаємозамінно.
Девід Маркс

4
Вибачте, але я не погодився б. Причина: пам’ятайте, що навантаження є значущими (і в тому ж сенсі!) Для PCA і факторного аналізу. Навантаження прямо порівнянні з кореляціями / коваріаціями. Власні вектори - це косинуси обертання. У факторному аналізі багато методів не займаються обертанням ( на фазі вилучення). Отже, змішування двох термінів дійсно вводить в оману учнів і їх слід уникати.
ttnphns

Менший момент: правильне написання завжди є і є лише "головним", а не "принципом". Я відповідно відредагував, але одне зображення я не можу редагувати.
Нік Кокс

1
Ще одне візуальне зображення можна знайти тут setosa.io/ev/principal-component-analysis
SIslam

2

Я б сказав, що ваше запитання є кваліфікованим питанням не тільки в, cross validatedале і в stack overflow, де вам підкажуть, як реалізувати зменшення розміру в R (.. і т. Д.), Щоб ефективно допомогти вам визначити, який стовпчик / змінна сприяє кращому дисперсії весь набір даних.

PCA (аналіз основних компонентів) має таку ж функціональність, що і SVD (сингулярне значення декомпозиції), і вони є фактично таким же процесом після застосування scale/ перетворення z до набору даних.

Ось декілька ресурсів, які ви можете пройти за півгодини, щоб зрозуміти набагато краще.

Я не в змозі дати яскраве рішення щодо кодування, яке допоможе вам зрозуміти, як реалізувати svd і що робить кожен компонент, але люди приголомшливі, ось кілька дуже інформативних публікацій, які я використовував, щоб наздогнати сторону програми SVD, навіть якщо я знаю, як вручну обчислити 3by3 SVD проблему .. :)

  1. Клас аналізу даних Coursera Джеффа Ліка: Відео лекції / Примітки до класу
  2. Дуже інформативний студентський пост
  3. Пост від Американського математичного товариства.

Клас Джеффа Ліка дуже хороший для того, щоб відчути, що можна зробити з PCA. Хороша річ у тому, що він не потрапляє у складні математичні / статистичні деталі (які можна знайти в багатьох інших місцях), а надає практичний підхід, який показує, як реально використовувати його на даних.
nico

1

У PCA ви хочете описати дані в меншій кількості змінних. Ви можете отримати ту саму інформацію в меншій кількості змінних, ніж у всіх змінних. Наприклад, вивчені години та оцінка тесту можуть бути співвіднесеними, і нам не потрібно включати обидва.

У вашому прикладі, скажімо, ваша мета - виміряти, наскільки «хороший» студент / людина. Дивлячись на всі ці змінні, можна збентежити, як це зробити. PCA дозволяє нам чітко бачити, які студенти є добрими / поганими.

Якщо перший головний компонент пояснює більшість варіацій даних, то це все, що нам потрібно. Ви знайдете кореляцію між цим компонентом та всіма змінними. "Великі" кореляції означають важливі змінні. Наприклад, перший компонент може бути сильно співвіднесений з вивченими годинами та балом тесту. Настільки високі значення першого компонента вказують на високі значення часу дослідження та балів тесту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.