특이값 분해 - 간단한 예제

2024. 10. 22. 01:55카테고리 없음

 

특이값 분해는 주어진 행렬을 분해하는 방법 중 하나입니다.

m x n 행렬을 직교행렬과 고윳값으로 이루어진 행렬의 곱으로 나타내는 방법이라 할 수 있죠.

 

여기서 특잇값이란, $ \sigma $ 기호로 표기하고 고윳값인 $\lambda $ 에 대한 양의 제곱근과 같습니다.

 

$\sigma =\sqrt{\lambda }$ 

 

아래는 특이값 분해 공식입니다.

 

$A = U \Sigma  V^{^{T}}$ 

 

하나씩 뜯어보도록 하겠습니다.

 

 

A는 m x n 의 실수행렬이고

 

U는 행렬 $A A^{T}$ 의 고유벡터를 열로 갖는 직교행렬,

 

$\Sigma $ 는 행렬 A의 특잇값을 주대각 성분으로 갖는 직사각 대각행렬

 

V는 행렬 $AA^{T}$  의 고유벡터를 열로 갖는 직교 행렬입니다. 

 

 

 

대충 이해가 되셨다면 간단한 예제를 이용해 특이값 분해 과정을 보여드리겠습니다.

 

 

행렬 $A = \begin{bmatrix}
1 & 2 & 0 \\
0 & 1 & 2 \\
\end{bmatrix}$ 를 특이값 분해하라

 

 

 

먼저, 특이값은 고윳값의 양의 제곱근이기 때문에 고윳값을 먼저 구해 특이값을 얻어야 합니다.

 

고윳값을 구하기 위해서는 n x n 꼴인 정방행렬이 되어야 하므로 

 

$A^{T}A$ 를 하여 $\widetilde{A}$ 꼴로 만들어줍니다. ($AA^{T}=\widetilde{A}$)

 

 

$AA^{T}= \begin{bmatrix}
1 & 0 \\
2 & 1 \\
0 & 2 \\
\end{bmatrix} \begin{bmatrix}
1 & 2 & 0 \\
0 & 1 & 2 \\
\end{bmatrix} = \begin{bmatrix}
1 &2  & 0 \\
2 &5  & 2 \\
0 & 2 & 4 \\
\end{bmatrix}$

 

 

이제 이 행렬로 고윳값을 구해주면, 

 

$\lambda I - \widetilde{A} = \begin{bmatrix}
\lambda -1 & -2 & 0 \\
-2 & \lambda -5 & -2 \\
0 & -2 & \lambda -4 \\
\end{bmatrix}

= \lambda (\lambda -3)(\lambda -7) = 0 $

 

 

이므로 행렬 $\widetilde{A}$ 의 고윳값은 7, 3, 0 이고, 

 

특이값은 크기 순으로 $\sigma _{1} = \sqrt 7$ , $\sigma _{2} = \sqrt 3$ , $\sigma _{3} = 0$ 입니다. 

 

특이값을 구했다면 특이값을 주대각 성분으로 갖는 직사각 대각행렬 $\Sigma $ 를 알 수 있습니다.

 

특이값이 3개 나왔으므로 $\Sigma =\begin{bmatrix}
\sqrt 7 & 0 & 0 \\
0 &\sqrt 3  & 0 \\
0 & 0 & 0 \\
\end{bmatrix}$ 이렇게 생각하실 수도 있겠지만, 

 

A가 2x3 행렬이므로 $\Sigma $ 도 3x3 이 아닌, 2x3 행렬로 나옵니다.

 

따라서 마지막 특이값 0은 사용하지 않습니다.

 

$\Sigma =\begin{bmatrix}
\sqrt 7 & 0 & 0 \\
0 &\sqrt 3  & 0 \\
\end{bmatrix}$

 

이제 $\Sigma$ 행렬은 구했고,

 

 

행렬 V를 구하기 위해 각 고윳값에 대응하는 고유벡터를 구해봅시다. 

 

고유벡터 구하는 자세한 방법은 아래 글을 참고해주세요.

https://studywithsheep.tistory.com/71

 

$\lambda_{1} = 7 , x_{1}=\begin{bmatrix}
\frac{1}{2} \\
\frac{3}{2} \\
1\\
\end{bmatrix}$   ,   $\lambda_{2} = 3 , x_{2}=\begin{bmatrix}
-\frac{1}{2} \\
-\frac{1}{2} \\
1\\
\end{bmatrix}$   ,   $\lambda_{3} = 0 , x_{3}=\begin{bmatrix}
4 \\
-2 \\
1\\
\end{bmatrix}$

 

 

