다운로드
작성자: admin 작성일시: 2016-06-16 22:09:16 조회수: 5313 다운로드: 328
카테고리: 기초 수학 태그목록:

고윳값 분해

고윳값 분해와 다음에 설명할 특이값 분해는 행렬의 내부 구조를 살펴보거나 행렬을 이용한 연산을 더 효율적으로 해야 할 때 유용하게 사용할 수 있다. 여기에서는 고윳값 분해의 정의를 살펴보고 이와 관련된 다양한 정리들을 보인다. 고윳값 분해와 관련된 대부분의 정의는 증명이 복잡하므로 여기에서는 증명을 생략한다. 하지만 정리 자체는 데이터 분석에서 많이 사용되기 때문에 반드시 외워야 한다.

고윳값과 고유벡터

정방 행렬 $A$에 대해 다음 식을 만족하는 영벡터가 아닌 벡터 $v$, 실수 $\lambda$를 찾을 수 있다고 가정하자.

$$ Av = \lambda v $$

이 식은 다음처럼 쓸 수도 있다.

$$ Av - \lambda v = (A - \lambda I) v = 0 $$

위 식을 만족하는 실수 $\lambda$를 고윳값(eigenvalue), 벡터 $v$ 를 고유벡터(eigenvector)라고 한다.

즉 어떤 벡터를 행렬에 곱한 결과로 나타난 벡터가 원래의 벡터와 같은 방향을 향하고 있다면 이를 고유벡터라고 한다. 다만 크기나 방향은 원래의 벡터와 달라질 수가 있는데 달라진 크기를 나타내는 비율을 고윳값이라고 부른다.

고윳값과 고유벡터를 찾는 작업을 고유분해(eigen-decomposition) 또는 고윳값 분해(eigenvalue decomposition)라고 한다.

예를 들어 행렬 $A$

$$ A= \begin{bmatrix} 1 & -2 \\ 2 & -3 \end{bmatrix} $$

에 대해 다음 스칼라 값과 벡터는 각각 고윳값, 고유벡터가 된다.

$$\lambda = -1$$$$ v= \begin{bmatrix} 1 \\ 1 \end{bmatrix} $$$$ Av = \begin{bmatrix} 1 & -2 \\ 2 & -3 \end{bmatrix} \begin{bmatrix} 1 \\ 1 \end{bmatrix} = \begin{bmatrix} -1 \\ -2 \end{bmatrix} = (-1) \begin{bmatrix} 1 \\ 2 \end{bmatrix} = \lambda v $$

어떤 벡터 $v$가 고유벡터가 되면 이 벡터에 실수를 곱한 벡터 $cv$,즉 $v$와 방향이 같은 벡터는 모두 고유벡터가 된다. 예를 들어 행렬 $A$에 대해 다음 벡터는 모두 고유벡터이다.

$$ v= c \begin{bmatrix} 1 \\ 1 \end{bmatrix} $$$$ Av = \begin{bmatrix} 1 & -2 \\ 2 & -3 \end{bmatrix} \left( c \begin{bmatrix} 1 \\ 1 \end{bmatrix} \right) = c \begin{bmatrix} -1 \\ -2 \end{bmatrix} = (-1)c \begin{bmatrix} 1 \\ 2 \end{bmatrix} = \lambda (cv) $$

그래서 보통 고유벡터를 표시할 때는 길이가 1인 단위벡터가 되도록 다음처럼 정규화(normalization)를 한다.

$$ \dfrac{v}{\|v\|} $$

따라서 위 행렬 $A$의 고유값-고유벡터는 보통 다음처럼 나타내는 경우가 많다.

$$\lambda = -1$$$$ v= \begin{bmatrix} \dfrac{\sqrt{2}}{2} \\ \dfrac{\sqrt{2}}{2} \end{bmatrix} \approx \begin{bmatrix} 0.7071 \\ 0.7071 \end{bmatrix} $$

연습 문제 5.4.1

다음 행렬 $B$가 $$ B = \begin{bmatrix} 2 & 3 \\ 2 & 1 \end{bmatrix} $$

다음과 같은 두 가지 고윳값-고유벡터를 가짐을 증명하라.

