2013년 10월 23일 수요일

고유값 분해

고유값 분해의 물리적 의미를 파악해 보자.

                                                                       (figures from wikipedia)

왼쪽 그림에 적용된 변환 행렬 [2 1; 1 2]는 파란색으로 표시된 [1; 1]과 [1; -1]에 평행한 벡터의 방향은 보존한다.   원점을 통과하는 직선에 놓여 있는 점들은 변환 후에도 직선 위에 남아 있다.
붉은 색의 벡터는 고유벡터가 아니다. 따라서, 이들의 방향은 변환 후에 바뀌게 된다 (wikipedia 인용).


Matlab으로 확인해 보자. 먼저 행렬 A의 고유값과 고유벡터를 얻는다.

>> A
A =
     2     1
     1     2

>> [v,d]=eig(A)

v =
   -0.7071    0.7071
    0.7071    0.7071

d =
     1     0
     0     3



변환 행렬 A를 어떤 벡터에 곱해 보자.  벡터의 방향이 고유 벡터와 같다면 변환 A에 대해 방향이 불변이다.


>> A*v(:,1)  % A*x1 = d(1,1)*x1
ans =
   -0.7071
    0.7071

>> A*v(:,2)  % A*x2
ans =
    2.1213
    2.1213

>> 3*v(:,2)  % d(2,2)*x2:  고유벡터라 스케일만 바뀌지 방향은 불변이다.
ans =
    2.1213
    2.1213



고유값 분해의 물리적 의미를 파악하기 위해 평면 상에 여러 점의 분포를 본다.



평면 상에 놓여 있는 점들에 대해 고유값과 벡터를 구해보자.  좌표를 점들의 중심위치로 옮기고 고유값 분해를 한다.    
점들은 직선처럼 길죽하게 분포되어 있다고 가정한다. 
Green축에 대해서 점의 x, y 좌표 값들이 비슷하거나 서로 일정한 크기 비율을 가진 것이 많다. 



크기 비율을 가진 값들은 기준 축의 방향이 바뀌면 값 하나가 아주 작아질 수 있음을 의미한다. 
Red축에 대해서는 하나는 크고 다른 하나의 좌표 값은 작아진다.

위 식에서 점들의 좌표 값의 곱으로 만들어진 A 행렬의 대각 방향을 살펴보면 좌표 값의 제곱의 합으로 이루어져 있다.  
고유벡터란 이 행렬의 대각 방향성분이 가장 작고 크게되는 축의 방향을 찾는다. 위 그림에서 Red 색의 축이 이러한 값을 준다.  



에지 값의 추출에 대해서도 유사하게 적용 가능하다.


행렬 H의 값이 에지 값으로 이루어져 있다.  H는 영상처리에서 코너(corner) 점을 추출하기 위해 많이 사용하는 행렬로 내부의 $I_x$와 $I_y$는 각각 $x$방향과 $y$방향의 에지 값을 나타낸다. 

축이 놓여 있는 위치의 근방에서 에지를 추출한다.  Green축에 대해서 에지 값들은 Ix, Iy 좌표 값들이 비슷하거나 서로 일정한 크기 비율을 가진 것이 많다.   그런데 좌표 축을 Red축으로 돌리면 에지 값의 하나는 작아진다.   

따라서 에지에서는 고유 값 중 하나만 값이 큰 반면, 코너에서는 두 값 모두가 크다. 이러한 성질을 이용하여 코너 추출이 가능하다. 


고유값 분해는 값들의 분포가 최대, 최소가 되는 두 축을 찾아 준다. 


댓글 2개:

  1. 만일 n차원이라면 고유값 분해가 이루어진다면 값들의 분포가 최대~최소에 이르기까지에 해당하는 n개의 축을 찾는 것이라고 해석하면 맞을까요?

    답글삭제
  2. 그렇습니다. 2차원 이상의 다차원이 되면 고유값 분해 후, 얻어지는 고유 값의 크기가 분포의 크기를 나타냅니다.
    예를 들면, 10차원이라면 10개의 새로운 축이 얻어지고, 고유값 10개는 각 축의 방향으로 분포의 크기를 나타냅니다.

    만일 상위 3개만 취한다면, 이 고유 값에 대응하는 3개의 축을 이용하여 데이터들을 포현하게 되고, 결국 10차원에서 3차원으로 차원 축소를 하는 것이 됩니다.

    답글삭제