Есть ли какое-либо значение в уменьшении размерности набора данных, где все переменные приблизительно ортогональны?

11

Предположим, у меня есть мерный набор данных, где измерений примерно ортогональны (имеют нулевую корреляцию).NNN

Есть ли какая-либо полезность с точки зрения:

  1. Визуализация
  2. Представление (для эффективности классификатора)
  3. Или другие критерии

выполнить уменьшение размерности данных?

user1172468
источник
3
Частично соответствующий ответ stats.stackexchange.com/a/92803/3277
ttnphns

Ответы:

8

Я хотел уточнить комментарий, который оставил под ответом @ Peter-Flom, но, вероятно, его стоит написать в ответе. В какой степени вы можете уменьшить размеры, используя PCA для почти ортогональных данных? Ответ «это зависит» от того, выполняете ли вы PCA по корреляционной или ковариационной матрице .

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

set.seed(123)
princompn <- function(n, sd1=1, sd2=1, sd3=1, sd4=1, cor=TRUE) {
    x1 <- rnorm(n, mean=0, sd=sd1)
    x2 <- rnorm(n, mean=0, sd=sd2)
    x3 <- rnorm(n, mean=0, sd=sd3)
    x4 <- rnorm(n, mean=0, sd=sd4)
    prcomp(cbind(x1,x2,x3,x4), scale.=cor)
}

Выход:

> pc100 <- princompn(100)
> summary(pc100)
Importance of components:
                          PC1    PC2    PC3    PC4
Standard deviation     1.0736 1.0243 0.9762 0.9193
Proportion of Variance 0.2882 0.2623 0.2382 0.2113
Cumulative Proportion  0.2882 0.5505 0.7887 1.0000
> 
> pc1m <- princompn(1e6)
> summary(pc1m)
Importance of components:
                          PC1    PC2    PC3    PC4
Standard deviation     1.0008 1.0004 0.9998 0.9990
Proportion of Variance 0.2504 0.2502 0.2499 0.2495
Cumulative Proportion  0.2504 0.5006 0.7505 1.0000

Однако, если вы делаете PCA, используя ковариационную матрицу вместо корреляционной матрицы (эквивалентно: если мы не масштабируем стандартные отклонения до 1 до применения PCA), то ответ зависит от разброса ваших переменных. Если ваши переменные имеют одинаковую дисперсию, то у нас все еще остается сферическая симметрия, поэтому нет «привилегированного направления» и уменьшение размеров не может быть достигнуто.

> pcEqual <- princompn(n=1e6, sd1=4, sd2=4, sd3=4, sd4=4, cor=FALSE)
> summary(pcEqual)
Importance of components:
                          PC1    PC2    PC3    PC4
Standard deviation     4.0056 4.0010 3.9986 3.9936
Proportion of Variance 0.2507 0.2502 0.2499 0.2492
Cumulative Proportion  0.2507 0.5009 0.7508 1.0000

Однако при наличии смеси переменных с высокой и низкой дисперсией симметрия больше похожа на эллипсоид с некоторыми широкими осями, а другие тонкими. В этой ситуации произойдет загрузка компонентов с высокой дисперсией на переменные с высокой дисперсией (где эллипсоид широкий) и загрузка компонентов с низкой дисперсией на переменные с низкой дисперсией (в каких направлениях эллипсоид узкий).

> pcHiLo <- princompn(n=1e6, sd1=4, sd2=4, sd3=1, sd4=1, cor=FALSE)
> summary(pcHiLo)
Importance of components:
                          PC1    PC2    PC3     PC4
Standard deviation     4.0018 3.9985 1.0016 1.00005
Proportion of Variance 0.4709 0.4702 0.0295 0.02941
Cumulative Proportion  0.4709 0.9411 0.9706 1.00000
> round(pcHiLo$rotation, 3)
      PC1   PC2    PC3    PC4
x1  0.460 0.888  0.000  0.000
x2 -0.888 0.460  0.000  0.000
x3  0.000 0.000 -0.747 -0.664
x4  0.000 0.000  0.664 -0.747