$$ \lambda_1 = 4, \;\; v_1 = \begin{bmatrix} 3 \\ 2 \end{bmatrix} $$$$ \lambda_2 = -1, \;\; v_2 = \begin{bmatrix} -1 \\ 1 \end{bmatrix} $$

또는

$$ \lambda_1 = 4, \;\; v_1 = \begin{bmatrix} \dfrac{3}{\sqrt{13}} \\ \dfrac{2}{\sqrt{13}} \end{bmatrix} \approx \begin{bmatrix} 0.8321 \\ 0.5547 \end{bmatrix} $$$$ \lambda_2 = -1, \;\; v_2 = \begin{bmatrix} -\dfrac{1}{\sqrt{2}} \\ \dfrac{1}{\sqrt{2}} \end{bmatrix} \approx \begin{bmatrix} -0.7071 \\ 0.7071 \end{bmatrix} $$

특성방정식

지금까지는 행렬에 대해 고윳값-고유벡터가 주어지면 정방 고윳값-고유벡터인지를 증명했다. 그러면 행렬만 주어졌을 때 고윳값-고유벡터은 어떻게 구할 수 있을까?

행렬 $A$의 고유값은 $A - \lambda I$의 행렬식이 0이 되도록 하는 특성방정식(characteristic equation)의 해를 구하면 된다.

$$ \det \left( A - \lambda I \right) = 0$$

예를 들어 다음 행렬 $B$

$$ B= \begin{bmatrix} 2 & 3 \\ 2 & 1 \end{bmatrix} $$

에 대해서는 특성방정식이 다음과 같다.

$$ \begin{eqnarray} \det \left( B - \lambda I \right) &=& \det \left( \begin{bmatrix} 2 & 3 \\ 2 & 1 \end{bmatrix} - \begin{bmatrix} \lambda & 0 \\ 0 & \lambda \end{bmatrix} \right) \\ &=& \det \begin{bmatrix} 2 - \lambda & 3 \\ 2 & 1 -\lambda \end{bmatrix} \\ &=& (2 - \lambda)(1 -\lambda) -6 \\ &=& \lambda^2 - 3\lambda -4 = 0 \end{eqnarray} $$

인수분해를 하여 이차방정식인 특성방정식을 풀면

$$ \lambda^2 - 3\lambda -4= (\lambda -4)(\lambda +1) = 0 $$

에서 고윳값은 4와 -1이다.

또다른 행렬 $A$ $$ A= \begin{bmatrix} 1 & -2 \\ 2 & -3 \end{bmatrix} $$

에 대해서는 특성방정식이 다음과 같다.

$$ \begin{eqnarray} \det \left( A - \lambda I \right) &=& \det \left( \begin{bmatrix} 1 & -2 \\ 2 & -3 \end{bmatrix} - \begin{bmatrix} \lambda & 0 \\ 0 & \lambda \end{bmatrix} \right) \\ &=& \det \begin{bmatrix} 1 - \lambda & -2 \\ 2 & -3 -\lambda \end{bmatrix} \\ &=& (1 - \lambda)(3 +\lambda) + 4 \\ &=& \lambda^2 + 2\lambda + 1 = 0 \end{eqnarray} $$

인수분해를 하여 이차방정식인 특성방정식을 풀면

$$ \lambda^2 + 2\lambda + 1 = (\lambda + 1)^2 = 0 $$

에서 고윳값은 -1이다.

원래 이차방정식은 최대 2개의 해를 가질 수 있지만 이 경우에는 하나의 해만 존재하기 때문에 이러한 해를 중복고윳값(repeated eigenvalue)이라고 한다.

2차 방정식의 해가 존재하지 않는 경우도 있기 때문에 고유값이 없는 행렬도 있을 수 있다.

행렬 $$ C = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} $$

의 특성방정식은 다음과 같다.

$$ \begin{eqnarray} \det \left( C - \lambda I \right) &=& \det \left( \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} - \begin{bmatrix} \lambda & 0 \\ 0 & \lambda \end{bmatrix} \right) \\ &=& \lambda^2 +1 \\ &=& 0 \end{eqnarray} $$

