살콤아내 자기계발/파이썬

파이썬 머신러닝완벽가이드 7주차_차원축소, 선형변환, 공분산, PCA (377pg)

살콤아내 2021. 6. 8. 11:55
728x90
반응형

 

377pg. 차원축소 (Dimension Reduction)

- 차원축소를 이해하기 위해서는 선형대수학 기초를 알 필요가 있다.

- 벡터: 크기와 방향이 있다는 점에서 스칼라값과 구분된다.

- 행렬: 2x2와 2x1 행렬의 곱이 2x1이 된다. 

 

- 선형변환 (컴퓨터 그래픽에서 사용됨)

어떤 벡터에 어떤 정방행렬(nxn)을 곱한다는 것은 (기하학적으로) 벡터의 선형변환을 일으키는 것을 의미한다. 선형변환은 어떤 벡터의 사이즈와 방향이 어떤 행렬에 의해 변화되는 것이다.

 

- 선형변환 산식

주어진 행렬A에 x라는 벡터를 곱했을 때 (선형변환을 했을 때) 그 결과, 방향은 같은데 크기만 바뀌게 하는 어떤 벡터 값을 만드는 고유벡터와 고유 람다값이 있다. 

 

 

- 역행렬 I: ad-bc=0 이면 역행렬이 존재하지 않는다. (무한대로 가기 때문)

https://img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F994340375BFE76A52E

 

역행렬은 어떤 행렬 A와 곱했을 때 곱셈에 대한 항등원인 단위행렬 I(Identity matrix)가 나오게 하는 행렬이다. 만약 위 산식에 역행렬이 있다고 가정하고 곱한다면 벡터x=0이라는 결과가 도출된다. 그런데 고유벡터 x는 0이 아니라는 전제가 있으므로 행렬 (A-λI)의 역행렬이 존재하지 않는다. 즉, det(A-λI)x=0 이 되어야 하며 이는 역행렬I 에서 ad-bc=0 을 만족시키는 고유 λ값을 구해야 한다는 의미다. 

Ax=λIx

Ax-λIx=0

(A-λI)x=0

역행렬*(A-λI)x=역행렬*0

x=0

 

Ex) 

det(A-λI)x=0 을 만족하려면 위 행렬의 역행렬이 있으면 안된다. ad-bc=0을 적용하면 

(2-λ)^2-1=0 의 고유 상수λ(고유람다)는 3 or 1이 된다. 이를 Ax=λIx에 적용하면 

이를 방정식으로 풀면, 고유벡터x는 x1=x2이게 된다.

 

 

 

참고)

https://www.youtube.com/watch?v=kYB8IZa5AuE 

 

- 공분산: 확률 변수 X의 편차와 Y의 편차를 곱한것의 평균이다.  (편차는 데이터값에서 평균값을 뺀 값이기 때문에) 이는 기하학적으로 데이터의 분포가 원점으로 이동했음을 나타낸다. 원점으로 이동한 데이터의 평균은 0이다. 

https://ko.wikipedia.org/wiki/%EA%B3%B5%EB%B6%84%EC%82%B0

 

X와 Y가 둘 다 같은 양의 방향/음의 방향으로 움직이면 양의 값으로 공분산이 커진다.

X와 Y가 하나는 양, 하나는 음의 값으로 서로 다른 방향(역)으로 움직이면 음의 값으로 공분산이 커진다.

X와 Y가 불규칙한 방향으로 움직이면 값이 상쇄가 되어 공분산이 작아진다.

즉, 공분산은 서로다른 데이터의 분포가 어느정도 유사성을 보이는 지표이다.

참고) 동일한 feature간의 공분산은 분산이다. (X-평균)^2=V이기 때문

 

 

- 공분산행렬

: 서로다른 feature간의 공분산을 모아놓은 행렬으로, 실제 데이터의 분포를 나타낸다.

 

질문) 공분산행렬에 대한 고유값과 고유벡터를 찾는다는 것은 무슨의미일까?

 

 

- 379pg. PCA개요 (Principal Component Analysis)

PCA를 선형대수 고나점에서 해석해보면, 입력데이터의 공분산 행렬을 고유값 분해하고, 이렇게 구한 고유벡터에 입력데이터를 선형변환하는 것이다. 고유벡터가 PCA의 주성분 벡터로서 입력데이터의 분산이 큰 방향을 나타낸다.

>> feature값의 개수에 따라 고유벡터값이 늘어난다. 고유벡터는 행렬을 가장 잘 설명하는 주성분 벡터이다.

고윳값은 바로 이 고유벡터의 크기를 나타내며, 동시에 입력데이터의 분산을 나타낸다.

 

정리) 차원축소의 needs가 있을 때

1. 데이터의 분포/분산을 파악한다. (각 feature간의 공분산을 구한다>>공분산행렬)

2.  공분산행렬의 고유벡터값들을 구한다.

3. 구한 고유벡터들 중 가장 큰 값을 가진 고유벡터가 공분산행렬, 즉 데이터의 분포를 가장 잘 설명하는 축이된다.

(이는 데이터를 잘 설명하는 새로운 축 값을 말한다. 새로운 축에 새롭게 데이터를 변환한다. 즉, feature들을 삭제하는 것이 아님)

 

PCA기법에서 가장 큰 값의 고유벡터는

>> 벡터의 크기를 가장 크게 하며

>> 데이터를 투영했을 때 데이터의 분산을 가장 크게 해서

>> 데이터의 분포를 가장 잘 설명하게 됨

 

 

 

 

 

 

 

728x90
반응형