본문 바로가기
통계학 | 수학/Math for ML

Eigendecomposition

by 채채씨 2022. 1. 20.
728x90
반응형

 

 

어떤 벡터 $\vec{x}$ 를 행렬 A로 선형 변환했을 때, 방향은 변하지 않고 크기만 바뀌는 벡터 $\vec{x}$를 행렬 A의 Eigenvector라 하고, 크기가 얼만큼 변했는지를 나타내는 $\lambda$ 를 Eigenvalue라 한다.

 

$$
\mathbf{A} \mathbf{v}=\lambda \mathbf{v}
$$

 

1. Finding Eigenvalues

 

Eigenvalue $\lambda$ 를 찾아보자. 

 

$$
(A-\lambda I) \vec{x}=0
$$

 

위의 식이 성립할 조건으로 아래 두 가지 경우가 있다.

  • $\vec{x}=0$
  • $(A-\lambda I) = 0$

만약 두번째 조건을 만족한다면, $\vec{x}=0$이므로 $\lambda$ 는 어떤 수도 올 수 있게 된다. 따라서 $(A-\lambda I)$ 이 역행렬이 존재하지 않는 비가역행렬이어야 한다. 

 

$$
\operatorname{det}(A-\lambda I)=0
$$

 

Eigenvalue $\lambda$ 를 찾으면 $\mathbf{A} \mathbf{v}=\lambda \mathbf{v}$이 식을 만족하는 Eigenvector를 찾을 수 있다.

 

 

1.1 Example

 

Eigenvalue와 Eigenvector를 찾는 예제를 보자.

 

선형 변환할 행렬 A는 다음과 같다.

 

$$
\mathbf{A}=\left[\begin{array}{ll}
2 & 1 \\
2 & 3
\end{array}\right]
$$

 

Eigenvalue를 찾기 위해서 determinant=o인 것을 이용한다.

 

$$
\operatorname{det}(\mathbf{A}-\lambda \mathbf{I})=0
$$

$$
\operatorname{det}\left(\left[\begin{array}{cc}
2-\lambda & 1 \\
2 & 3-\lambda
\end{array}\right]\right)=0
$$

$$
=\left(6-5 \lambda+\lambda^{2}\right)-1
$$

$$
=\lambda^{2}-5 \lambda+4=0
$$

 

따라서 행렬 $A$ 의 Eigenvalues는  $\lambda_{1}=1 과 \lambda_{2}=4$ 이다.

 

Eigenvector를 찾기 위해서는 위의 두 Eigenvalues를 만족해야 하므로 아래 식을 푼다. 

 

$$
\left[\begin{array}{ll}
2 & 1 \\
2 & 3
\end{array}\right]\left[\begin{array}{l}
x \\
y
\end{array}\right]=\left[\begin{array}{l}
x \\
y
\end{array}\right] \text { and }\left[\begin{array}{ll}
2 & 1 \\
2 & 3
\end{array}\right]\left[\begin{array}{l}
x \\
y
\end{array}\right]=\left[\begin{array}{l}
4 x \\
4 y
\end{array}\right]
$$

 

따라서 Eigenvector는 각각 $[1,-1]^{\top}$ 와 $[1,2]^{\top}$ 이다.

 

import torch

torch.eig(torch.tensor([[2, 1], [2, 3]], dtype=torch.float64), eigenvectors=True)

#torch.return_types.eig(eigenvalues=tensor([[1., 0.], [4., 0.]], dtype=torch.float64), eigenvectors=tensor([[-0.7071, -0.4472], [ 0.7071, -0.8944]], dtype=torch.float64))

 

 

2. Decomposing Matrices

정방행렬 A를 Eigenvalue와 Eigenvector를 이용하여 분해하는 것을 보자.

 

$$
\mathbf{A}=\left[\begin{array}{ll}
2 & 1 \\
2 & 3
\end{array}\right]
$$

 

행렬 A의 Eigenvector를 열벡터로 갖는 행렬 W가 있다.

 

$$
\mathbf{W}=\left[\begin{array}{cc}
1 & 1 \\
-1 & 2
\end{array}\right]
$$

 

Eigenvalue를 대각원소로 갖는 대각행렬 \Sigma 가 있다.

 

$$
\boldsymbol{\Sigma}=\left[\begin{array}{ll}
1 & 0 \\
0 & 4
\end{array}\right]
$$


인수분해에 의하여 Eigenvalue와 Eigenvector의 정의는 아래와 같다.

 

$$
\mathbf{A} \mathbf{W}=\mathbf{W} \boldsymbol{\Sigma}
$$

 

※ 행렬 인수분해
행렬의 각 열의 상수를 인수분해 해보자.

$$
A=\left[\begin{array}{cccc}
\mid & \mid & & \mid \\
\lambda_{1} a_{1} & \lambda_{2} a_{2} & \ldots & \lambda_{n} a_{n} \\
\mid & \mid & & \mid
\end{array}\right]
$$

이 행렬은 아래와 같이 (각 열에서 상수를 제외한 행렬 * 상수를 대각원소로 하는 대각행렬) 로 인수분해할 수 있다.

$$
A=\left[\begin{array}{cccc}
\mid & \mid & & \mid \\
a_{1} & a_{2} & \ldots & a_{n} \\
\mid & \mid & & \mid
\end{array}\right]\left[\begin{array}{cccc}
\lambda_{1} & 0 & & 0 \\
0 & \lambda_{2} & & 0 \\
0 & 0 & & \lambda_{n}
\end{array}\right]
$$

 

행렬 W가 역행렬이 존재하는 가역행렬이므로 행렬 A를 아래와 같이 분해할 수 있다.

 

$$
\mathbf{A}=\mathbf{W} \mathbf{\Sigma} \mathbf{W}^{-1}
$$

 

 


 

[reference]

728x90
반응형

댓글