Swimmer

[선형대수] 고윳값 분해 (Eigenvalue Decomposition) 본문

개념공부/선형대수

[선형대수] 고윳값 분해 (Eigenvalue Decomposition)

Zach Choi 2024. 1. 16. 09:52

  고윳값 분해는 주성분 분석에 사용되는, 데이터 과학에 선형 대수가 큰 공헌을 한 개념이다. 고윳값 분해를 통해 고윳값(Eigen value)과 고유벡터(Eigen vector)를 계산할 수 있다. 고윳값 분해는 기하학, 통계, 제어 등 각 분야에 따라 다양한 해석 관점이 존재한다. 본 글에서는 기하학적 관점에서의 고윳값 분해를 확인한다.

 

고윳값과 고유벡터

 먼저, 행렬과 벡터의 곱을 다음 관점에서 볼 수 있다. 행렬은 벡터의 크기와 방향을 변화시키는 특징을 가지고 있는 것이다. (아래 왼쪽 그림) 그 중에서도 특정 행렬과 벡터는 곱했을 때, 방향은 변하지 않고 크기만 변하는 경우가 있다. 이때 벡터를 행렬의 고유벡터라 하며, 변하는 크기 값을 고윳값이라 한다. (아래 우측의 그래프에서, 행렬 A는 벡터 v의 방향을 변화시키지 않고 크기만 변경한다.)

 이는 행렬이 고유벡터에 대해 마치 스칼라 곱과 같이 작용한다고 볼 수 있다. 이를 기반으로 아래 식이 도출되고 이를 고윳값 방정식(eigenvalue equiation)이라 한다. 이 식은 행렬 A가 람다와 동일하다는 의미가 아니다. 벡터에 행렬을 곱한 효과와 스칼라를 곱한 효과가 동일하다는 뜻이다.


고윳값 계산하기

 고윳값을 계산하기 위해 고윳값 방정식을 다음과 같이 정리한다.

 

이때, 세번째 방정식은 다음을 의미한다. '고유벡터는 고윳값에 의해 이동된 행렬의 영공간에 존재한다.' 선형대수학에서는 영벡터를 고유벡터로 보지 않는다. 이는 고윳값에 의해 이동된 행렬이 특이행렬*(역행렬이 존재하지 않는 행렬)임을 의미한다. (특이행렬만이 자명하지 않은 영공간을 가지기 때문이다.) 특이행렬은 행렬식(determinant)이 0이라는 특징을 가진다. 이를 통해 다음 식이 도출된다. 

 이 식을 풀어주면 고윳값 람다를 계산할 수있다. M x M 행렬은 M개의 고윳값을 가진다.

 

위 고윳값을 계산하는 과정을 도출하는 논리를 다시 한번 정리하면, 다음과 같다.

  1. 행렬-벡터 곱셈은 스칼라-벡터 곱셈처럼 동작한다.
  2. 고윳값 방정식을 영 벡터로 설정하고 공통항을 추출한다.
  3. 이는 고유벡터가 고윳값에 의해 이동된 행렬의 영공간에 있다는 의미이다. 고유벡터로 영벡터는 간주하지 않기 때문에 고윳값에 의해 이동된 행렬은 특이 행렬이다. 
  4. 특이 행렬의 행렬식은 0이다.

고유벡터 계산하기

 고윳값을 계산했다면, 다음 행렬연립방정식을 풀어서 고유 벡터를 계산하면 된다. 행렬연립방정식은는 가우스-조던 소거법으로 계산할 수 있다. (https://iridescentboy.tistory.com/164) 파이썬에 구현된 함수는 QR분해와 거듭제곱법을 사용해서 좀 더 수치적으로 안정적인 방법을 제공한다.  

 고윳값과 고유벡터를 계산하는 예시는 아래와 같다. 2 x 2 행렬의 고윳값 2개를 구하고, 고윳값 1개에 대한 고유벡터만 구해보았다.

 고유벡터는 무한하다. v가 고유벡터라면 스칼라를 곱한 a v 도 고유벡터이다. 따라서 고유벡터는 크기보다 방향이 중요하다.


대칭행렬의 고윳값 및 고유벡터 특징

 대칭행렬은 대각원소를 기준으로 하삼각 원소와 상삼각 원소가 동일한 행렬이다. 대칭행렬의 모든 고유벡터는 서로 직교한다. 이때 고유 벡터가 단위 길이를 가진다면, 고유벡터 행렬에 자신의 전치를 곱하면단위 행렬이 된다. 즉 대칭행렬의 고유벡터 행렬은 직교행렬이다. 또한, 대칭행렬의두번째 특징은 실수 고윳값을가지고 실숫값 고유벡터를 가진다는 것이다.

특이 행렬의 고윳값 분해

 특이행렬은 역행렬이 존재하지 않는 행렬이다. 따라서 특이행렬의 고윳값은 없거나 특이할 것이라는 예상을 하게 된다. 하지만, 실제로는 특이행렬의 고윳값 분해는 완벽하게 동작한다.

 특이행렬의 고윳값 분해에는 특징이 있는데, 적어도 하나의 고윳값은 0이라는 것이다. 이는 역도 성립하는데, 모든 최대 계수(Rank) 행렬은 0을 고윳값으로 가지지 않는다.


 

Comments