Если переменные имеют очень разные отклонения (опять-таки геометрически эллипсоид, но все оси различаются), то ортогональность позволяет первому ПК очень сильно загружаться в переменную с наибольшей дисперсией и так далее.

> pc1234 <-  princompn(n=1e6, sd1=1, sd2=2, sd3=3, sd4=4, cor=FALSE)
> summary(pc1234)
Importance of components:
                          PC1    PC2    PC3     PC4
Standard deviation     3.9981 3.0031 1.9993 1.00033
Proportion of Variance 0.5328 0.3006 0.1332 0.03335
Cumulative Proportion  0.5328 0.8334 0.9667 1.00000
> round(pc1234$rotation, 3)
     PC1    PC2    PC3   PC4
x1 0.000  0.000 -0.001 1.000
x2 0.001 -0.001  1.000 0.001
x3 0.003 -1.000 -0.001 0.000
x4 1.000  0.003 -0.001 0.000

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

Примечание: продолжительность времени, затрачиваемого на обсуждение случая, когда переменные не масштабируются до единичной дисперсии - то есть с использованием ковариации, а не матрицы корреляции, - не должна рассматриваться как указание на то, что этот подход как-то более важен, и, конечно, не на том, что он это лучше". Симметрия ситуации просто более тонкая, поэтому требуется более длительное обсуждение.

тарпон
источник
Мой ответ, возможно, лучше всего отвечает на проблему, изложенную в оригинальном постере (о том, чего может или не может добиться PCA), который, как я полагаю, объясняет зеленую галочку! Но я призываю читателей взглянуть на ответ @ RyanBressler, который предлагает альтернативные решения .
Серебряная рыба
11

Вы можете попробовать более общий метод обучения нелинейного многообразия с уменьшением размерности, такой как локально линейное вложение, лапласианские собственные карты или t-SNE.

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

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

Райан Бресслер
источник
6

Если все N переменных примерно ортогональны, то уменьшение размера сделает относительно небольшое уменьшение. Например, вR

set.seed(123)
x1 <- rnorm(100)
x2 <- rnorm(100)
x3 <- rnorm(100)
x4 <- rnorm(100)
x5 <- rnorm(100)
x6 <- rnorm(100)
x7 <- rnorm(100)
x8 <- rnorm(100)
x9 <- rnorm(100)
x10 <- rnorm(100)

df1 <- cbind(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10)

pcsol <- princomp(df1)
loadings(pcsol)

По сути, «ортогональный» подразумевает «уже в его наименьшем размере».

Питер Флом - Восстановить Монику
источник
2
у вас есть небольшая опечатка в "orthongonal"
Silverfish
6
@Silverfish, orthon - «гуманоид среднего роста с длинными светлыми волосами и загорелой кожей в красно-коричневых туфлях». Хотя вы можете быть правы в том, что Петр имел в виду другое.
ttnphns
4
Стоит ли указывать, что этот ответ зависит от того, как масштабируются переменные? Если имеются высокие и низкие дисперсионные переменные и мы выполняем PCA на ковариационной, а не корреляционной матрице, то будут отбрасываться компоненты с малой дисперсией (ортогональность просто означает, что их нагрузки сильно идентифицируют их с одной переменной с низкой дисперсией каждая). Сделайте следующие небольшие изменения: x1<-rnorm(100, sd=0.1)и pcsol <- princomp(df1, cor=FALSE)есть разница, особенно если мы посмотрим summary(pcsol). (Я не предполагаю, что cov - лучший подход, чем cor, просто это возможно.)
Silverfish
Я исправил опечатку, спасибо. Кроме того, хороший момент по поводу масштабирования.
Питер Флом - Восстановить Монику
2
Разве это не относится только к уменьшению размеров, которое зависит от ковариации? Почему бы, скажем, многомерное масштабирование не сделать здесь сокращение?
Shadowtalker