이 특성방정식의 실수해는 존재하지 않음을 알 수 있다. 따라서 행렬 $C$는 실수인 고유값을 가지지 않는다.

만약 고유값-고유벡터가 복소수(complex number)가 되어도 괜찮다면 행렬 $C$는 2개의 고윳값을 가진다고 할 수 있다.

$$ \lambda = i, \;\; \lambda = -i $$

연습 문제 5.4.2

특성방정식을 이용하여 다음 행렬의 고윳값을 구하라.

$$ \begin{bmatrix} 2 & 1 \\ 1 & 2 \end{bmatrix} $$

고윳값의 갯수

$N$차방정식이 항상 $N$개의 복소수 해를 가진다는 사실을 이용하면 $N$차원 정방행렬의 고윳값의 갯수는 다음과 같음을 알 수 있다.

중복된 고유값을 하나로 생각하고 실수 고윳값만 고려한다면 $N$차원 정방행렬의 고윳값은 0개부터 $N$개까지 있을 수 있다.

중복된 고윳값을 각각 별개로 생각하고 복소수인 고윳값도 고려한다면 $N$차원 정방행렬의 고윳값은 항상 $N$개이다.

고유벡터의 계산

고윳값을 알면 다음 연립 방정식을 풀어 고유벡터를 구할 수 있다.

$$ (A - \lambda I)v = 0 $$

앞에서 예로 든 행렬 $A$에 대해서는

$$ \begin{bmatrix} 1+1 & -2 \\ 2 & -3+1 \end{bmatrix} \begin{bmatrix} v_1 \\ v_2 \end{bmatrix} = 0 $$$$ \begin{bmatrix} 2 & -2 \\ 2 & -2 \end{bmatrix} \begin{bmatrix} v_1 \\ v_2 \end{bmatrix} = 0 $$

이므로

$$2v_1 - 2v_2 = 0$$

즉,

$$v_1 = v_2$$

를 만족하는 모든 벡터가 고유벡터임을 알 수 있다.

연습 문제 5.4.3

특성방정식을 이용하여 다음 행렬의 고윳값과 고유벡터를 구하라.

$$ \begin{bmatrix} 2 & 3 \\ 2 & 1 \end{bmatrix}, \;\; \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix} $$

NumPy를 사용한 고유분해

numpy.linalg 서브패키지에서는 고윳값과 고유벡터를 구할 수 있는 eig 명령을 제공한다. 고윳값은 벡터의 형태로, 고유벡터는 고유벡터 행렬의 형태로 묶여서 나오고 고유벡터는 크기가 1인 단위벡터로 정규화가 되어있다.

eig 명령의 결과로 나오는 고유벡터 행렬은 행이 아니라 열을 고유벡터로 가진다는 점에 주의한다. 수치계산의 오류로 인해 중복되는 고윳값이 미세하게 다른 값으로 계산될 수도 있다.

In [1]:
A = np.array([[1, -2], [2, -3]])
w1, V1 = np.linalg.eig(A)
In [2]:
w1
Out:
array([-0.99999998, -1.00000002])
In [3]:
V1
Out:
array([[0.70710678, 0.70710678],
       [0.70710678, 0.70710678]])
In [4]:
B = np.array([[2, 3], [2, 1]])
w2, V2 = np.linalg.eig(B)
In [5]:
w2
Out:
array([ 4., -1.])
In [6]:
V2
Out:
array([[ 0.83205029, -0.70710678],
       [ 0.5547002 ,  0.70710678]])

실수인 고윳값이 존재하지 않는 행렬에 대해서는 복소수인 고윳값과 고유벡터를 계산한다.

$$ C = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} $$
In [7]:
C = np.array([[0, -1], [1, 0]])
W3, V3 = np.linalg.eig(C)
In [8]:
W3
Out:
array([0.+1.j, 0.-1.j])
In [9]:
V3
Out:
array([[0.70710678+0.j        , 0.70710678-0.j        ],
       [0.        -0.70710678j, 0.        +0.70710678j]])

연습 문제 5.4.4

지금까지 연습 문제에 나온 행렬들에 대해 NumPy를 사용하여 고유분해를 하라.

