센터링은 PCA (SVD 및 고유 분해)에서 어떻게 차이를 만들어 줍니까?


30

PCA의 데이터 중심화 (또는 의미가없는)는 어떤 차이가 있습니까? 수학이 더 쉬워 지거나 첫 번째 PC가 변수의 수단에 의해 지배되는 것을 막는다 고 들었지만 아직 개념을 제대로 파악할 수 없었습니다.

예를 들어, 여기서 가장 좋은 대답 은 회귀 및 PCA에서 데이터를 중심에 어떻게 차단을 제거합니까? 중심이 포인트 클라우드의 주축이 아니라 원점을 통해 첫 번째 PCA를 끌어 당기는 방법을 설명합니다. 공분산 행렬의 고유 벡터에서 PC를 얻는 방법에 대한 나의 이해를 바탕으로, 왜 이런 일이 일어날 지 이해할 수 없습니다.

또한, 센터링이 있거나없는 내 자신의 계산은 거의 의미가없는 것 같습니다.

irisR 의 데이터 세트에서 setosa 꽃을 고려하십시오 . 샘플 공분산 행렬의 고유 벡터와 고유 값을 다음과 같이 계산했습니다.

data(iris)
df <- iris[iris$Species=='setosa',1:4]
e <- eigen(cov(df))
> e
$values
[1] 0.236455690 0.036918732 0.026796399 0.009033261

$vectors
            [,1]       [,2]       [,3]        [,4]
[1,] -0.66907840  0.5978840  0.4399628 -0.03607712
[2,] -0.73414783 -0.6206734 -0.2746075 -0.01955027
[3,] -0.09654390  0.4900556 -0.8324495 -0.23990129
[4,] -0.06356359  0.1309379 -0.1950675  0.96992969

데이터 세트를 먼저 가운데에 놓으면 정확히 동일한 결과를 얻습니다. 센터링이 공분산 행렬을 전혀 변경하지 않기 때문에 이것은 매우 명백한 것 같습니다.

df.centered <- scale(df,scale=F,center=T)
e.centered<- eigen(cov(df.centered))
e.centered

prcomp함수는 중심 및 비 중심 데이터 세트 모두에 대해 정확하게이 고유 값-고유 벡터 조합을 생성합니다.

p<-prcomp(df)
p.centered <- prcomp(df.centered)
Standard deviations:
[1] 0.48626710 0.19214248 0.16369606 0.09504347

Rotation:
                     PC1        PC2        PC3         PC4
Sepal.Length -0.66907840  0.5978840  0.4399628 -0.03607712
Sepal.Width  -0.73414783 -0.6206734 -0.2746075 -0.01955027
Petal.Length -0.09654390  0.4900556 -0.8324495 -0.23990129
Petal.Width  -0.06356359  0.1309379 -0.1950675  0.96992969

그러나이 prcomp기능에는 기본 옵션이 center = TRUE있습니다. 이 옵션을 비활성화하면 중앙 집중화되지 않은 데이터에 대해 다음과 같은 PC가 생성됩니다 ( false로 설정되어 p.centered있으면 동일하게 유지됨 center).

p.uncentered <- prcomp(df,center=F)
> p.uncentered
Standard deviations:
[1] 6.32674700 0.22455945 0.16369617 0.09766703

Rotation:
                    PC1         PC2        PC3         PC4
Sepal.Length -0.8010073  0.40303704  0.4410167  0.03811461
Sepal.Width  -0.5498408 -0.78739486 -0.2753323 -0.04331888
Petal.Length -0.2334487  0.46456598 -0.8317440 -0.19463332
Petal.Width  -0.0395488  0.04182015 -0.1946750  0.97917752

중심이없는 데이터의 공분산 행렬에 대한 내 고유 벡터 계산과 다른 이유는 무엇입니까? 계산과 관련이 있습니까? 필자는 prcomp고유 값 분해 대신 SVD 방법이라는 것을 사용하여 PC를 계산하는 것을 언급했습니다 . 이 함수 princomp는 후자를 사용하지만 결과는와 동일합니다 prcomp. 내 문제가이 게시물 상단에 설명 된 답변과 관련이 있습니까?

XXX/(n1)


5
Based on my understanding of how the PC's are obtained from the covariance matrix's eigenvectors...링크 된 답변에서 의견을 읽으십시오. 공분산은 데이터의 중심을 의미하며 PCA "공분산"= PCA는 중앙 데이터를 의미합니다. 원래 변수를 중심에 두지 않으면 해당 X데이터를 기반으로하는 PCA는 X'X/n [or n-1]행렬에서 = PCA가됩니다 . 중요한 개요 : stats.stackexchange.com/a/22520/3277 도 참조하십시오 .
ttnphns

2
through the origin, rather than the main axis of the point cloud. PCA는 항상 원점을 뚫습니다. 데이터가 중심에 있으면 원점 = 중심입니다.
ttnphns

XX

1
S

중심 구성 요소와 중심화되지 않은 PCA (일반적으로 동일하지 않음)에 대한 논의는 주요 구성 요소 분석 : 검토 및 최근 개발 을 참조하십시오 .
이보 양

답변:


33

DataCovariance matrixEigen-decomposition,

[위키 백과 :] 타원의 축을 찾으려면 먼저 데이터 셋에서 각 변수의 평균을 빼서 데이터를 원점을 중심으로해야합니다. 그런 다음 데이터의 공분산 행렬을 계산합니다.

따라서 이것은 매우 정확한 공식이 아님을 알 수 있습니다.

XX/(n1)X

Data XMatrix XX/(n1)Eigen-decomposition,

중심화가 중요하고 @ttnphns에서 설명하고 설명하는 효과 가 있습니다. 회귀 분석 및 PCA에서 데이터를 중심화하는 방법은 어떻게 차단을 제거합니까?

X

Data XSingular value decomposition.

Xsvd


1
더 깔끔한 논리를 만들기 위해 귀하의 답변에 대한 조언을 받았습니다. 두 개의 첫 번째 (고유) 예제 X'X/(n-1)에서 SSCP 매트릭스가 아닌 분해 MSCP 매트릭스에 대해 말하고 있기 때문에 X'Xsvd 예제에서 동등성을 보여주는 X/sqrt(n-1)대신 X(현재 말한대로) 분해하는 것입니다 . [물론 차이는 고유 벡터가 아닌 스케일 부분 (고유 값)에만 있지만, 실용적으로는 더 나을 것이라고 생각합니다.] 두 번째 요점은 중심을 맞추는 즉시 X베셀 교정 n-1이 필요 하지 않다는 것을 상기시키는 것입니다 . n환영합니다.
ttnphns

1
좋은 점은 @ttnphns입니다. 나는 그것들을 어떻게 내 대답에 포함시킬 수 있을지 생각할 것이다. 나는이 답변이 더 많은 사람들이 이해할 수 있기를 원했기 때문에 불필요한 수학적 세부 사항으로 들어 가지 않도록 노력했다.
amoeba는
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.