본문 바로가기

낙서장

PCA설명 오류 .....

- 1회차 -


어제 내가 현용이 형이 PCA를 설명해 보라고 하여 나는 "첫번째꺼 부터 답하면 일단 차원 축소 자체가 각 데이터 마다 공통적으로 가지고 있는 차원은 특징이 될수 없기 때문에 이를제외 한다 라는 하나의 기준을 가지고 이런걸 제거한다는것" 이라고 답했고 현용이 형의 답은 "PCA는 그런 식으로 동작하지 않습니다" 였다. 후에 현용이 형이 설명을 해줬지만 이해가 안되었다.(지금도 수학적 부분은 이해가 안됨....)나는 완전히 차원이 다른 대답을 했음을 현재 깨달았다.


어제 현용이형이 말한거 좀 이해가 되서 다시 설명을 하면 PCA는 Feature extraction의 한 방법으로 전체 P개의 피쳐를 이용해 가장 잘 설명할수 있는 L개의 피쳐를 가진 벡터로 나타낸다는 것임 . 여기서 가장 잘 설명 할 수 있다는 말은 이 L개 안의 피쳐의 분포가 크다는것 즉 분산이 크다는 말임. 이렇게 분산이 가장 큰 벡터를 주성분이라고함. 


그럼 이제 어제 내가 설명한 주성분분석의 오류를 집어내보자. 

" 공통적으로 가지고 있는 차원은 특징이 될 수 없기 때문에 이를 제외한다" 이말이 틀린 이유는 이것은 Feature selection 의 방식이기 때문에 아예 다른 방식이기 때문이다. PCA는 Feature extraction의 한 종류이므로 전체 피쳐를 사용해 이 모든 걸 잘 표현하는 낮은 피쳐수준의 벡터로 나타내는 것이다.


현용이형의 설명이 일단 처음엔 이해가 되지 않았는데 지금은 좀 이해가 된다.


일단 " 물론 pca1에는 2번 3번 4번 차원의 고유벡터값이 거의 0 일 수 있겠지" 라는 말이 이해가 안되었는데 이 말인 즉 슨 주성분는 차원축소가된 분산이 가장 큰 벡터인데 1번째 주성분은 당연히 가장 분산이 큰 고유벡터값이 나올것이고 2번째는 그보다 낮은 분산의 고유벡터값이 나올것 그런데 데이터의 분포가 단 한개의 주성분로만 설명이 가능하다면 1번째 p는 크게 나오겠지만 나머지 주성분은 거의 0에 가까울것.


따라서 이것은 차원을 제거한 것이 아니고 단지 고유벡터값이 0인 한개의 차원이 있다는 말이 된다. 고로 내말 " 공통적으로 가지고 있는 차원은 특징이 될 수 없기 때문에 이를 제외한다"는 틀린말이된다.


아.. 직교의 의미가 뭔지를 모르겠다.... 



- 2회차 - 


"서로 연관 가능성이 있는 고차원 공간의 표본들을 선형 연관성이 없는 저차원 공간(주성분)의 표본으로 변환하기 위해 직교 변환을 사용한다. 주성분의 차원수는 원래 표본의 차원수보다 작거나 같다. 주성분 분석은 데이터를 한개의 축으로 사상시켰을 때 그 분산이 가장 커지는 축을 첫 번째 주성분, 두 번째로 커지는 축을 두 번째 주성분으로 놓이도록 새로운 좌표계로 데이터를 선형 변환한다. 이와 같이 표본의 차이를 가장 잘 나타내는 성분들로 분해함으로써 여러가지 응용이 가능하다. 

이 변환은 첫째 주성분이 가장 큰 분산을 가지고, 이후의 주성분들은 이전의 주성분들과 직교한다는 제약 아래에 가장 큰 분산을 갖고 있다는 식으로 정의되어있다. 중요한 성분들은 공분산 행렬의 고유 벡터이기 때문에 직교하게 된다."