대각화

$N$ 차원의 정방 행렬 $A$가 $N$개의 복소수 고윳값과 이에 대응하는 고유벡터를 가진다는 성질을 이용하면 다음처럼 행렬을 분해할 수 있다.

행렬 $A$의 고윳값과 이에 대응하는 단위벡터인 고유벡터를 각각

$$ \lambda_1, \lambda_2, \cdots, \lambda_N \;\;\; v_1, v_2, \cdots, v_N $$

이라고 하자.

이 고윳값과 고유벡터를 묶어서 다음과 같이 고유벡터행렬, 고윳값행렬을 정의할 수 있다.

고유벡터행렬 $V$은 고유벡터를 열벡터로 옆으로 쌓아서 만든 행렬이다.

$$ V = \left[ v_1 \cdots v_N \right], \;\;\; V \in \mathbf{R}^{N \times N} $$

고윳값행렬 $\Lambda$은 고윳값을 대각성분으로 가지는 대각행렬이다.

$$ \Lambda = \begin{bmatrix} \lambda_{1} & 0 & \cdots & 0 \\ 0 & \lambda_{2} & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \lambda_{N} \\ \end{bmatrix} , \;\;\; \Lambda \in \mathbf{R}^{N \times N} $$

위와 같이 고유벡터행렬과 고윳값행렬을 정의하면 행렬과 고유벡터행렬의 곱은 고유벡터행렬과 고윳값행렬의 곱과 같다.

$$ \begin{eqnarray} AV &=& A \left[ v_1 \cdots v_N \right] \\ &=& \left[ A v_1 \cdots A v_N \right] \\ &=& \left[ \lambda_1 v_1 \cdots \lambda_N v_N \right] \\ &=& \left[ v_1 \cdots v_N \right] \begin{bmatrix} \lambda_{1} & 0 & \cdots & 0 \\ 0 & \lambda_{2} & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \lambda_{N} \\ \end{bmatrix} \\ &=& V\Lambda \end{eqnarray} $$$$ AV = V\Lambda $$

만약 고유벡터행렬 $V$의 역행렬이 존재한다면 행렬을 다음처럼 고유벡터행렬과 고윳값행열의 곱으로 표현할 수 있다. 이를 행렬의 대각화(diagonalization)라고 한다.

$$ A = V \Lambda V^{-1} $$

위에서 예로 든 행렬 $B$를 대각화하면 다음과 같다.

$$ V = \begin{bmatrix} \dfrac{3}{\sqrt{13}} & -\dfrac{1}{\sqrt{2}} \\ \dfrac{2}{\sqrt{13}} & \dfrac{1}{\sqrt{2}} \end{bmatrix} $$$$ \Lambda = \begin{bmatrix} 4 & 0 \\ 0 & -1 \end{bmatrix} $$$$ V^{-1} = \dfrac{1}{5} \begin{bmatrix} \sqrt{13} & \sqrt{13} \\ -2\sqrt{2} & 3\sqrt{2} \end{bmatrix} $$$$ B= \begin{bmatrix} 2 & 3 \\ 2 & 1 \end{bmatrix} = V\Lambda V^{-1} = \dfrac{1}{5} \begin{bmatrix} \dfrac{3}{\sqrt{13}} & -\dfrac{1}{\sqrt{2}} \\ \dfrac{2}{\sqrt{13}} & \dfrac{1}{\sqrt{2}} \end{bmatrix} \begin{bmatrix} 4 & 0 \\ 0 & -1 \end{bmatrix} \begin{bmatrix} \sqrt{13} & \sqrt{13} \\ -2\sqrt{2} & 3\sqrt{2} \end{bmatrix} $$

NumPy을 이용하며 위 식을 계산하면 좌변과 우변이 같음을 확인할 수 있다.

In [10]:
V2
Out:
array([[ 0.83205029, -0.70710678],
       [ 0.5547002 ,  0.70710678]])
In [11]:
V2_inv = np.linalg.inv(V2)
V2_inv
Out:
array([[ 0.72111026,  0.72111026],
       [-0.56568542,  0.84852814]])
