본문 바로가기
수학의 재미/행렬 이론

행렬이 양수다? positive semidefinite

by hustler78 2022. 7. 4.
728x90
반응형

 

금융공학을 공부하다 보면 자산간의 상관계수와 그 상관계수로 이루어진 행렬의 성질들을 잘 알아야 합니다.

또한 2차 형식이라 불리는 수학의 한 분야도 공간 속의 곡면을 분석하거나 최대/최솟값을 분석하는데 행렬이 쓰입니다.

 

곡면의 모양 결정에도 positive definite 가 쓰이지. ML WIKI펌

 

 

이 때 등장하는 행렬의 개념이 positive semidefinite인데요. 우선, 정의가 어떻게 되는지 살펴보겠습니다.

어떤 $ n \times n$ 정방행렬 $\mathbf{A}$가 positive semidefinite라는 정의는

● $\mathbf{A}$는 대칭 행렬이고,

● 임의의 벡터 $\mathbf{v} \in \mathbb{R}^n$에 대하여, $\mathbf{v}^T \mathbf{Av} \geq 0$이다. 

참고로 행렬 $\mathbf{A}$가 positive definite라는 얘기는 2번째 부등호 식에서 등호가 빠진 경우입니다.  또한, 저 부호의 방향에 따라 negative semidefinite, negative definite 도 정의할 수 있습니다.

 

positive semidefinite는 우리말로 정치 행렬, 정부호 행렬 등으로 불립니다.

 

positive semidefinite 행렬은 무척 중요한 성질들이 있습니다. 바로 아래의 세 가지 명제가 동치입니다.

1. 행렬 $\mathbf{A}$가 positive semidefinite 이다.
2. 행렬 $\mathbf{A}$의 eigen value는 모두 음이 아닌 실수이다. 
3. 어떤 행렬 $\mathbf{B}$ 가 있어서 $\mathbf{B} \cdot \mathbf{B}^T = \mathbf{A}$를 만족한다.

1에서 2는 증명이 좀 간단하니 같이 한번 살펴보죠.

 

1번은 행렬 $\mathbf{A}$가 대칭 행렬임을 내포하고 있습니다. 즉 실수 eigen value에 서로 수직인 eigen vector들을 가지고 있죠.(여기 참조) 그런데 심지어 eigen value들이 0 이상이 된다는 점입니다.

 

만일 $\lambda$를 eigen value, $\mathbf{x}$를 그에 따른 eigen vector로 해 볼까요. 그렇다면

$$\mathbf{Ax} = \lambda \mathbf{x}$$

입니다. 양변에 $\mathbf{x}^T$를 걸어주면 $\mathbf{x^T A x} = x^T \lambda \mathbf{x} = \lambda ||\mathbf{x}||^2$ 이고 좌변은 positive semidefinite의 정의에 의해 0 이상이므로 $\lambda \geq 0$입니다. 여기서 $||\cdot ||$ 는 norm이라 읽고, 벡터의 크기(원점에서부터의 거리)를 나타내는 뜻입니다. 

 

간단한 예를 하나 들어볼까요?

$$
\mathbf{A} = \pmatrix{1 & - 1 \\ -1 & 1}  
$$

은 positive semidefinite 입니다. 임의의 

$$\mathbf{x } = \pmatrix{x_1\\x_2}$$에 대해

$$ \mathbf{x^T A x} = \pmatrix{x_1 & x_2} \pmatrix{1 & - 1 \\ 1 & 1}  \pmatrix{x_1 \\ x_2} =(x_1-x_2)^2 \geq 0$$ 을 만족합니다.

 


임의의 $n\times m$ 행렬 $\mathbf{B}$에 대해 

$$ \mathbf{B^TB}$$

도 positive semidefinite입니다. 임의의 $\mathbf{x} \in \mathbb{R}^m$에 대하여,

$$ \mathbf{x}^T \mathbf{B^TB} \mathbf{x} = (\mathbf{Bx})^T (\mathbf{Bx}) = ||\mathbf{Bx}||^2 \geq 0 $$

이기 때문이죠.

 

이 예제는 아주 중요합니다. 우리가 관심 있게 봐야 할 공분산 행렬(covariance matrix)나 상관계수 행렬(correlation matrix)과 밀접한 관련이 있기 때문입니다.

 

 

 

그런데 이것을 python으로 확인해 보려 하니 문제가 조금 있네요. python 코드를 보시죠.

 

import numpy as np
import numpy.linalg as LA

def example_of_psd():
    A= np.random.randn(3,5)
    X = A.T @ A

    d,Q = LA.eig(X)
    print('positive semidefinite matrix is:')
    print(A)

    print('min value of eigen values is {}'.format(np.min(d)))
 
if __name__ == '__main__':
    example_of_psd()​

간략히 설명하면 다음과 같습니다.

 

 

 

    A= np.random.randn(3,5)
    X = A.T @ A

○ 표준 정규분포 난수로 이루어진 3 * 5 배열을 하나 생성하고 A.T @A 를 하여 positive semidefinite 행렬을 만듭니다.

 

 

 

    d,Q = LA.eig(X)
    print('positive semidefinite matrix is:')
    print(A)

    print('min value of eigen values is {}'.format(np.min(d)))

○ numpy 안의 linalg 모듈을 탑재하여 eigen decomposition을 하여 d를 eigen value 들이라 합니다.

○ eigen value 들 중 최솟값을 구하여 출력합니다.

○ 주어진 X 가 positive semi definite 이므로 위의 사실에 따르면 eigen value 들은 모두 음수가 아니어야 합니다.

 

 

그런데 결과는??

 

positive semidefinite matrix is:
[[ 1.15838906 -1.5443935  -0.77597068  0.20958296  1.49867077]
 [ 1.07275681 -1.48956335  2.05782804  0.18227141  0.92144163]
 [ 1.75520237 -0.16816628 -0.99209765  0.20207254 -0.73651221]]
min value of eigen values is -3.713402008851557e-16

이렇게 나옵니다. 최솟값이 극미한 값을 지언정 음수가 나왔죠.. 

같은 고민들이 인터넷 상에 제법 있길래 찾아보니, 행렬을 고윳값 분해하는 와중에 numerical stability issue가 발생할 가능성이 있다고 합니다.

다시 말해, eigen value 중에 음수가 있으면 행렬은 positive semidefinite 가 아니군~ 하고 생각하면 안 되겠습니다.

 

참고로 여기에 positive semidefinite를 판별하는 python code에 대한 논의가 있는데, 아래 코드와 같이 일종의 tolerance를 줘서 판별하는 방법을 쓰기도 합니다.

 

def isPSD(A, tol=1e-8):
    E = np.linalg.eigvalsh(A)
    return np.all(E > -tol)

 

 

다음 글에서는 공분산 행렬이 postitive semi definite 행렬과 어떤 관계가 있는지 알아보겠습니다.

728x90
반응형

댓글