본문 바로가기

데이터 사이언스

(데이터과학 인터뷰 질문)(1) 고유값과 고유벡터, 그리고 PCA

이 글 시리즈는 zzsza.github.io/data/2018/02/17/datascience-interivew-questions/에 있는
<데이터사이언스 인터뷰 질문 모음집>에 스스로 대답해보면서 정리해보고자 적어가는 글입니다.

주인장 분께 감사의 말씀 드립니다!

 

 

<통계 및 수학>

 

고유값과 고유벡터란?

 

  • 정의에 의해, 행렬 A를 임의의 열벡터 x에 대한 선형변환이라 하자. 이 때, Av = λv를 만족하는 열벡터 v를 행렬 A의 고유벡터, 상수 λ를 행렬 A의 고유값이라고 한다. 즉 다음과 같다.

위키피디아에 있는 예. 다음과 같은 변환에서 파란색 벡터는 크기만 변하는 것으로 보아 고유벡터!

  • 더 general하게 이야기한다면, 고유값/고유벡터는 모든 linear transformation에 대해 이야기할 수 있다. 예를 들어 미분연산자 d/dx에 대해서도 '고유함수'를 이야기할 수 있다.
  • 어떠한 선형변환의 가능한 모든 고유값/고유벡터 쌍의 집합을 eigensystem이라고 부른다.
    • 이 집합에 영벡터까지 포함하면 eigenspace, characteristic space of T(여기서 T는 고유벡터 집합)등으로 부른다.
    • 어떠한 고유벡터가 T의 기저(basis)가 된다면 이는 eigenbasis라고 부른다.

 

사용되는 분야

 

  • PCA(Principal Component Analysis)
    • PCA는 eigendecomposition이라는 주어진 행렬을 분해하는 방법을 이용한다.
    • 어떠한 행렬 A는 그 고유값으로 이루어진 대각행렬과, 고유벡터로 이루어진 행렬로 분해될 수 있다.
    • 어떠한 데이터셋 A_mn이 있다고 하면 이 행렬의 covariance matrix인 C_nn이 존재한다(단, 이 행렬이 n개의 일차독립인 고유벡터를 갖는다고 할 때). 이 행렬 C는 이름이 말해주듯이 '분산'에 대한 정보를 가지고 있다. 이를 eigendecomposition하면 데이터셋 A의 eigenvector를 얻게 된다.
    • PCA 변환을 하면 얻게되는 Principal Components들은 결국 공분산행렬의 eigenvectors와 동치이다.
    • eigenvector는 이름 자체가 시사하듯이 행렬의 '고유' 정보를 담고 있다. 그래서 PCA에서 %가 높을 수록 원 데이터를 '잘 설명한다'고 한다. 왜 그럴까?
      • 주어진 데이터셋 feature spacep에서 어떠한 임의의 단위벡터 v로 모든 데이터를 정사영(projection)한다고 가정해보자.
      • 이 때 사영된 데이터와 원 데이터의 차이, 즉 '오차'가 최소화되는 단위벡터를 찾는 문제를 생각해본다면, 이는 다음과 같다.
      • 이 때 이 문제는 분산이 최대화되는 지점과 동치임을 알 수 있으며, 이는 또한 eigenvector와 동일하다. 따라서 PCA는 결국 원 데이터를 feature space에서 eigenspace로 mapping하는 것이다.

  •  
    • PCA는 또한 p-dimensional 타원(elipsoid)를 주어진 data에 피팅하는 것과도 같다.
      • 이 때 elipsoid의 각 axis(basis)가 eigenvector와 같다.
      • eigendecomposition을 이용, 구하게 된 타원의 axis들에 주어진 데이터를 projection한다.

 

 

  • SVD(Singular Value Decomposition)
    • 행렬을 분해하는 또 다른 방법이다. 이 또한 고유값/고유벡터를 이용한다.
    • eigendecomposition과 다르게, SVD는 정방행렬이 아닌 행렬에도 적용 가능하다.
    • 선형회귀에서 배우는 최소제곱법(Least Sqaures)을 사용하려면, 데이터가 정방행렬이고 역행렬이 계산 가능함을 가정한다.
    • 그러나 당연히 대부분의 데이터는 정방행렬일리가 없다. 따라서 역행렬도 대부분 존재하지 않는다.
    • 이를 위해 의사역행렬(pseduo inverse)라는 것을 구하게 되는데, 이 때 SVD가 사용된다.

 

이 외에도 spectral clustering, 요인분석 등의 다양한 분야에서 사용된다(추후 업데이트 예정)

 

 

 

<참고>
1. 다크프로그래머 님의 글 (강추 블로그)

darkpgmr.tistory.com/105

2. jinp7님의 블로그

m.blog.naver.com/PostView.nhn?blogId=jinp7&logNo=221312142481&proxyReferer=https:%2F%2Fwww.google.com%2F

3. 위키피디아