In [12]:
V2.dot(np.diag(w2)).dot(V2_inv)
Out:
array([[2., 3.],
       [2., 1.]])

연습 문제 5.4.5

다음 행렬을 고윳값과 고유벡터로 대각화하라.

$$ \begin{bmatrix} 2 & 3 \\ 2 & 1 \end{bmatrix} $$

연습 문제 5.4.6

다음 행렬은 고윳값과 고유벡터로 대각화 가능한가?

$$ \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix} $$

대각화가능

행렬이 대각화가능하려면 고유벡터가 선형독립이어야한다.

행렬을 대각화할 수 있으면 대각화가능(diagonalizable) 행렬이라고 한다. 앞서 이야기했듯이 고유벡터인 열벡터로 이루어진 행렬에 역행렬이 존재하면 대각화가능이라고 했다. 그런데 앞절에서 정방행렬의 역행렬이 존재할 조건은 정방행렬의 열벡터 즉, 고유벡터들이 선형독립인 경우이다. 따라서 행렬이 대각화가능하려면 고유벡터가 선형독립이어야한다.

고윳값과 역행렬

대각화가능한 행렬에 0인 고유값이 없으면 항상 역행렬이 존재한다.

이는 다음과 같이 증명할 수 있다. 행렬 $A$가 대각화가능하면 다음처럼 표현할 수 있다.

$$ A = V\Lambda V^{-1} $$

이 행렬의 역행렬은 다음처럼 계산한다.

$$ A^{-1} = (V\Lambda V^{-1})^{-1} = V \Lambda^{-1} V^{-1} $$

대각행렬의 역행렬은 각 대각성분의 역수로 이루어진 대각행렬이므로 0인 고유값이 없으면 항상 역행렬이 존재한다.

연습 문제 5.4.7

다음 행렬

$$ \begin{bmatrix} 2 & 3 \\ 2 & 1 \end{bmatrix} $$

의 고윳값과 고유벡터는 다음과 같다. 이 정보를 이용하여 역행렬을 계산하라.

$$ \lambda_1 = 4, \;\; v_1 = \begin{bmatrix} \dfrac{3}{\sqrt{13}} \\ \dfrac{2}{\sqrt{13}} \end{bmatrix} $$$$ \lambda_2 = -1, \;\; v_2 = \begin{bmatrix} -\dfrac{1}{\sqrt{2}} \\ \dfrac{1}{\sqrt{2}} \end{bmatrix} $$

대칭행렬의 고유분해

행렬 $A$가 대칭행렬이면

고유값이 실수이고 고유벡터는 직교(orthogonal)한다.

이 정리의 증명은 생략한다.

만약 고유벡터가 크기 1이 되도록 정규화된 상태라면 고유벡터 행렬 $V$는 정규직교(orthonormal) 행렬이므로 전치행렬이 역행렬이다. 따라서 대칭행렬은 항상 대각화가능하다.

$$ V^T V = V V^T = I$$$$ V^{-1} = V^T $$

따라서 위 정리는 다음처럼 쓸 수 있다.

대칭행렬은 항상 대각화가능하다.

대칭행렬을 랭크-1 행렬의 합으로 분해

$N$차원 대칭행렬 $A$는 다음처럼 $N$개의 랭크-1 행렬 $A_i = v_i v_i^T$ 의 합으로 표시할 수 있다.

$$ \begin{eqnarray} A &=& V\Lambda V^T \\ &=& \begin{bmatrix} v_1 & v_2 & \cdots & v_N \end{bmatrix} \begin{bmatrix} \lambda_{1} & 0 & \cdots & 0 \\ 0 & \lambda_{2} & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \lambda_{N} \\ \end{bmatrix} \begin{bmatrix} v_1^T \\ v_2^T \\ \vdots \\ v_N^T \end{bmatrix} \\ &=& \begin{bmatrix} \lambda_{1}v_1 & \lambda_{2}v_2 & \cdots & \lambda_{N}v_N \end{bmatrix} \begin{bmatrix} v_1^T \\ v_2^T \\ \vdots \\ v_N^T \end{bmatrix} \\ &=& \sum_{i=1}^{N} {\lambda_i} v_i v_i^T \\ &=& \sum_{i=1}^{N} {\lambda_i} A_i \\ &=& \lambda_1 A_1 + \cdots + \lambda_N A_N \end{eqnarray} $$

