대각화
N N N 차원의 정방 행렬 A A A 가 N N N 개의 복소수 고윳값과 이에 대응하는 고유벡터를 가진다는 성질을 이용하면 다음처럼 행렬을 분해할 수 있다.
행렬 A A A 의 고윳값과 이에 대응하는 단위벡터인 고유벡터를 각각
λ 1 , λ 2 , ⋯ , λ N v 1 , v 2 , ⋯ , v N (3.3.49) \lambda_1, \lambda_2, \cdots, \lambda_N \;\;\; v_1, v_2, \cdots, v_N \tag{3.3.49} λ 1 , λ 2 , ⋯ , λ N v 1 , v 2 , ⋯ , v N ( 3 . 3 . 4 9 )
이라고 하자.
이 고윳값과 고유벡터를 묶어서 다음과 같이 고유벡터행렬, 고윳값행렬을 정의할 수 있다.
고유벡터행렬 V V V 은 고유벡터를 열벡터로 옆으로 쌓아서 만든 행렬이다.
V = [ v 1 ⋯ v N ] (3.3.50) V = \left[ v_1 \cdots v_N \right] \tag{3.3.50} V = [ v 1 ⋯ v N ] ( 3 . 3 . 5 0 )
V ∈ R N × N (3.3.51) V \in \mathbf{R}^{N \times N} \tag{3.3.51} V ∈ R N × N ( 3 . 3 . 5 1 )
고윳값행렬 Λ \Lambda Λ 은 고윳값을 대각성분으로 가지는 대각행렬이다.
Λ = [ λ 1 0 ⋯ 0 0 λ 2 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ λ N ] (3.3.52) \Lambda = \begin{bmatrix} \lambda_{1} & 0 & \cdots & 0 \\ 0 & \lambda_{2} & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & \lambda_{N} \\ \end{bmatrix} \tag{3.3.52} Λ = ⎣ ⎢ ⎢ ⎢ ⎢ ⎡ λ 1 0 ⋮ 0 0 λ 2 ⋮ 0 ⋯ ⋯ ⋱ ⋯ 0 0 ⋮ λ N ⎦ ⎥ ⎥ ⎥ ⎥ ⎤ ( 3 . 3 . 5 2 )
Λ ∈ R N × N (3.3.53) \Lambda \in \mathbf{R}^{N \times N} \tag{3.3.53} Λ ∈ R N × N ( 3 . 3 . 5 3 )
위와 같이 고유벡터행렬과 고윳값행렬을 정의하면 행렬과 고유벡터행렬의 곱은 고유벡터행렬과 고윳값행렬의 곱과 같다 .
A V = A [ v 1 ⋯ v N ] = [ A v 1 ⋯ A v N ] = [ λ 1 v 1 ⋯ λ N v N ] = [ v 1 ⋯ v N ] [ λ 1 0 ⋯ 0 0 λ 2 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ λ N ] = V Λ (3.3.54) \begin{aligned} 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{aligned} \tag{3.3.54} A V = A [ v 1 ⋯ v N ] = [ A v 1 ⋯ A v N ] = [ λ 1 v 1 ⋯ λ N v N ] = [ v 1 ⋯ v N ] ⎣ ⎢ ⎢ ⎢ ⎢ ⎡ λ 1 0 ⋮ 0 0 λ 2 ⋮ 0 ⋯ ⋯ ⋱ ⋯ 0 0 ⋮ λ N ⎦ ⎥ ⎥ ⎥ ⎥ ⎤ = V Λ ( 3 . 3 . 5 4 )
A V = V Λ (3.3.55) AV = V\Lambda \tag{3.3.55} A V = V Λ ( 3 . 3 . 5 5 )
만약 고유벡터행렬 V V V 의 역행렬이 존재한다면 행렬을 다음처럼 고유벡터행렬과 고윳값행렬의 곱으로 표현할 수 있다. 이를 행렬의 대각화(diagonalization) 라고 한다.
A = V Λ V − 1 (3.3.56) A = V \Lambda V^{-1} \tag{3.3.56} A = V Λ V − 1 ( 3 . 3 . 5 6 )
예제
위에서 예로 든 행렬 B B B 를 대각화하면 다음과 같다.
V = [ 3 13 − 1 2 2 13 1 2 ] (3.3.57) V = \begin{bmatrix} \dfrac{3}{\sqrt{13}} & -\dfrac{1}{\sqrt{2}} \\ \dfrac{2}{\sqrt{13}} & \dfrac{1}{\sqrt{2}} \end{bmatrix} \tag{3.3.57} V = ⎣ ⎢ ⎢ ⎡ 1 3 3 1 3 2 − 2 1 2 1 ⎦ ⎥ ⎥ ⎤ ( 3 . 3 . 5 7 )
Λ = [ 4 0 0 − 1 ] (3.3.58) \Lambda = \begin{bmatrix} 4 & 0 \\ 0 & -1 \end{bmatrix} \tag{3.3.58} Λ = [ 4 0 0 − 1 ] ( 3 . 3 . 5 8 )
V − 1 = 1 5 [ 13 13 − 2 2 3 2 ] (3.3.59) V^{-1} = \dfrac{1}{5} \begin{bmatrix} \sqrt{13} & \sqrt{13} \\ -2\sqrt{2} & 3\sqrt{2} \end{bmatrix} \tag{3.3.59} V − 1 = 5 1 [ 1 3 − 2 2 1 3 3 2 ] ( 3 . 3 . 5 9 )
B = [ 2 3 2 1 ] = V Λ V − 1 = 1 5 [ 3 13 − 1 2 2 13 1 2 ] [ 4 0 0 − 1 ] [ 13 13 − 2 2 3 2 ] (3.3.60) 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} \tag{3.3.60} B = [ 2 2 3 1 ] = V Λ V − 1 = 5 1 ⎣ ⎢ ⎢ ⎡ 1 3 3 1 3 2 − 2 1 2 1 ⎦ ⎥ ⎥ ⎤ [ 4 0 0 − 1 ] [ 1 3 − 2 2 1 3 3 2 ] ( 3 . 3 . 6 0 )
NumPy을 이용하여 위 식을 계산하면 좌변과 우변이 같음을 확인할 수 있다.
V2
array([[ 0.83205029, -0.70710678],
[ 0.5547002 , 0.70710678]])
V2_inv = np. linalg. inv( V2)
V2_inv
array([[ 0.72111026, 0.72111026],
[-0.56568542, 0.84852814]])
V2 @ np. diag( w2) @ V2_inv
array([[2., 3.],
[2., 1.]])
연습 문제 3.3.6
다음 행렬을 고윳값과 고유벡터로 대각화하라.
[ 2 3 2 1 ] (3.3.61) \begin{bmatrix} 2 & 3 \\ 2 & 1 \end{bmatrix} \tag{3.3.61} [ 2 2 3 1 ] ( 3 . 3 . 6 1 )
✒️
import numpy as np
a = np. array( [ [ 2 , 3 ] , [ 2 , 1 ] ] )
w, V = np. linalg. eig( a)
lamb = np. diag( w)
a_diag = V @ lamb @ np. linalg. inv( V)
print ( a, a_diag)
[[2 3] [2 1]]
[[2. 3.] [2. 1.]]
연습 문제 3.3.7
다음 행렬은 고윳값과 고유벡터로 대각화 가능한가?
[ 1 1 0 1 ] (3.3.62) \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix} \tag{3.3.62} [ 1 0 1 1 ] ( 3 . 3 . 6 2 )
✒️
고유벡터로 만든 행렬이 역행렬을 갖지 않아서 불가능하다.
대각화가능
[정리] 행렬이 대각화가능하려면 고유벡터가 선형독립이어야 한다.
고윳값과 역행렬
[정리] 대각화가능한 행렬에 0인 고유값이 없으면 항상 역행렬이 존재한다.
이는 다음과 같이 증명할 수 있다.
행렬 A A A 가 대각화가능하면 다음처럼 표현할 수 있다.
A = V Λ V − 1 (3.3.63) A = V\Lambda V^{-1} \tag{3.3.63} A = V Λ V − 1 ( 3 . 3 . 6 3 )
이 행렬의 역행렬은 다음처럼 계산한다.
A − 1 = ( V Λ V − 1 ) − 1 = V Λ − 1 V − 1 (3.3.64) A^{-1} = (V\Lambda V^{-1})^{-1} = V \Lambda^{-1} V^{-1} \tag{3.3.64} A − 1 = ( V Λ V − 1 ) − 1 = V Λ − 1 V − 1 ( 3 . 3 . 6 4 )
대각행렬의 역행렬은 각 대각성분의 역수로 이루어진 대각행렬이므로 0인 고유값만 없으면 항상 역행렬이 존재한다.
✒️
대각화를 통해 행렬곱으로 표현한 뒤 양변에 det를 적용하면 행렬곱의 det는 각 행렬의 det의 곱이므로 det(A) = d e t ( V ) d e t ( Λ ) d e t ( V − 1 ) det(V)det(\Lambda)det( V^{-1} ) d e t ( V ) d e t ( Λ ) d e t ( V − 1 ) 에서 모든 고윳값이 0이 아니면 이 식도 0이 아니고 따라서 역행렬이 존재한다.
✒️참조
det(대각행렬) = 대각 성분들의 곱
고윳값들의 곱 = det
연습 문제 3.3.8
[ 2 3 2 1 ] (3.3.65) \begin{bmatrix} 2 & 3 \\ 2 & 1 \end{bmatrix} \tag{3.3.65} [ 2 2 3 1 ] ( 3 . 3 . 6 5 )
의 고윳값과 고유벡터는 다음과 같다. 이 정보를 이용하여 역행렬을 계산하라.
λ 1 = 4 , v 1 = [ 3 13 2 13 ] (3.3.66) \lambda_1 = 4, \;\; v_1 = \begin{bmatrix} \dfrac{3}{\sqrt{13}} \\ \dfrac{2}{\sqrt{13}} \end{bmatrix} \tag{3.3.66} λ 1 = 4 , v 1 = ⎣ ⎢ ⎢ ⎡ 1 3 3 1 3 2 ⎦ ⎥ ⎥ ⎤ ( 3 . 3 . 6 6 )
λ 2 = − 1 , v 2 = [ − 1 2 1 2 ] (3.3.67) \lambda_2 = -1, \;\; v_2 = \begin{bmatrix} -\dfrac{1}{\sqrt{2}} \\ \dfrac{1}{\sqrt{2}} \end{bmatrix} \tag{3.3.67} λ 2 = − 1 , v 2 = ⎣ ⎢ ⎢ ⎡ − 2 1 2 1 ⎦ ⎥ ⎥ ⎤ ( 3 . 3 . 6 7 )
✒️
고유벡터들이 선형독립인가?
yes -> 대각화 가능
고윳값이 모두 0이 아닌 값인가?
yes -> 역행렬 존재
A = V Λ V − 1 A = V\Lambda V^{-1} A = V Λ V − 1 이므로 A − 1 = V Λ − 1 V − 1 A^{-1} = V\Lambda^{-1} V^{-1} A − 1 = V Λ − 1 V − 1
import numpy as np
v = np. array( [ [ 3 / np. sqrt( 13 ) , - 1 / np. sqrt( 2 ) ] , [ 2 / np. sqrt( 13 ) , 1 / np. sqrt( 2 ) ] ] )
w = np. array( [ 4 , - 1 ] )
print ( v @ np. linalg. inv( np. diag( w) ) @ np. linalg. inv( v) )
[[-0.25 0.75]
[ 0.5 -0.5 ]]
역행렬 공식대로 구해보면 동일하다
대칭행렬의 고유분해
대칭행렬에 대해서는 다음 정리가 성립한다.
[정리] 행렬 A A A 가 실수인 대칭행렬이면 고유값이 실수이고 고유벡터는 서로 직교(orthogonal)한다.
만약 고유벡터들이 크기가 1이 되도록 정규화된 상태라면 고유벡터 행렬 V V V 는 정규직교(orthonormal) 행렬이므로 전치행렬이 역행렬 이다.
V T V = V V T = I (3.3.68) V^T V = V V^T = I \tag{3.3.68} V T V = V V T = I ( 3 . 3 . 6 8 )
V − 1 = V T (3.3.69) V^{-1} = V^T \tag{3.3.69} V − 1 = V T ( 3 . 3 . 6 9 )
따라서 대각화가 가능하고 다음처럼 쓸 수 있다.
A = V Λ V T (3.3.70) A = V\Lambda V^T \tag{3.3.70} A = V Λ V T ( 3 . 3 . 7 0 )
이 사실로부터 다음 정리도 도출된다.
[정리] 실수인 대칭행렬은 항상 대각화가능 하다.
대칭행렬을 랭크-1 행렬의 합으로 분해
N N N 차원 대칭행렬 A A A 는 다음처럼 N N N 개의 랭크-1 행렬 A i = v i v i T A_i = v_i v_i^T A i = v i v i T 의 합으로 표시할 수 있다.
A = V Λ V T = [ v 1 v 2 ⋯ v N ] [ λ 1 0 ⋯ 0 0 λ 2 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ λ N ] [ v 1 T v 2 T ⋮ v N T ] = [ λ 1 v 1 λ 2 v 2 ⋯ λ N v N ] [ v 1 T v 2 T ⋮ v N T ] (3.3.71) \begin{aligned} 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} \\ \end{aligned} \tag{3.3.71} A = V Λ V T = [ v 1 v 2 ⋯ v N ] ⎣ ⎢ ⎢ ⎢ ⎢ ⎡ λ 1 0 ⋮ 0 0 λ 2 ⋮ 0 ⋯ ⋯ ⋱ ⋯ 0 0 ⋮ λ N ⎦ ⎥ ⎥ ⎥ ⎥ ⎤ ⎣ ⎢ ⎢ ⎢ ⎢ ⎡ v 1 T v 2 T ⋮ v N T ⎦ ⎥ ⎥ ⎥ ⎥ ⎤ = [ λ 1 v 1 λ 2 v 2 ⋯ λ N v N ] ⎣ ⎢ ⎢ ⎢ ⎢ ⎡ v 1 T v 2 T ⋮ v N T ⎦ ⎥ ⎥ ⎥ ⎥ ⎤ ( 3 . 3 . 7 1 )
따라서 N N N 차원 대칭행렬 A A A 는
A = ∑ i = 1 N λ i v i v i T = ∑ i = 1 N λ i A i = λ 1 A 1 + ⋯ + λ N A N (3.3.72) A = \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 \tag{3.3.72} A = i = 1 ∑ N λ i v i v i T = i = 1 ∑ N λ i A i = λ 1 A 1 + ⋯ + λ N A N ( 3 . 3 . 7 2 )
예제
대칭행렬
[ 60 30 20 30 20 15 20 15 12 ] (3.3.73) \begin{bmatrix} 60 & 30 & 20 \\ 30 & 20 & 15 \\ 20 & 15 & 12 \\ \end{bmatrix} \tag{3.3.73} ⎣ ⎢ ⎡ 6 0 3 0 2 0 3 0 2 0 1 5 2 0 1 5 1 2 ⎦ ⎥ ⎤ ( 3 . 3 . 7 3 )
를 NumPy를 사용하여 다음처럼 세 개의 랭크-1 행렬로 나눌 수 있다.
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 @ v1. T
A2 = v2 @ v2. T
A3 = v3 @ v3. T
w
array([84.49913563, 7.33962395, 0.16124042])
w1 * A1
array([[57.79768857, 32.13739648, 22.59357583],
[32.13739648, 17.8694387 , 12.56276371],
[22.59357583, 12.56276371, 8.83200836]])
w2 * A2
array([[ 2.19968372, -2.12270483, -2.60775134],
[-2.12270483, 2.04841985, 2.51649195],
[-2.60775134, 2.51649195, 3.09152039]])
w3 * A3
array([[ 0.00262772, -0.01469165, 0.01417551],
[-0.01469165, 0.08214145, -0.07925566],
[ 0.01417551, -0.07925566, 0.07647125]])
w1 * A1 + w2 * A2 + w3 * A3
array([[60., 30., 20.],
[30., 20., 15.],
[20., 15., 12.]])
만약 0인 고윳값이 없다면 역행렬도 다음처럼 N N N 개의 랭크-1 행렬 A i = v i v i T A_i = v_i v_i^T A i = v i v i T 의 합으로 표시할 수 있다.
A − 1 = V Λ − 1 V T = ∑ i = 1 N 1 λ i v i v i T = 1 λ 1 A 1 + ⋯ + 1 λ N A N (3.3.74) 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 \tag{3.3.74} A − 1 = V Λ − 1 V T = i = 1 ∑ N λ i 1 v i v i T = λ 1 1 A 1 + ⋯ + λ N 1 A N ( 3 . 3 . 7 4 )
앞에서 예로 든 대칭행렬의 역행렬도 다음처럼 랭크-1 행렬의 합으로 나타난다.
np. linalg. inv( A)
array([[ 0.15, -0.6 , 0.5 ],
[-0.6 , 3.2 , -3. ],
[ 0.5 , -3. , 3. ]])
1 / w1 * A1
array([[0.0080948 , 0.00450097, 0.00316432],
[0.00450097, 0.00250269, 0.00175947],
[0.00316432, 0.00175947, 0.00123696]])
1 / w2 * A2
array([[ 0.04083313, -0.03940415, -0.04840816],
[-0.03940415, 0.03802519, 0.04671409],
[-0.04840816, 0.04671409, 0.05738845]])
1 / w3 * A3
array([[ 0.10107208, -0.56509682, 0.54524384],
[-0.56509682, 3.15947213, -3.04847356],
[ 0.54524384, -3.04847356, 2.94137459]])
1 / w1 * A1 + 1 / w2 * A2 + 1 / w3 * A3
array([[ 0.15, -0.6 , 0.5 ],
[-0.6 , 3.2 , -3. ],
[ 0.5 , -3. , 3. ]])
대칭행렬의 고윳값 부호
대칭행렬이 위와 같이 랭크-1 행렬의 합으로 표시되고 고유벡터가 서로 직교한다는 성질을 이용하면 다음 정리를 증명할 수 있다.
[정리] 대칭행렬이 양의 정부호(positive definite)이면 고윳값은 모두 양수다. 역도 성립한다.
[정리] 대칭행렬이 양의 준정부호(positive semidefinite)이면 고윳값은 모두 0이거나 양수다. 역도 성립한다.
여기에서는 첫 번째 정리만 증명해보자. 두 번째 정리도 비슷한 방법으로 증명할 수 있다.
대칭행렬은 랭크-1 행렬의 합으로 표시된다고 하였다.
A = ∑ i = 1 N λ i v i v i T (3.3.75) A = \sum_{i=1}^{N} {\lambda_i} v_i v_i^T \tag{3.3.75} A = i = 1 ∑ N λ i v i v i T ( 3 . 3 . 7 5 )
만약 대칭행렬이 양의 정부호이면 어떤 벡터 x x x 를 행렬 A A A 의 앞뒤에 곱해 이차형식을 만들어도 0보다 커야 하므로 j j j 번째 고유벡터 x = v j x=v_j x = v j 를 선택하여 곱해도 마찬가지다.
v j T A v j > 0 (3.3.76) v_j^TAv_j > 0 \tag{3.3.76} v j T A v j > 0 ( 3 . 3 . 7 6 )
그런데 대칭행렬은 고유벡터들이 서로 직교한다.
v i T v j = 0 ( if i ≠ j ) (3.3.77) v_i^Tv_j = 0 \; (\text{if } i \neq j) \tag{3.3.77} v i T v j = 0 ( if i = j ) ( 3 . 3 . 7 7 )
v i T v i = 1 (3.3.78) v_i^Tv_i^{} = 1 \tag{3.3.78} v i T v i = 1 ( 3 . 3 . 7 8 )
따라서
v j T A v j = v j T ( ∑ i = 1 N λ i v i v i T ) v j = ∑ i = 1 N λ i v j T v i v i T v j = λ j > 0 (3.3.79) v_j^TAv_j = v_j^T \left( \sum_{i=1}^{N} {\lambda_i} v_i v_i^T \right) v_j = \sum_{i=1}^{N} {\lambda_i} v_j^Tv_i v_i^Tv_j = \lambda_j > 0 \tag{3.3.79} v j T A v j = v j T ( i = 1 ∑ N λ i v i v i T ) v j = i = 1 ∑ N λ i v j T v i v i T v j = λ j > 0 ( 3 . 3 . 7 9 )
이므로 양수인 고윳값만 가진다.
반대로 대칭행렬의 고윳값이 모두 양수이면 그 행렬은 양의 정부호가 됨을 증명하자. 우선 고유분해로 만들어진 랭크-1 행렬 A i = v i v i T A_i = v_iv_i^T A i = v i v i T 는 양의 준정부호(positive semidefinite)임을 증명할 수 있다.
x T A i x = x T v i v i T x = ( x T v i ) ( x T v i ) T = ( x T v i ) ( x T v i ) = ∥ x T v i ∥ 2 ≥ 0 (3.3.80) 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) = \| x^T v_i \| ^2 \geq 0 \tag{3.3.80} x T A i x = x T v i v i T x = ( x T v i ) ( x T v i ) T = ( x T v i ) ( x T v i ) = ∥ x T v i ∥ 2 ≥ 0 ( 3 . 3 . 8 0 )
이 식에서 x x x 가 v i v_i v i 와 직교(orthogonal)인 경우에만 0이 된다는 것을 알 수 있다. 고윳값 λ i \lambda_i λ i 가 모두 양수이므로 따라서 행렬 λ i A i \lambda_i A_i λ i A i 를 모두 더한 행렬 λ 1 A 1 + ⋯ + λ N A N \lambda_1 A_1 + \cdots + \lambda_N A_N λ 1 A 1 + ⋯ + λ N A N 도 양의 준정부호다.
x T A x = λ 1 x T A 1 x + ⋯ + λ N x T A N x = λ 1 ∥ x T v 1 ∥ 2 + ⋯ + λ N ∥ x T v N ∥ 2 ≥ 0 (3.3.81) \begin{aligned} x^TAx &= \lambda_1 x^TA_1x + \cdots + \lambda_N x^TA_Nx \\ &= \lambda_1 \| x^T v_1 \| ^2 + \cdots + \lambda_N \| x^T v_N \| ^2 \geq 0 \\ \end{aligned} \tag{3.3.81} x T A x = λ 1 x T A 1 x + ⋯ + λ N x T A N x = λ 1 ∥ x T v 1 ∥ 2 + ⋯ + λ N ∥ x T v N ∥ 2 ≥ 0 ( 3 . 3 . 8 1 )
그런데 이 값은 실제로는 0이 될 수 없다. 왜나하면 이 값이 0이려면 모든 x T v i x^T v_i x T v i 가 0, 다시 말해 x x x 와 모든 v i v_i v i 가 직교해야 하는데 대칭행렬의 고유벡터의 집합은 N N N 차원에서 기저벡터를 이루기 때문에 동시에 모든 기저벡터와 직교인 벡터는 존재하지 않기 때문이다. 따라서 양의 정부호다.
분산행렬
임의의 실수 행렬 X X X 에 대해 X T X X^TX X T X 인 정방행렬을 분산행렬(scatter matrix) 이라고 한다. 분산행렬의 의미는 확률 분포에서 더 자세하게 공부할 것이다. 일단은 위와 같은 방법으로 계산되는 행렬을 가리키는 명칭이라는 것만 알아두자.
분산행렬에 대해서는 다음 정리가 성립한다.
[정리] 분산행렬은 양의 준정부호(positive semidefinite)이고 고윳값은 0보다 같거나 크다.
임의의 영벡터가 아닌 벡터 x x x 에 대해 분산행렬에 대한 이차형식을 구하면
x T ( X T X ) x = ( X x ) T ( X x ) = u T u ≥ 0 (3.3.82) x^T(X^TX)x = (Xx)^T(Xx) = u^Tu \geq 0 \tag{3.3.82} x T ( X T X ) x = ( X x ) T ( X x ) = u T u ≥ 0 ( 3 . 3 . 8 2 )
로 어떤 벡터 u u u 의 제곱합이 된다. 따라서 이 값은 0보다 같거나 크고 분산행렬은 양의 준정부호다. 그런데 분산행렬은 대칭행렬이므로 양의준정부호이면 고유값이 모두 0이상이다.
연습 문제 3.3.9
(1) 붓꽃(Iris) 특징데이터 행렬 X X X 의 분산행렬을 구하고 이 분산행렬의 고윳값들을 구하라.
✒️
from sklearn. datasets import load_iris
X = load_iris( ) . data
X_scatter = X. T @ X
W, V = np. linalg. eig( X_scatter)
print ( W)
[9.20830507e+03 3.15454317e+02 1.19780429e+01 3.55257020e+00]
(2) 보스턴 집값(Boston House Price) 특징데이터 행렬 X X X 의 분산행렬을 구하고 이 분산행렬의 고윳값들을 구하라.
✒️
import pandas as pd
import numpy as np
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd. read_csv( data_url, sep= "\s+" , skiprows= 22 , header= None )
data = np. hstack( [ raw_df. values[ : : 2 , : ] , raw_df. values[ 1 : : 2 , : 2 ] ] )
target = raw_df. values[ 1 : : 2 , 2 ]
X = data
X_scatter = X. T @ X
W, V = np. linalg. eig( X_scatter)
print ( W)
[1.58386796e+08 1.18747372e+07 4.17002244e+05
1.61644573e+05 2.52697480e+04 1.47629635e+04
8.18396001e+03 6.07326738e+03 4.23577535e+03
6.06399504e+02 3.27412564e+02 3.04157837e+01
2.19326965e+00]
분산행렬의 역행렬
분산행렬에서는 다음 정리가 성립한다.
[정리] 행렬 X ∈ R N × M ( N ≥ M ) X\in\mathbf{R}^{N\times M} (N\geq M) X ∈ R N × M ( N ≥ M ) 가 풀랭크이면 이 행렬의 분산행렬 X T X X^TX X T X 의 역행렬이 존재한다.
행렬 X ∈ R N × M ( N ≥ M ) X\in\mathbf{R}^{N\times M} (N\geq M) X ∈ R N × M ( N ≥ M ) 가 풀랭크이면 X X X 의 열벡터가 기저벡터를 이루기 때문에 영벡터가 아닌 모든 벡터 v v v 에 대해 X v = u Xv=u X v = u 는 영벡터가 될 수 없다. (만약 영벡터 u u u 를 만드는 영벡터가 아닌 v v v 가 존재한다면 서로 독립이 아니다.) 그러면 X T X X^TX X T X 의 이차형식은 항상 양수가 된다.
v T ( X T X ) v = ( X v ) T ( X v ) = u T u > 0 (3.3.83) v^T(X^TX)v = (Xv)^T(Xv) = u^Tu > 0 \tag{3.3.83} v T ( X T X ) v = ( X v ) T ( X v ) = u T u > 0 ( 3 . 3 . 8 3 )
따라서 분산행렬은 양의 정부호이고 역행렬이 존재한다.
연습 문제 3.3.10
(1) 양의 정부호인 대칭행렬은 항상 역행렬이 존재하는가?
✒️
그렇다.
(2) 역으로 역행렬이 존재하는 대칭행렬은 항상 양의 정부호인가?
✒️
그렇다.
N N N 차원 정방행렬 A A A 에 대해
행렬 A A A 는 N N N 개의 고윳값-고유벡터를 가진다(복소수인 경우와 중복인 경우를 포함).
행렬의 대각합은 모든 고윳값의 합 과 같다.
행렬의 행렬식은 모든 고윳값의 곱 과 같다.
행렬 A A A 가 대칭행렬 이면 N N N 개의 실수 고윳값 을 가지며 고유벡터들이 서로 직교(orthogonal) 이다.
행렬 A A A 가 대칭행렬 이고 고윳값이 모두 양수 이면 양의 정부호(positive-definite)이고 역행렬이 존재한다 . 역도 성립한다.
행렬 A A A 가 어떤 행렬 X X X 의 분산행렬 X T X X^TX X T X 이면 0 또는 양의 고윳값을 가진다 .
행렬 X ∈ R N × M ( N ≥ M ) X\in\mathbf{R}^{N\times M} (N\geq M) X ∈ R N × M ( N ≥ M ) 가 풀랭크이면 분산행렬 X T X X^TX X T X 은 역행렬이 존재 한다.