모든 변수가 대략 직교 인 데이터 세트의 차원 축소에 값이 있습니까?


답변:


8

@ Peter-Flom의 답변 아래에 남겨둔 의견을 분명히하고 싶었지만 아마도 답변에 쓸 가치가 있습니다. 거의 직교 인 데이터에서 PCA를 실행하여 차원을 어느 정도 줄일 수 있습니까? 답은 상관 관계 또는 공분산 행렬에서 PCA를 수행하는지 여부에 따라 "의존적"입니다 .

상관 행렬에서 PCA를 사용하는 경우, 이것은 동일 행렬과는 약간만 다르기 때문에 모든 방향을 "동일한 정보"로 만드는 구형 대칭이 있습니다. 변수의 분산을 PCA 이전의 변수로 재조정하는 것은 동일한 결과를 산출하는 수학적으로 동등한 접근법입니다. PCA 출력은 다른 것보다 약간 낮은 분산을 갖는 일부 구성 요소를 식별하지만 이는 표본의 우연한 변동으로 인한 것일 수 있습니다 (모집단에서 0의 상관 관계를 가정하는 경우). 구성 요소. 실제로 성분의 표준 편차 간의 이러한 차이는 표본 크기가 증가함에 따라 크기가 감소해야합니다. 이를 시뮬레이션으로 확인할 수 있습니다.

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를 수행 하는 경우 (동일하게 : PCA를 적용하기 전에 표준 편차를 1로 조정하지 않은 경우), 변수의 분포에 따라 답이 달라집니다. 변수가 동일한 분산을 갖는 경우 여전히 구형 대칭이 있으므로 "권한 방향"이없고 치수 축소를 수행 할 수 없습니다.

> 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

변수의 분산이 매우 다르면 (기하학적으로 다시 타원체이지만 모든 축이 다름) 직교성을 통해 첫 번째 PC가 가장 큰 분산 변수 등에 매우 많이로드 될 수 있습니다.

> 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를 사용하여 이점을 얻을 수 있는지 확실하지 않습니다.

Nota bene : 변수가 단위 분산으로 스케일링되지 않은 경우, 즉 상관 행렬 대신 공분산을 사용하는 경우를 논의하는 데 소요되는 시간은이 접근법이 어떻게 든 더 중요하다는 것을 나타내지 않아야합니다. 더 나은". 상황의 대칭은 더 미묘하기 때문에 더 긴 토론이 필요합니다.


내 대답은 아마도 원래 포스터 (PCA가 달성 할 수 있거나 달성 할 수없는 것에 관한 것)에 의해 제기 된 문제에 가장 잘 대답 할 것입니다. 그러나 독자들에게 대안 솔루션 을 제공하는 @RyanBressler의 답변을 살펴 보길 권한다 .
Silverfish

11

로컬 선형 임베딩, 라플라시안 고유 맵 또는 t-SNE와 같은 보다 일반적인 비선형 차원 축소 매니 폴드 학습 방법을 시도 할 수 있습니다 .

N- 기준 치수간에 0 상관 관계를 유지하는 방식으로 데이터에 더 낮은 차원의 하위 공간 (매니 폴드)이있을 수 있습니다. 예를 들어 여기 에서 볼 수있는 원점 또는 파형에 대한 점의 원 . 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

나는 오타를 고쳤다. 또한 스케일링에 대한 좋은 점입니다.
Peter Flom

2
공분산에 의존하는 차원 축소에만 적용되지 않습니까? 예를 들어, 다차원 스케일링이 여기서 축소되지 않는 이유는 무엇입니까?
shadowtalker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.