예를 들어 대칭행렬

$$ \begin{bmatrix} 60 & 30 & 20 \\ 30 & 20 & 15 \\ 20 & 15 & 12 \\ \end{bmatrix} $$

를 NumPy를 사용하여 다음처럼 두 개의 랭크-1 행렬로 나눌 수 있다.

In [13]:
A = np.array([[60., 30., 20.],
              [30., 20., 15.],
              [20., 15., 12.]])

w, V = np.linalg.eig(A)
w1, w2, w3 = w
v1 = V[:, 0:1]
v2 = V[:, 1:2]
v3 = V[:, 2:3]
A1 = v1.dot(v1.T)
A2 = v2.dot(v2.T)
A3 = v3.dot(v3.T)
In [14]:
w
Out:
array([84.49913563,  7.33962395,  0.16124042])
In [15]:
w1 * A1
Out:
array([[57.79768857, 32.13739648, 22.59357583],
       [32.13739648, 17.8694387 , 12.56276371],
       [22.59357583, 12.56276371,  8.83200836]])
In [16]:
w2 * A2
Out:
array([[ 2.19968372, -2.12270483, -2.60775134],
       [-2.12270483,  2.04841985,  2.51649195],
       [-2.60775134,  2.51649195,  3.09152039]])
In [17]:
w3 * A3
Out:
array([[ 0.00262772, -0.01469165,  0.01417551],
       [-0.01469165,  0.08214145, -0.07925566],
       [ 0.01417551, -0.07925566,  0.07647125]])
In [18]:
w1 * A1 + w2 * A2 + w3 * A3
Out:
array([[60., 30., 20.],
       [30., 20., 15.],
       [20., 15., 12.]])

만약 0인 고윳값이 없다면 역행렬도 다음처럼 $N$개의 랭크-1 행렬 $A_i = v_i v_i^T$ 의 합으로 표시할 수 있다.

$$ A^{-1} = V \Lambda^{-1} V^T = \sum_{i=1}^{N} \dfrac{1}{\lambda_i} v_i v_i^T = \dfrac{1}{\lambda_1} A_1 + \cdots + \dfrac{1}{\lambda_N} A_N $$

앞에서 예로 든 대칭행렬의 역행렬도 다음처럼 랭크-1 행렬의 합으로 나타난다.

In [19]:
np.linalg.inv(A)
Out:
array([[ 0.15, -0.6 ,  0.5 ],
       [-0.6 ,  3.2 , -3.  ],
       [ 0.5 , -3.  ,  3.  ]])
In [20]:
1 / w1 * A1
Out:
array([[0.0080948 , 0.00450097, 0.00316432],
       [0.00450097, 0.00250269, 0.00175947],
       [0.00316432, 0.00175947, 0.00123696]])
In [21]:
1 / w2 * A2
Out:
array([[ 0.04083313, -0.03940415, -0.04840816],
       [-0.03940415,  0.03802519,  0.04671409],
       [-0.04840816,  0.04671409,  0.05738845]])
In [22]:
1 / w3 * A3
Out:
array([[ 0.10107208, -0.56509682,  0.54524384],
       [-0.56509682,  3.15947213, -3.04847356],
       [ 0.54524384, -3.04847356,  2.94137459]])
In [23]:
1 / w1 * A1 + 1 / w2 * A2 + 1 / w3 * A3
Out:
array([[ 0.15, -0.6 ,  0.5 ],
       [-0.6 ,  3.2 , -3.  ],
       [ 0.5 , -3.  ,  3.  ]])

대칭행렬의 간략화

대칭행렬을 랭크-1 행렬의 합으로 분해할 때 각 랭크-1 행렬 $A_i$는 모두 단위벡터인 고유벡터로 만들어진 행렬이므로 행렬의 놈이 1이다. 하지만 고유값은 아주 큰 값부터 작은 값까지 다양하게 나타날 수 있다. 따라서 다음처럼 고유값이 작은 항을 몇 개 생략해도 원래의 행렬과 큰 차이가 나지 않을 수 있다.

