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를 수행하면 NxN 행렬 (여기서 N은 원래 차원의 수)을 뱉어냅니다.

PCA를 수행하고 원래 크기로 일반 영어로 넣을 수있는 방법을 어떻게 취할 수 있습니까?


3
예시 데이터는 데이터 유형이 혼합되어 있음을 보여줍니다. 성별은 이분법이고, 연령은 서수이며, 나머지 3 개는 간격 (및 다른 단위)입니다. 선형 PCA는 구간 데이터에 적합하지만 단위로 인해 먼저 변수를 z 표준화해야합니다. PCA가 이진 또는 이분법 데이터에 적합한 지 여부는 논쟁의 여지가 있습니다. 선형 PCA에서 서수 데이터를 사용해서는 안됩니다. 그러나 귀하의 예제 데이터와 주요 질문 : 왜 전혀 그것과 PCA를 수행하는 단계; 이 경우 어떤 의미가 있습니까?
ttnphns

이 pdf는 PCA응용에 유용합니다 . 여기의 다른 게시물은 PCA 결과의 "의미"를 설명하는 데 유용합니다.
AMS

(잘못되면 수정하십시오) PCA는 데이터의 추세를 찾고 어떤 속성이 어떤 속성과 관련이 있는지 파악하는 데 매우 유용하다고 생각합니다. 패턴 등). 이 방대한 데이터 세트가 있고 클러스터링 및 분류기를 적용하기 만하면되는 할당 세부 사항과 사전 처리에 필수적인 단계 중 하나는 PCA입니다. 데이터 세트에서 일부 2 차 속성을 추출하려고 시도하면 간격 데이터에서 모두 가져와야합니다.
nitsua

3
현재 PCA (이 사이트에서도)에서 더 많은 내용을 읽을 것을 권장합니다. 많은 불확실성이 사라질 것입니다.
ttnphns

위의 많은 훌륭한 연결들, 여기서는 실제적인 예와 기술적 인 용어가 거의없는 회귀와 관련하여 PCA에 대해 좋은 느낌을 줄 수있는 짧은 예입니다. sites.stat.psu.edu/~ajw13/stat505/fa06/16_princomp/…
leviathan

답변:


15

게시 한 자습서의 13-20 페이지는 PCA가 차원 축소에 어떻게 사용되는지에 대한 매우 직관적 인 기하학적 설명을 제공합니다.

언급 한 13x13 행렬은 아마도 "로드 중"또는 "회전"행렬입니다 (원래 데이터에 13 개의 변수가 있다고 생각합니까?)는 두 가지 (동등한) 방법 중 하나로 해석 할 수 있습니다.

  1. 로딩 매트릭스의 (절대 값) 열은 각 변수가 각 구성 요소에 비례 적으로 "기여"되는 정도를 나타냅니다.

  2. 회전 행렬은 회전 행렬에 의해 정의 된 기준으로 데이터를 회전시킵니다. 따라서 2 차원 데이터가 있고 데이터에 회전 행렬을 곱하면 새 X 축이 첫 번째 주성분이되고 새 Y 축이 두 번째 주성분이됩니다.

편집 :이 질문은 많이 제기되므로 차원 축소를 위해 PCA를 사용할 때 무슨 일이 일어나고 있는지에 대한 자세한 시각적 설명을 제시하려고합니다.

y = x + 노이즈에서 생성 된 50 포인트 샘플을 고려하십시오. 아래 그림과 같이 첫 번째 주요 구성 요소는 선 y = x를 따라 배치되고 두 번째 구성 요소는 선 y = -x를 따라 배치됩니다.

여기에 이미지 설명을 입력하십시오

종횡비는 약간 엉망이지만 구성 요소가 직교하다는 것을 내 말로 받아들입니다. PCA를 적용하면 데이터가 회전하여 구성 요소가 x 및 y 축이됩니다.

여기에 이미지 설명을 입력하십시오

변환 전의 데이터는 원이고 이후의 데이터는 교차입니다. 이 특정 예에서, 데이터는 y = -2x 선을 따라 뒤집히는만큼 회전되지 않았지만 여기에서 설명한 바와 같이 일반성을 잃지 않고 진정한 회전을하기 위해 y 축을 쉽게 뒤집을 수있었습니다 . .

분산의 대부분, 즉 데이터 의 정보 는 첫 번째 주성분 (데이터를 변환 한 후 x 축으로 표시됨)을 따라 분산됩니다. 두 번째 구성 요소 (현재 y 축)를 따라 약간의 차이가 있지만, 정보의 큰 손실없이이 구성 요소를 완전히 삭제할 수 있습니다 . 이를 2 차원에서 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
David는 "rotation matrix"(일명 고유 벡터)와 "loading matrix"라는 용어를 서로 바꾸어 사용하지 마십시오. 사람들을 오도하지 않고 순결을 위해. PCA의 부하는 고유 벡터이다 자신의 고유 값으로 정상화. 감사합니다.
ttnphns

