차원이 대략 직교 (상관 관계가 0 인) 차원 데이터 세트 가 있다고 가정하십시오 .N
다음과 같은 측면에서 유틸리티가 있습니까?
- 심상
- 표현 (분류기 효율을 위해)
- 또는 다른 기준
데이터의 차원 축소를 수행하기 위해?
차원이 대략 직교 (상관 관계가 0 인) 차원 데이터 세트 가 있다고 가정하십시오 .N
다음과 같은 측면에서 유틸리티가 있습니까?
데이터의 차원 축소를 수행하기 위해?
답변:
@ 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 : 변수가 단위 분산으로 스케일링되지 않은 경우, 즉 상관 행렬 대신 공분산을 사용하는 경우를 논의하는 데 소요되는 시간은이 접근법이 어떻게 든 더 중요하다는 것을 나타내지 않아야합니다. 더 나은". 상황의 대칭은 더 미묘하기 때문에 더 긴 토론이 필요합니다.
로컬 선형 임베딩, 라플라시안 고유 맵 또는 t-SNE와 같은 보다 일반적인 비선형 차원 축소 매니 폴드 학습 방법을 시도 할 수 있습니다 .
N- 기준 치수간에 0 상관 관계를 유지하는 방식으로 데이터에 더 낮은 차원의 하위 공간 (매니 폴드)이있을 수 있습니다. 예를 들어 여기 에서 볼 수있는 원점 또는 파형에 대한 점의 원 . PCA는 이것을 선택하지 않지만 다른 방법도 사용합니다.
이러한 방법을 보는 것은 시각화 및 탐색 적 데이터 분석에 특히 흥미롭고 일반적입니다. 분류 자 또는 다른 모델 내에서 사용하려면 훈련에 적합하고 이러한 방법을 많이 배제한 테스트에 적용 할 수있는 방법으로 자신을 제한해야합니다. 이것이 주요 관심사 인 경우 비 감독 사전 훈련 및 (감독) 기능 엔지니어링 방법도 고려해야합니다.
모든 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)
본질적으로 "직교"는 "이미 작은 크기"를 의미합니다.
x1<-rnorm(100, sd=0.1)
및 pcsol <- princomp(df1, cor=FALSE)
과 차이가 우리가 보면 특히있다 summary(pcsol)
. (나는 cov가 cor보다 더 나은 접근법을 제안하지는 않는다. 단지 가능하다.)