$$ \begin{eqnarray} A &=& \lambda_1 A_1 + \cdots + \lambda_{N} A_{N} \;\; ( \lambda_1 > \cdots > \lambda_N )\\ &\approx& \lambda_1 A_1 + \cdots + \lambda_{M} A_{M} \;\; ( N > M ) \end{eqnarray} $$

앞서 예로 사용한 행렬은 84.49913563, 7.33962395, 0.16124042, 이렇게 3개의 고윳값을 가진다. 이중 가장 작은 고윳값을 생략해도 행렬은 크게 달라지지 않는다.

In [24]:
w1 * A1 + w2 * A2 + w3 * A3  # A
Out:
array([[60., 30., 20.],
       [30., 20., 15.],
       [20., 15., 12.]])
In [25]:
w1 * A1 + w2 * A2
Out:
array([[59.99737228, 30.01469165, 19.98582449],
       [30.01469165, 19.91785855, 15.07925566],
       [19.98582449, 15.07925566, 11.92352875]])

고윳값과 양의 정부호

대칭행렬의 경우에 다음 성질이 성립한다.

대칭행렬의 고윳값이 모두 양수이면 그 행렬은 양의 정부호(positive definite)이다.

역으로 양의 정부호(positive definite)인 대칭행렬의 고윳값은 항상 양수이다.

우선 대칭행렬의 고윳값이 모두 양수이면 그 행렬은 양의 정부호(positive definite)가 됨을 증명하자. 일단 다음처럼 고유분해로 만들어진 행렬 $A_i = v_iv_i^T$는 양의 준정부호(positive semidefinite)임을 증명할 수 있다.

$$ x^T A_i x = x^T v_iv_i^T x = (x^T v_i)(x^T v_i)^T = (x^T v_i)(x^T v_i) = \vert x^T v_i \vert ^2 \geq 0 $$

이 식에서 $x$가 $v_i$와 수직(orthogonal)인 경우에만 0이 된다는 것을 알 수 있다. 여기에 양수인 고윳값을 곱한 행렬 $\lambda_i A_i$도 마찬가지로 양의 준정부호(positive semidefinite)이다. 이러한 행렬 $\lambda_i A_i$를 모두 더한 행렬 $\lambda_1 A_1 + \cdots + \lambda_N A_N$은 양의 정부호(positive definite)이다.

$$ \begin{eqnarray} A &=& \lambda_1 A_1 + \cdots + \lambda_N A_N \\ &=& \vert x^T v_1\vert ^2 + \cdots + \vert x^T v_N\vert ^2 > 0 \\ \end{eqnarray} $$

왜나하면 이 값이 0이려면 모든 $x^T v_i$가 0, 다시 말해 $x$와 모든 $v_i$가 직교해야 하는데 대칭행렬의 고유벡터의 집합은 $N$ 차원에서 기저벡터를 이루기 때문에 동시에 모든 기저벡터와 수직인 벡터는 존재하지 않기 때문이다.

역으로 양의 정부호(positive definite)인 대칭행렬의 고윳값은 항상 양수이다. 만약 0이나 음수인 고윳값 $\lambda \leq 0$가 존재한다면 다음처럼 이차 형식이 양수가 아닐 수 있기 때문이다.

$$ v_i^T A v_i = v_i^T \lambda_i v_i = \lambda_i v_i^T v_i \leq 0 $$

연습 문제 5.4.8

  1. 양의 정부호인 대칭행렬은 항상 역행렬이 존재하는가?
  2. 역으로 역행렬이 존재하는 대칭행렬은 항상 양의 정부호인가?

공분산행렬

임의의 실수 행렬 $X$에 대해 $X^TX$인 정방행렬을 공분산행렬(covariance matrix)이라고 한다. 공분산행렬의 의미는 확률 분포에서 더 자세하게 공부하게 될 것이며 일단 여기에서는 위와 같은 방법으로 계산되는 행렬을 가리키는 명칭이라는 것만 알면 충분하다.