3
@ttphns 나는 그것이 어떤 패키지를 사용 하느냐에 전적으로 달려 있다고 생각합니다. 종종 이러한 용어는 완전히 호환됩니다. utdallas.edu/~herve/abdi-awPCA2010.pdf 에서 "로드"사용을 고려하십시오 . 또한 prcomp로딩 행렬이 열이 단위 고유 벡터 인 행렬 인 R 함수도 참조하십시오 . 나는 당신이 불필요하게 기술적이라고 생각하며, 대부분의 경우이 용어가 상호 교환 적으로 사용된다고 생각합니다.
David Marx

4
죄송하지만 동의하지 않습니다. 이유 : 로딩은 PCA와 요인 분석 모두에 의미가 있으며 (같은 의미로도!) 기억하십시오. 하중은 상관 / 공분산과 직접 비교됩니다. 고유 벡터는 회전 코사인입니다. 요인 분석, 많은 방법 (회전 처리하지 않는 에서 추출 단계). 따라서 두 용어를 혼합하는 것은 실제로 학생들에게 오해의 소지가 있으므로 피해야합니다.
ttnphns

작은 점 : 올바른 철자는 항상 "원칙"이 아니라 "원칙"입니다. 그에 따라 편집했지만 하나의 이미지를 편집 할 수 없습니다.
Nick Cox

1
또 다른 비주얼은 여기에서 찾을 수 있습니다 setosa.io/ev/principal-component-analysis
SIslam

2

귀하의 질문이 cross validated에서뿐만 아니라 의 자격있는 질문이라고 말하고 싶습니다 stack overflow. 여기서 R (. 등)의 차원 축소를 구현하여 효과적으로 어떤 열 / 변수가 분산에 더 잘 기여하는지 식별하는 방법을 알려줍니다 전체 데이터 세트.

PCA (Principal Component Analysis)는 SVD (Singular Value Decomposition)와 기능이 동일 scale하며, z / 변환을 데이터 세트에 적용한 후 실제로 동일한 프로세스 입니다.

다음은 30 분 안에 훨씬 더 잘 이해할 수있는 몇 가지 자료입니다.

svd를 구현하는 방법과 각 구성 요소의 기능을 이해하는 데 도움이되는 생생한 코딩 솔루션을 제공 할 수는 없지만 사람들은 훌륭합니다. 여기에도 SVD의 응용 프로그램 측면을 따라 잡는 데 도움이되는 매우 유익한 게시물이 있습니다. 3by3 SVD 문제를 계산하는 방법을 알고 있습니다 .. :)

  1. Jeff Leek의 Coursera 데이터 분석 클래스 : 비디오 강의 / 클래스 노트
  2. 매우 유익한 학생 게시물
  3. American Mathematical Society의 게시물.

Jeff Leek의 수업은 PCA로 할 수있는 일에 대한 느낌을 얻는 데 매우 좋습니다. 좋은 점은 복잡한 수학적 / 통계적 세부 사항 (많은 다른 곳에서 찾을 수 있음)에 들어 가지 않고 데이터에서 실제로 사용하는 방법을 보여주는 실습 방법을 제공한다는 것입니다.
니코

1

PCA에서는 더 적은 변수로 데이터를 설명하려고합니다. 모든 변수보다 적은 수의 변수로 동일한 정보를 얻을 수 있습니다. 예를 들어, 공부 한 시간과 시험 점수는 서로 관련이있을 수 있으며 둘 다 포함 할 필요는 없습니다.

예를 들어, 목표가 학생 / 사람의 "좋은"정도를 측정하는 것이라고 가정 해 봅시다. 이러한 모든 변수를 살펴보면이를 수행하는 방법이 혼란 스러울 수 있습니다. PCA를 통해 어떤 학생이 좋은지 나쁜지를 알 수 있습니다.

첫 번째 주요 구성 요소가 대부분의 데이터 변형을 설명하면 이것이 전부입니다. 이 구성 요소와 모든 변수 사이의 상관 관계를 찾을 수 있습니다. "큰"상관 관계는 중요한 변수를 나타냅니다. 예를 들어 첫 번째 구성 요소는 공부 한 시간 및 시험 점수와 밀접한 상관 관계가있을 수 있습니다. 첫 번째 성분의 값이 높을수록 학습 시간과 시험 점수가 높다는 것을 나타냅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.