본문 바로가기

머신러닝

[파이썬] 역행렬과 유사역행렬

728x90

1. 역행렬

행렬을 곱했을 때 곱셈에 대한 항등원인 단위행렬이 나오게 하는 행렬을

역행렬이라고 합니다.

 

역행렬은 행과 열의 숫자가 동일하고 행렬식이 0이 아닌 경우에만 계산 가능합니다.

 

항등행렬은 곱했을 때 자기 자신이 나오게 하는 행렬을 말합니다.

 

역행렬을 계산하는 식 입니다.

 

$$\begin{bmatrix} a & b \\ c & d \end{bmatrix}^{-1}=\dfrac{1}{ad-bc}\begin{bmatrix} d & -b \\ -c & a \end{bmatrix}$$

 

여기서 ad - bc를 행렬식이라 부릅니다.

 

파이썬으로는 다음과 같이 구현할 수 있습니다.

 

import numpy as np

A = np.array([[1,2],
              [3,4]])

np.linalg.inv(A)

 

 

np.linalg.inv는 행렬의 역행렬, 즉 인버스 행렬을 구하는 numpy 함수입니다.

 

원래 행렬과 역행렬을 곱하면 항등 행렬이 나오게 됩니다.

 

예를들어 위 코드와 같은 행렬과 구한 역행렬을 곱할 시 

[[1, 0],[0,1]] 과 같은 항등 행렬이 나옵니다.

 

A @ np.linalg.inv(A)

 

사진과 같은 결과가 나오게 되는데 이는 지수 표현식으로써 1이나 0에 가장 유사한 값을 표현한 것 입니다.

 

728x90

2. 유사 역행렬

 

만약 역행렬 계산할 수 없다면, 유사역행렬 또는 무어-펜로즈 역행렬을 이용합니다.

유사 역행렬을 구할때는 많은 경우가 있습니다.

이번 포스팅에선 열보다 행이 크거나 같은 경우를 알아보겠습니다.

 

유사 역행렬을 구하는 식입니다.

 

$$\begin{aligned}\begin{bmatrix} 1 & 2 \\ 2 & 3 \\ 4 & 5 \end{bmatrix}^{-1}=\left( \begin{bmatrix} 1 & 2 & 4 \\ 2 & 3 & 5 \end{bmatrix}\begin{bmatrix} 1 & 2 \\ 2 & 3 \\ 4 & 5 \end{bmatrix}\right) ^{-1}\begin{bmatrix} 1 & 2 & 4 \\ 2 & 3 & 5 \end{bmatrix}\end{aligned}$$

 

전치 행렬과 행렬의 곱을 다시 역행렬을 취한 후 다시한번 전치 행렬을 곱해줍니다.

 

이를 파이썬으로 구현하면 다음과 같습니다.

 

import numpy as np

Y = np.array([[0,1],
              [1,-1],
              [2, 1]])

np.linalg.pinv(Y)

 

 

np.linalg.pinv는 유사역행렬을 구하는 numpy 함수입니다.

 

유사역행렬과 행렬을 곱하면 항등 행렬이 나옵니다.

 

np.linalg.pinv(Y) @ Y

 

 

마찬가지로 지수 표현식입니다.

1과 0의 근사치를 보여줍니다.

즉, [[1,0],[0,1]]의 항등 행렬이 됩니다.

728x90
반응형