이제 각 고유벡터를 열로 갖는 직교행렬 V를 구할 것입니다.

 

하나 주의할 점은, 벡터 $x_{1}, x_{2} , x_{3}$ 를 바로 붙여넣는 게 아니라는 것입니다.

 

각 고유벡터를 정규화된 단위 벡터로 표현해야 V가 나옵니다. 

 

 

 

구하는 방식은 다음과 같습니다. 

 

고유 벡터의 모든 값을 각각 제곱해준 뒤 더해주고 루트를 씌워줍니다.

 

그 후에 그 값을 고유 벡터에 나누어 주면 됩니다. 

 

 

나머지 $x_{2} , x_{3}$ 도 이와 같이 연산을 해주면 V를 구할 수 있습니다.

 

$V =\begin{bmatrix}
 \frac{\sqrt 14}{14}& -\frac{\sqrt 6}{6} & \frac{4\sqrt21}{21} \\
\frac{3\sqrt14}{14} & -\frac{\sqrt 6}{6} &-\frac{2\sqrt21}{21}  \\
\frac{\sqrt 14}{7} & \frac{\sqrt 6}{3} & \frac{\sqrt21}{21} \\
\end{bmatrix}$ 

 

 

 

마지막으로 U를 구해보겠습니다. 

 

U는

 

$u_{i} = \frac{1}{\sigma _{i}} \begin{bmatrix}
1 & 2 & 0 \\
0 & 1 & 2 \\
\end{bmatrix} v_{i}$ 

 

이렇게 구하라는 곳도 꽤 있지만, 

 

사실 V를 구한 방식대로 구할 수 있습니다. 

 

V와 U에 대한 설명을 보면,

 

V는 A행렬 x A 전치행렬의 고유벡터를 열로 갖는 직교행렬,

 

U는 A 전치행렬 x A행렬의 고유벡터를 열로 갖는 직교행렬로

 

곱셈의 순서밖에 차이가 없습니다. 

 

따라서, 

 

이번에는 A전치행렬 x A행렬을 해준 

 

$A^{T}A = \begin{bmatrix}
5 & 2 \\
2 & 5 \\
\end{bmatrix}$ 를 이용합니다. 

 

고윳값은 7, 3이 나온다는 걸 금방 구할 수 있고 

 

고유 벡터는 

 

고윳값이 7일 땐 $\begin{bmatrix}
1 \\1
\end{bmatrix}$ , 3일 땐 $\begin{bmatrix}
-1 \\1
\end{bmatrix}$ 이 나온다는 것도 구할 수 있습니다.

 

 

이를 이용해 정규화된 단위벡터로 만들어주면 , 

이런 식으로 나와서 U도 아래와 같이 구했습니다. 

 

$U = \begin{bmatrix}
\frac{\sqrt 2}{2} & -\frac{\sqrt 2}{2} \\
\frac{\sqrt 2}{2} & \frac{\sqrt 2}{2} \\
\end{bmatrix}$ 

 

 

이제 $A=U\Sigma V^{T}$ 에 각각을 대입해주기만 하면 특이값 분해는 끝이납니다. 

 

특이값 분해 결과 : 

 

$A=\begin{bmatrix}
1 & 2 & 0 \\
0 & 1 & 2 \\
\end{bmatrix}$ $= \begin{bmatrix}
\frac{\sqrt 2}{2} & -\frac{\sqrt 2}{2}  \\
\frac{\sqrt 2}{2} & \frac{\sqrt 2}{2} \\
\end{bmatrix}$ $\begin{bmatrix}
\sqrt 7 &0  &0  \\
0 & \sqrt 3 &  0\\
\end{bmatrix}$ $\begin{bmatrix}
\frac{\sqrt 14}{14} & -\frac{\sqrt 6}{6} & \frac{4 \sqrt 21}{21} \\
\frac{3 \sqrt 14}{14} &-\frac{\sqrt 6}{6}  & -\frac{2 \sqrt 21}{21} \\
\frac{\sqrt 14}{7} & \frac{\sqrt 6}{3} & \frac{\sqrt 21}{21} \\
\end{bmatrix}^{T}$