Как я могу интерпретировать, что я получаю от 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 для моих данных (с использованием пакета stats) выплевывает матрицу чисел NxN (где N - число исходных измерений), что для меня совершенно естественно.

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


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

Этот PDF полезен для применения PCA . Другие посты здесь хорошо описывают «значение» ваших результатов PCA.
Ams

(Пожалуйста, поправьте меня, если я ошибаюсь) Я считаю, что PCA является / может быть очень полезным для помощи в поиске тенденций в данных и выяснении, какие атрибуты могут относиться к каким (которые, я полагаю, в конечном итоге приведут к выяснению узоры и тому подобное). В моем задании подробно описывается, что у меня есть этот массивный набор данных, и мне просто нужно применить кластеризацию и классификаторы, и одним из шагов, перечисленных в нем как жизненно важных для предварительной обработки, является PCA. Поможет ли это, если я попытаюсь извлечь некоторые атрибуты второго порядка из набора данных, которые мне нужно попробовать, и получить их все в данных интервала?
ницуа

3
В настоящее время я могу только порекомендовать вам прочитать больше о PCA (на этом сайте тоже). Многие неопределенности наверняка уйдут.
ttnphns

Много хороших ссылок выше, вот короткий пример, который «мог» дать вам хорошее представление о PCA с точки зрения регрессии, с практическим примером и очень небольшим, если вообще, техническими терминами. sites.stat.psu.edu/~ajw13/stat505/fa06/16_princomp/…
Левиафан

Ответы:


15

На страницах 13-20 учебника, который вы опубликовали, дается очень интуитивное геометрическое объяснение того, как PCA используется для уменьшения размерности.

Матрица 13x13, которую вы упоминаете, вероятно, является матрицей «загрузки» или «вращения» (я предполагаю, что ваши исходные данные имели 13 переменных?), Которые можно интерпретировать одним из двух (эквивалентных) способов:

  1. Столбцы (абсолютные значения) вашей матрицы загрузки описывают, сколько каждая переменная пропорционально «вносит» в каждый компонент.

  2. Матрица вращения вращает ваши данные на основе, определенной вашей матрицей вращения. Поэтому, если у вас есть двумерные данные и вы умножаете их на матрицу вращения, ваша новая ось X будет первым основным компонентом, а новая ось Y будет вторым основным компонентом.

РЕДАКТИРОВАТЬ: Этот вопрос часто задают, поэтому я просто выложу подробное визуальное объяснение того, что происходит, когда мы используем PCA для уменьшения размерности.

Рассмотрим выборку из 50 точек, созданных из шума y = x +. Первый главный компонент будет лежать вдоль линии 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. Хорошая вещь состоит в том, что это не входит в сложные математические / статистические детали (которые могут быть найдены во многих других местах), а скорее обеспечивает практический подход, показывающий, как действительно использовать это на данных.
Нико

1

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

В вашем примере, скажем, ваша цель - измерить, насколько «хорош» студент / человек. Глядя на все эти переменные, может быть непонятно, как это сделать. PCA позволяет нам четко видеть, какие студенты хорошие / плохие.

Если первый основной компонент объясняет большую часть вариаций данных, то это все, что нам нужно. Вы найдете корреляцию между этим компонентом и всеми переменными. «Большие» корреляции означают важные переменные. Например, первый компонент может быть сильно коррелирован с изученными часами и оценкой теста. Столь высокие значения первого компонента указывают на высокие значения времени обучения и оценки теста.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.