위키피디아 주성분분석 : https://ko.wikipedia.org/wiki/%EC%A3%BC%EC%84%B1%EB%B6%84_%EB%B6%84%EC%84%9D


다시 난관에 봉착했다. "이 변환은 첫째 주성분이 가장 큰 분산을 가지고, 이후의 주성분들은 이전의 주성분들과 직교한다는 제약 아래에 가장 큰 분산을 갖고 있다는 식으로 정의되어있다. 중요한 성분들은 공분산 행렬의 고유 벡터이기 때문에 직교하게 된다."이말이 이해가 안간다.. 제길 선형대수... 


이를 이해하기 위해 일단 다크프로그래머님의 블로그에서 선형대수를 공부해 봤다. (쏙쏙들어오게 설명을 잘 해주신 다크프로그래머님께 감사하다.)


일단 PCA의 근간에는 고유값과 고유벡터가 있고 이 고유값과 고유벡터는 또 선형변환이라는 것을 알아야 했기에....


여기 http://darkpgmr.tistory.com/104 부터 시작 했다. 선형변환에 대한 다크프로그래머님의 설명을 발췌해 보면 , 


"행렬 A를 X' = AX와 같이 사용하면 행렬 A는 입력좌표 X를 X'으로 변환시켜주는 일종의 선형변환(linear transformation)으로 해석할 수 있다.


이러한 관점에서 det(A)는 선형변환의 스케일(scale) 성분을 나타내는 값이다. 즉, 도형 P가 선형변환 A에 의해 P'으로 변환되었을 경우, 다음 수식이 성립한다.





또한 determinant의 부호도 중요한 의미를 갖는데, det(A)>0이면 도형의 방향(orientation)이 보존되고 det(A)<0이면 도형의 방향이 보존되지 않는다."


즉 어떠한 X행렬(행/열 벡터의 집합)을 어떠한 A행렬을 매개로하여 X'로 선형 변환을 시켜준다. 그런데 여기서 행렬값이 0인 행렬 A로 선형 변환을 한다면 본래의 행렬인 X행렬의 차원이 한 차원 줄어든다.

 