공분산행렬은 양의 준정부호(positive semidefinite)이다. 즉 음수인 고윳값은 없다.

이는 다음과 같이 증명한다.

$$ v^T(X^TX)v = (Xv)^T(Xv) = u^Tu \geq 0 $$

즉, 모든 벡터 $v$에 대해 공분산행렬에 대한 이차형식은 어떤 벡터의 제곱합이 된다. 따라서 0또는 양수인 고윳값만 가진다.

행렬 $X$가 풀랭크이면 이 행렬의 공분산행렬 $X^TX$의 역행렬이 존재한다.

행렬 $X$가 풀랭크이면 $X$의 열벡터가 기저벡터를 이루기 때문에 영벡터가 아닌 모든 벡터 $v$에 대해 $Xv=u$는 영벡터가 될 수 없다. (만약 영벡터 $u$를 만드는 영벡터가 아닌 $v$가 존재한다면 서로 독립이 아니다.) 그러면 $X^TX$의 이차형식은 항상 양수가 된다.

$$ v^T(X^TX)v = (Xv)^T(Xv) = u^Tu > 0 $$

따라서 공분산행렬은 양의 정부호이고 역행렬이 존재한다.

연습 문제 5.4.9

  1. 붓꽃(Iris) 특징데이터 행렬 $X$의 공분산행렬을 구하고 이 공분산행렬의 고윳값들을 구하라.
  2. 보스턴 집값(Boston House Price) 특징데이터 행렬 $X$의 공분산행렬을 구하고 이 공분산행렬의 고윳값들을 구하라.

고윳값과 대각합/행렬식

어떤 행렬의 고윳값이 $\lambda_1, \lambda_2, \cdots, \lambda_N$이라고 하자.

이 때 모든 고윳값의 곱은 행렬식의 값과 같다.

$$ \det(A)=\prod_{i=1}^N \lambda_i $$

비슷한 방식으로 모든 고윳값의 합은 대각합(trace)의 값과 같다.

$$ \text{tr}(A) =\sum_{i=1}^N \lambda_i $$

이 성질들로부터 다음 성질을 유도할 수 있다.

  • 역행렬이 존재하면 행렬식은 0이 아니다.
  • 대칭행렬이 양의 정부호(positive-definite)이면 대각합이 양수이다.
  • 대칭행렬이 양의 정부호(positive-definite)이면 행렬식이 양수이다.
  • 대칭행렬이 양의 준정부호(positive-semidefinite)이면 대각합이 0이거나 양수이다.
  • 대칭행렬이 양의 준정부호(positive-semidefinite)이면 행렬식은 0이다.

정리: 고유분해의 성질

지금까지 나왔던 고유분해와 관련된 성질들을 정리하였다. 이 성질들은 데이터 분석에서 자주 사용되므로 반드시 외워야 한다.

$N$차원 정방행렬 $A$에 대해 다음 성질이 성립한다.

  1. 행렬 $A$는 $N$개의 고윳값-고유벡터를 가진다. (복소수인 경우와 중복인 경우를 포함)
  2. 행렬 $A$가 대칭행렬이면 $N$개의 실수 고윳값을 가지며 고유벡터들이 서로 수직(orthogonal)이다.
  3. 행렬 $A$가 대칭행렬이고 고윳값이 모두 양수이면 양의 정부호(positive-definite)이고 역행렬이 존재한다. 역도 성립한다.
  4. 행렬 $A$가 어떤 행렬 $X$의 공분산행렬 $X^TX$이면 0 또는 양의 고윳값을 가진다.
  5. 행렬 $X$가 풀랭크이면 공분산행렬 $X^TX$은 역행렬이 존재한다.
  6. 행렬의 대각합은 모든 고윳값의 합과 같다.
  7. 행렬의 행렬식은 모든 고윳값의 곱과 같다.

질문/덧글

밑에서 4째줄에 x'=V Transpose (x-mu) 아닌가요,.... eddy*** 2017년 10월 11일 9:58 오후

..

답변: 밑에서 4째줄에 x'=V Transpose (x-mu) 아닌가요,.... 관리자 2017년 10월 16일 2:13 오후

수정하였습니다. 지적 감사합니다.