이제 선형변환이 무엇인지 알았다 다음으로 이제는 고유값과 고유벡터(http://darkpgmr.tistory.com/105)를 알아보자.


"행렬 A를 선형변환으로 봤을 때, 선형변환 A에 의한 변환 결과가 자기 자신의 상수배가 되는 0이 아닌 벡터를 고유벡터(eigenvector)라 하고 이 상수배 값을 고유값(eigenvalue)라 한다.


즉, n x n 정방행렬(고유값, 고유벡터는 정방행렬에 대해서만 정의된다) A에 대해 Av = λv를 만족하는 0이 아닌 열벡터 v를 고유벡터, 상수 λ를 고유값이라 정의한다.


 ---(1)


 --- (2)


좀더 정확한 용어로는 λ는 '행렬 A의 고유값', v는 '행렬 A의 λ에 대한 고유벡터'이다.


즉, 고유값과 고유벡터는 행렬에 따라 정의되는 값으로서 어떤 행렬은 이러한 고유값-고유벡터가 아에 존재하지 않을수도 있고 어떤 행렬은 하나만 존재하거나 또는 최대 n개까지 존재할 수 있다."


이러한 고유값과 고유벡터로 무엇을 할수 있는가? (앞에 나오지만 정방행렬에 대해서만 정의되는데 뒤에보면 직교(othogonal) 행렬도 이에 속한다. 그런데 PCA에서 쓰는 공분산 행렬이 바로 이 직교 행렬이다.)



"고유값, 고유벡터는 정방행렬의 대각화와 밀접한 관련이 있다 (eigendecomposition은 정방행렬에 대해서만 가능함)


먼저 대각행렬과의 행렬곱에 대해 살펴보면, 대각행렬을 뒤에 곱하면 행렬의 열벡터들이 대각원소의 크기만큼 상수배가 된다(뒤에 곱하면 행벡터들이 상수배가 된다). 예를 들어, 3 x 3 행렬의 경우를 보면 다음과 같다.


 --- (3)


행렬 A의 고유값, 고유벡터들을 λi, vi, i = 1, 2, ..., n이라 하자.


 --- (4)


이제 식 (4)를 한꺼번에 표현하여 정리하면


 --- (5)


가 성립함을 알 수 있다.


즉, 행렬 A의 고유벡터들을 열벡터로 하는 행렬을 P, 고유값들을 대각원소로 하는 대각행렬을 Λ라 하면 다음 식이 성립한다.


 --- (6)

즉,  --- (7)


이와같이 행렬 A는 자신의 고유벡터들을 열벡터로 하는 행렬과 고유값을 대각원소로 하는 행렬의 곱으로 대각화 분해가 가능한데 이러한 대각화 분해를 eigendecomposition이라고 한다."


한 예로, A = [1 1 0; 0 2 1; 0 0 3]인 경우 A는 다음과 같이 대각화가 가능하다.


 --- (8)



모든 정방행렬이 이런 방식의 eigendecomposition이 가능한 것은 아니지만 대각화 가능한 경우는 뒤에 적기로 하고 일단은 대각화를 하면 어떤게 좋은지 알아보자.


행렬 A의 eigendecomposition을 알면 행렬식 값 det(A), A의 거듭제곱, 역행렬, 대각합(trace), 행렬의 다항식 등을 매우 손쉽게 계산할 수 있다.



 --- (9)


 --- (10)


 --- (11)


 --- (12)


 --- (13)


여기서 뒤에 나오겠지만 고유벡터(주성분벡터)와 고유값(주성분에서 분산의 크기)를 알아 낼 수 가 있는것이다.


※ 직교(orthogonal)와 정규직교(orthonormal), 그리고 직교행렬(orthogonal matrix)


orthogonal과 orthonormal이 서로 용어가 혼동되기 쉬운데 두 용어의 차이를 명확히 할 필요가 있다. 


먼저, 벡터에 대해 얘기를 해 보면 두 벡터 v1, v2가 서로 수직이면(즉, v1·v2 = 0) 두 벡터 v1, v2는 서로 orthogonal 하다고 한다. 그리고 v' = v/∥v∥와 같이 어떤 벡터를 크기가 1인 단위벡터로 만드는 것을 정규화(normalization)라고 한다. orthonormal이라는 말은 orthogonal과 normal이 합쳐진 말로서 두 벡터 v1, v2가 모두 단위벡터(unit vector)이면서 서로 수직이면 두 벡터 v1, v2는 orthonormal(정규직교)하다고 한다.

  • orthogonal: v1·v2 = 0

  • orthonormal: v1·v2 = 0  &  ∥v1∥ = 1, ∥v2∥ = 1


즉, orthogonal, orthonormal은 벡터들 사이의 관계를 나타내는 말인데, 이게 행렬로 넘어가면 조금 의미가 달라진다.


먼저, 행렬에서는 직교행렬(orthogonal matrix)이라는 말은 있어도 정규직교행렬(orthonomal matrix)이라는 말은 없다. 흔히 orthonomal matrix라는 표현을 쓰는데 이는 잘못된 것이며 orthogonal matrix (직교행렬)가 올바른 용어이다.


직교행렬(orthogonal matrix)의 수학적 정의는 자신의 전치행렬(transpose)를 역행렬로 갖는 정방행렬이다.



 --- (25)


이와 같이 직교행렬(orthogonal matrix)은 transpose를 시키면(행렬의 열과 행 원소들을 서로 바꾸면) 자신의 역행렬이 되기 때문에 다양한 선형대수학 계산에서 매우 편리한 성질을 가진 행렬이다.


그런데, 직교행렬의 열벡터들은 서로 orthonomal(정규직교)한 성질을 가지고 있다. 즉, 직교 행렬를 구성하는 열벡터들을 v1, v2, ..., vn이라 했을 때 이들은 모두 단위벡터(unit vector)이면서 또한 서로 서로 수직인 성질을 갖는다. 이는 식 (25)로부터 쉽게 도출될 수 있다.


 --- (26)


이러한 성질은 열벡터가 아닌 행벡터들에 대해서도 동일하게 성립한다 (즉, 행벡터들도 서로 orthonormal 하다).


즉, 직교행렬(orthogonal matrix)은 그 행렬을 구성하는 열벡터(행벡터)들이 서로 수직(orthogonal)이면서 크기가 1인 (normal한) 행렬로도 정의될 수 있다.


이상의 내용을 정리하면 다음과 같다.

  • 벡터들이 orthogonal하다: 서로 수직이다
  • 벡터들이 orthonormal하다: 서로 수직이면서 크기가 1인 단위벡터이다
  • 행렬이 orthogonal하다: AAT=E 이다 (행렬을 구성하는 열벡터, 또는 행벡터들이 orthonomal하다)


- 3회차 -


자 그럼 이제 다시 PCA로 넘어가 보자. 일단 다시 처음부터 PCA는 차원의 축소방법 중 Feature extraction 에 해당한다. Feature selection 과 extraction의 차이는 데이터의 전체 Feature(혹은 차원)을 어떻게 줄일것이냐 하는 것이 차이다. selection은 전체 Feature중 모든 observation들이 가진 공통적인 Feature들을 제거(eliminate)하여 observation들 끼리 구분이 되는 Feature들만 남기겠다는 의미이다. extraction은 전체 Feature를 가장 잘 나타내는 더 작은 차원의 Feature(이것이 사실 주성분)들을 찾겠다는 것이다. 

PCA는 이러한 Extraction 방법들중 하나이다. PCA는 데이터의 분포의 특성을 가장 잘 나타내는 벡터(크기,방향)을 찾는 것이다. 그렇다면 분포의 특성을 가장 잘 나타내기 위해서는 벡터에 사영된 데이터들이 모여있는것이 데이터의 특성이 잘 나타나는 것일까? 아니면 벡터에 사영된 데이터들이 흩어진 모양을 한것이 데이터의 특성을 잘 나타낸 벡터일까? 답은 후자이다. 생각해보면 당연한 것이다. 데이터끼리 모여있다는건 그만큼 공통적인 데이터가 많아 차이점을 찾기 어렵다는 것이다. 정리하자면 데이터의 분산이 큰 순서로 벡터를 찾는것이 PCA라 할 수 있겠다.


<그림 1> 2D에서의 PCA 예

예를 들면 위 그림에서 e1 벡터(주성분)을 첫번째로 찾고 다음으로 분산이 큰 직교(othogonal)한 e2 벡터를 찾는 것이다. 이렇게 설명하면 아마 몇가지 궁금증이 생길 것이다. 왜 직교하는 주성분을 찾아야 하나?, 왜 주성분은 2개밖에 안되느냐?, 정말 저 2개로 모든 정보를 표현할 수 있느냐(정보손실이 안생기나)? 내가 생겼던 궁금증은 대략 이정도이다. 이 궁금증을 하나씩 풀어보자.


첫째 왜 직교하는 주성분을 찾아야 하나?

1. 수학적접근

사실 이 답을 찾기위해 선형대수와 뭐 여러 참고문헌을 쥐잡듯 뒤졌다. 직관적 이해와 수학적 이해로 설명을 할것이다. 수학적인 설명은 대충 이해는 하지만 내가 이해한 수학적 이해가 올바른지는 본인의 판단에 맡긴다. 일단 이 PCA를 하기위해서는 공분산을 구해야 한다. 왜냐하면 주성분이 분산이 큰 벡터이므로 분산을 일단 구해햐 한다. 


 --- (3)

X와 Y가 얼마나 흩어졌는지 상관관계를 나타낸 것이 공분산이다. 4사분면을 나눠 1,3 사분면에 데이터가 있다면 양의 상관관계를 가지는 공분산이고 2,4 사분면은 반대로 음의 상관관계를 가지는 공분산이다. 상관관계가 없으면 0이다.


<그림 9> 공분산 행렬

공분산 행렬은 이제 스칼라 값이 아니라 벡터로 바뀐것이다. 위 그림을 보면 잘 알 수 있을 것이다. 공분산 행렬이 대칭행렬이므로 직교행렬로 대각화가 가능하다! 여기서 직교행렬이 나온다! 직교행렬이란 행벡터들이 서로 직교적인 그리고 크기가 1인, 즉 두 행벡터의 내적이 항상 0이고 각 행벡터의 길이가 1인 행렬을 의미한다. 이 직교행렬의 성질은 전치행렬이 역행렬과 같다는 것이다. 이 직교한 성질이 PCA에서 직교함을 수학적으로  표현한것이다. (직교하단 의미는 서로 독립이라는 이야기) 그럼 왜 독립이어야하냐는 궁금중이 또 생길 수가 있다. 사실 위 수학의 설명이 확 와닿지는 않는다. 오히려 직관적 설명이 더 와닿을것 뒤에 설명하겠다.


PCA란 한마다로 말하면 입력 데이터들의 공분산 행렬(covariance matrix)에 대한 고유값분해(eigendecomposition)로 볼 수 있다(고유값 분해에 대해서는 고유값과 고유벡터 글 참조). 이 때 나오는 고유벡터가 주성분 벡터로서 데이터의 분포에서 분산이 큰 방향을 나타내고, 대응되는 고유값(eigenvalue)이 그 분산의 크기를 나타낸다.


<그림 10> PCA 계산 과정

내 생각에는

가 우리가 최종적으로 나타낼 주성분인것 같다.


2. 직관적 설명


사실 수학적 설명보다 이렇게 설명하는게 더 확 와닿을 것이다. PCA의 목적에 대해서 다시 생각을 해보자. PCA의 목적은 기존의 차원(혹은 Feature)을 가장 잘 나타내는 더 작은차원(혹은 Feature)으로 표현할 것인가이다. 그런데 이렇게 작은 차원으로 표현하려면 당연히 정보의 손실이 일어날 수 밖에 없다. 그러나 그 정보손실은 상당부분 필요없는것(대부분 노이즈)일 것이다. 따라서 우리는 그러한 부분(일정 주성분, n-k개)을 제거하고 데이터를 잘 표현한 몇 개의 새로운 변수(1~k개의 주성분)을 여러 Feature를 조합해서 만든다. 여기서 "잘 표현"을 한다는 의미는 데이터의 분산이 크게 표현된 벡터(주성분)를 나타낸다는 말이다. 또 그러면 분산이 왜 커야하냐? 위에 설명했듯이 가장 이 데이터를 잘 표현하기 위해서는 차이가 극명하게 잘 드러난 데이터 분포일수록 이 데이터를 잘 설명할 수 있다. PCA의 목표가 이러한 분포가 담긴 주성분들을 찾는것이다.

그래 주성분에 대한 정의는 된 것 같다 그럼 이 단락에서 다루고자 한 질문 "왜 주성분끼리는 직교해야하냐?" 를 설명하겠다.

사실 내용은 한줄이면 된다. 직교라는 의미를 잘 생각해 보자. 직교라는 것은 수학에서 독립이라는 말이다. 그렇다면 주성분끼리 직교한다는 말은 주성분끼리 "독립"이라는 말이다. 이러한 성질은 주성분의 목적과 부합한다. 위에서 말한 "잘 표현"을 하기위해서는 서로 정보의 중복이 없어야 한다.  


예를 들어보자, 아래 그림에서 하나의 주성분을 나타내었다.




그렇다면 


이렇게 다음 주성분(파란선)을 추가 한다고 해보자. 이렇게 되면 첫번째 그은 선분(주성분)과 데이터의 분포가 비슷해 진다. 따라서 정보의 중복이 생긴다. 더군다나 이 파란색 주성분은 기존의 주성분보다 데이터를 잘 못나타내고 있다.(분산이 줄어들었으므로)

따라서 우리가 이러한 차원축소를 하는 이유는 일단 이 데이터를 가장 잘 나타내는 주성분만을 뽑고 그중 끝에 나온 주성분(대부분 노이즈가 있는 주성분)을 제거하여 차원축소를 하겠다는 말이다. 그러나 정보중복이 생기면 데이터를 표현하기 위해 더 많은 주성분이(말도 안되지만) 필요할 것이다.사실 주성분은 한 차원갯수만큼의 주성분 밖에 가지질 못하므로 최대 주성분의 개수는 해당 데이터의 차원(Feature)의 갯수이다. 따라서 위의 정보중복이 일어난다면 우리는 데이터를 100% 설명할 수 있는 주성분을 못찾게 된다는 것이다.


주성분끼리 직교해야 하는것에 대한 비유를 들자면 2개의 목표물(Feature)과 2개의 총알(이 Feature로 나타낼 수 있는 최대 주성분 수)이 있다. 100%의 적중률을 위해서는 2개다 명중(주성분끼리 직교)을 시켜야 한다. 하지만 1개를 빗받추면(주성분끼리 직교가 안되면) 적중률은 50%(실제로 50%는 아니고 데이터에 따라서 이건 달라지겠죠?)로 떨어진다. 즉 당신이 가지고 있는 총알 개수(주성분개수)는 한정적이다. 왜냐하면 이 총알(Feature)들 갯수 안에서 명중을 해야하므로(주성분을 만들어야 하므로) 이를 통해 목표물 2개(데이터분포)를 100% 적중률(둘다 직교하게 표현해야한다는말)로 맞춰야한다. 하지만 하나라도 총알(주성분)이 낭비될 경우 당신의 적중률은 50%로 떨어지게 되는것(정보중복에 일어나 2개의 주성분에서는 도저히 데이터의 100%의 분포를 설명 못함)이다. 혹시 이해가 안되도 넘어가세요 그냥 제가 설명을 쉽게 하려고 든 비유니... ㅎㅎ 


결론적으로 정보중복을 피하기 위해서 우리는 주성분끼리는 직교(독립)해야한다는 것이다. 사실 이건 회귀식에서도 마찬가지이다. 서로 독립변인간에는 독립해야한다는 가정이 있기 때문이다. 그러나 앞선 정보중복이 일어나는 경우가 회귀분석에서의 다중공선성문제(colinearlity)이기도하다. y의 변동을 x로 나타내려는 데 x와 z가 서로 상관이 있다면(공선성) 회귀계수 b베타의 가정은 경제학의 ceteris paribus(모든 변수가 일정하다고 가정할 때) 다시 말해 편미분 (partial derivative)의 값인데 x와 z가 상관이 있어 x가 변할때 z도 변하기 때문에x의 회귀계수 b가 x'만' 변화할때 y의 변동이 아니라 z가 변화도 y의 변화에 영향을 미치므로 x와 z는 y에 대한 영향을 나누어 갖게 된단것이다. 이걸 compound factor(혼동 요인) 이라고부른다. z의 영향을 그렇다면 줄이거나 없애야 하므로 부분상관계수가 필요하게 되는데 자세한 건 나중에 다루겠다.

약간 삼천포로 빠졌는데 다시 말하자면 주성분끼리 직교해야 하는 이유는 정보중복을 피해야 하기 때문이다. 주성분이 새로운 변수가 되기 때문에 직교(독립)하지 않으면 다중공선성의 문제가 있다는 것이다.
또한 주성분의 최대수가 차원의 수라는 설명도 사실 정보중복때문이다. PCA의 목적이 주요 정보(전체 Feature)로 정보의 손실을 감안하더라도 적은 차원으로 축소하겠단 건데 주성분 갯수가 차원수보다 많아져 버리면 이 목적을 상실하기 때문이다. 즉 주성분 개수가 차원 수 보다 많아지면 정보중복이 일어날 수밖에 없다는것이다. 
따라서 주성분의 최대 개수는 차원의 수이다.
마지막 질문인 "이 주성분개수로 정말 데이터를 100% 표현할 수 있느냐?"이다.
일단 답은 있다. 그러나 이는 차원축소가 되지 않은것이기 때문에 PCA의 효과는 못볼 것이다.
주성분을 전체 Feature들의 데이터 분포를 아주 잘 나타낸 새로운 변수 조합이라고 볼 수도 있다. 왜냐하면 각변수들의 선형 결합이기 때문 즉 새로운 벡터에 모든 Feature를 사영 시켰다는 말이다. 예를 들어 100개의 변수를 1개의 변수로 축약해 나타낸것이라고 보면 된다. 하지만 이렇게 1개의 변수로는 당연히 100개의 변수의 모든 특징을 설명할 수 는 없다. 이 새로운 변수(주성분)에서는 모든 데이터 분포의 80%를 설명한다고 해보자, 20%는 표현을 못하고 있다. 따라서 1개의 변수(주성분)를 더 만들어 표현을 한다면 (데이터가 2차원이라 가정하면) 100% 표현이 가능하다. 하지만 우리는 차원축소가 목표이므로 가장 잘 표현된 1번째(80%설명)만 골라도 이 데이터의 특징을 충분히 표현한다고 생각하면 2번째 변수(주성분)을 제거한다. 이것이 차원축소 인것이다. 사실 이렇게 차원축소할 주성분의 갯수를 정하는것은 주관적인 기준이라고 한다.
마지막으로 실제 예를 보자



다음은 R에 기본적으로 저장된 데이터 USArrests 데이터이다. Feature는 Murder, Assualt, UrbanPop, Rape이다. 이 4개의 Feature를 주성분분석 해보면, summary의 두번째줄인 proportion of variance를 보면 제 1 주성분은 전체 분산의 약62%를 설명하는 주성분이다. 두번째는 전체 분산의 약 25%를 설명하고 다음은 약 9% 다음은 4%정도로 설명을 한다. 이렇게 다합하면 100%의 분산을 설명하는 4개의 주성분이다. 여기서 우리가 차원축소를 한다면 아마 3,4번째 주성분을 없앨 확률이 높다. 10 미만의 분산비율을 가지기 때문.. 물론 이건 주관적 기준이다. 이렇게 2개의 주성분을 없앤다면 우리는 이제 주성분1,2로 이 데이터를 설명할 수 있게 되고, 4->2차원으로 Feature들이 축소가 된것이다.  그런데 밑에 loadings를 보면 밑에 cumulative var 라는것이 또 있다. 이건 이 주성분의 전체주성분에서의 분산비율인것같다... 확실하진 않음...  또 loadings에 각 변수들의 주성분에서의 적재(loading)양이 있는데 이것은 한마디로 주성분과 실제 데이터 변수간의 공분산/상관계수 라고 보면 될 것같다. 예를들어 comp.1(주성분.1)에서는  이 comp.1이 증가할때 모든 변수들은 대체로 음의 방향으로 가는 것이라는 말이다. comp.2가 증가할때는 Murder와 Assult는 양의 방향으로 가지만 UrbanPop과 Rape는 음의 방향으로 간다. 자세히 말하면 이 주성분에서는 UrbanPop의 음의 상관관계가 가장 두드러지게 표현된 주성분이다. 당연하지만 comp.1은 데이터의 전체적 그림을 보여주고 다음 주성분으로 갈수록 미세한 차이를 잡아내는 주성분들이 생긴다.


이상으로 주성분분석의 전반적인 부분의 이해가 끝난것같다.. 5일간의 여정이 이렇게 막을 내린다... 





'낙서장' 카테고리의 다른 글

추론과 예측의 차이  (0) 2016.02.02
파인만 알고리즘 (일반적 문제 해결법)  (0) 2016.01.28
HTML, CSS 공부하기  (0) 2016.01.26