๐ฉด ์ ๋ฒ ์ ํ๋์ํ ํฌ์คํ ์์๋ ๊ณ ์ ๋ฒกํฐ ๋ถํด eigendecomposition์ ๋ํด ๋ฐฐ์ ๋ค.
eigendecomposition
๐คพ๐ฝโ๏ธ ์ ๋ฒ ์๊ฐ์ eigenvalue์ eigenvector์ ๋ํด ํ์ตํ๋ค. eigenvalue & eigenvector * intro ๐ ์์์ ๋ฐฐ์ด transform ์ฐ์ฐ์์ transformation์ ์ํฅ์ ๋ฐ์ง ์๋ ๋ถ๋ถ, ์ฆ transform์ ํด๋ ๋ฐฉํฅ์ด ๋ณํ์ง
sh-avid-learner.tistory.com
๐ฉด ์ด๋ฒ์๋ ์ ์ฌํ ๋ถํด 'ํน์๊ฐ ๋ถํด(Singular Values Decomposition)'์ ๋ํด์ ์์๋ณด๋ ค ํ๋ค.
SVD ์ ์
"๋ชจ๋ mxn matrix๋ $A = U \Sigma V^T$ ํํ๋ก ๋ถํด๋๋ค."
โป eigendecomposition์ nxn matrix์์๋ง ๊ฐ๋ฅํ์ง๋ง, singular value decomposition์ ๋ชจ๋ mxn matrix์ ๋ํด ๋ถํด ๊ฐ๋ฅ
โ $U$๋ mxm orthogonal matrix
โก $\Sigma$๋ mxn diagonal matrix (non-negative $\lambda$์ decreasing order๋ก ๊ตฌ์ฑ)
โข $V^T$๋ nxn orthogonal matrix
→ $U$ - $\Sigma$ - $V^T$, ์ฆ rotate - stretch - rotate ์
→ $U$๋ $AA^T$ ํ๋ ฌ์ ๊ณ ์ ๋ฒกํฐ๋ฅผ ์ด๋ก ๊ฐ๋ ํ๋ ฌ (left singular vectors)
→ $V$๋ $A^TA$ ํ๋ ฌ์ ๊ณ ์ ๋ฒกํฐ๋ฅผ ์ด๋ก ๊ฐ๋ ํ๋ ฌ (right singular vectors)
→ $\Sigma$๋ ๋๊ฐํ๋ ฌ๋ก, ๋๊ฐ์์($\sigma$)๋ $A^TA$(๋๋$AA^T$)์ eigenvalues($\lambda_i$)์ root๋ฅผ ์์ด ๊ฐ ($\sqrt{\lambda_i}$) (A์ singular values)
์์ธํ ํ๋ฉด..
$$A = \begin{bmatrix}
u_1 & u_2 \\
\end{bmatrix}\begin{bmatrix}
\sigma_1 & 0 \\
0 & \sigma_2 \\
\end{bmatrix}\begin{bmatrix}
v_1^T \\ v_2^T
\end{bmatrix}$$
์ ์๊ฐ ๋์จ ์ด์ ๋ฅผ ์ง์ ๊ณ์ฐํด ๋ณด๋ฉด..
$$A = U \Sigma V^T$$
โ $A^TA$์ ๊ดํด ๊ณ์ฐํ๋ฉด..
$$A^TA = (V\Sigma^TU^T)U\Sigma V^T = V\Sigma^T \Sigma V^T$$
(U๋ orthogonal matrix์ด๋ฏ๋ก $U^TU$๋ identity matrix๊ฐ ๋๋ค)
→ ์์ ์์ธํ ๋ณด๋ฉด, $A^TA$์ eigendecomposition ์์์ ์บ์นํ ์ ์๋ค.
→ $A^TA$๋ symmetricํ square matrix
→ V๋ orthogonal matrix(eigenvector์ ๋ชจ์)
→ $\Sigma^T \Sigma$๋ $A^TA$์ $\lambda$์ด์ $A$์ $\sigma^2$
โก ์ด์ $AA^T$์ ๊ดํด ๊ณ์ฐํ๋ฉด..
$$AA^T = U\Sigma V^T V \Sigma^T U^T = U\Sigma \Sigma^T U^T$$
→ ์ญ์ $AA^T$์ eigendecomposition ์
→ ๋ฐ๋ผ์, $AA^T$์ $A^TA$์ eigenvalue๊ฐ ์๋ก ๋์ผ
SVD examples & real-world application
* examples
$$A = \begin{bmatrix}
2 & 2\\
1 & 1\\
\end{bmatrix} = \frac{1}{\sqrt{5}}\begin{bmatrix}
2 & 1\\
-1 & 2\\
\end{bmatrix}\begin{bmatrix}
\sqrt{10} & 0 \\
0 & 0\\
\end{bmatrix}\frac{1}{\sqrt{2}}\begin{bmatrix}
1 & 1 \\
1 & -1 \\
\end{bmatrix}$$
→ A๋ det(A)=0์ธ singular matrix๋ก, singular values๋ $\sqrt{10}$๊ณผ 0์ด ์๋ค
* applications
→ ์ค์ ์์๋ A์ SVD ๋ถํด ๊ฒฐ๊ณผ ๊ฐ์ฅ ๋ง์ ์ ๋ณด๋ฅผ ๊ฐ๊ณ ์๋ $u_1 \sigma_1 v_1^T$๋ฅผ ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฉฐ($\Sigma$์ $\lambda$๊ฐ ๊ฐ์ํ๋ ๋ฐฉํฅ์ผ๋ก ๊ตฌ์ฑ), ๋ค์ํ ๊ธฐ๋ฒ์ ๋ง์ด ์ฌ์ฉ๋๋ค. ์์ผ๋ก ์์ธํ ์ดํด๋ณด์.
→ ๊ฐ๊ฐ์ ์ฌ๋ฌ vector์ $\lambda$๋ก ์์ธํ ๋ํ๋ด๋ฉด
$$X = \begin{bmatrix}
x_1 & x_2 & x_3 & ... & x_n \\
\end{bmatrix}=U \Sigma V^T$$
$$= \begin{bmatrix}
u_1 & u_2 & u_3 & ... & u_n \\
\end{bmatrix}\begin{bmatrix}
\sigma_1 & & & \\
& \sigma_2 & & \\
& & \sigma_3 & \\
& & & \sigma_m \\
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 \\
\end{bmatrix}\begin{bmatrix}
v_1 & v_2 & v_3 & ... & v_m \\
\end{bmatrix}^T$$
$$= \begin{bmatrix}
u_1 & u_2 & u_3 & ... & u_n \\
\end{bmatrix}\begin{bmatrix}
\sigma_1 & & & \\
& \sigma_2 & & \\
& & \sigma_3 & \\
& & & \sigma_m \\
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 \\
\end{bmatrix}\begin{bmatrix}
v_1^T \\
v_2^t \\
... \\
v_m^T \\
\end{bmatrix}$$
โ $U$์์์ ์ฌ๋ฌ $u_1, u_2, ... u_n$์ ๊ฐ๊ฐ $x_1, x_2, ... x_n$ ๊ฐ์ฒด์ eigen ๊ณ ์ ํน์ฑ์ hierarchically organizedํ ๋ชจ์
โก $\Sigma$์์์ ์ฌ๋ฌ $\lambda$๊ฐ์ ๊ฐ ๊ฐ์ฒด์ ์ ์ฒด X๋ฅผ ๊ธฐ์ฌํ๋๋ฐ์ ๊ฐ๊ฐ์ ๊ธฐ์ฌ๋๋ฅผ decreasing order - ์ฆ ์ค์๋ ์์๋ก ๋์ด
โข $V$์์์ ์ฌ๋ฌ $v_1, v_2, ... v_n$์ ์๋ฅผ ๋ค์ด $v_1$์ ๊ฒฝ์ฐ $x_1$์ ๋ง๋ค๊ธฐ ์ํ ๋ชจ๋ $u_1, u_2, ... u_n$ eigen mixture
→ ์ฆ ๊ฐ๊ฐ ์ค์๋ ์์๋๋ก ํญ์ผ๋ก ๋๋์ด ๋ถํดํ๋ฉด
$$= \sigma_1u_1v_1^T + \sigma_2u_2v_2^T + ... + \sigma_mu_mv_m^T + 0$$
→ ์ฌ๊ธฐ์ $x_1 .. x_m$ ์ด m๊ฐ๋ง ์กด์ฌํ๋ฏ๋ก n>m์ด๋ผ๋ฉด ๋๋จธ์ง ์์๋ ๋ชจ๋ 0
→ ๋ฐ๋ผ์ ์ ์ฒด n๊ฐ๋ฅผ ๊ณ ๋ฅผ ํ์ ์๊ณ , ์ค์ ์ ๋ณด m๊ฐ๋ง ์ ํ.
→ ์ด๋ณด๋ค๋ ๋ ์ ์ ์์ ๊ฐ์๋ง ๊ณจ๋ผ ์ค์ ์ ๋ณด๋ง ๊ณ ๋ฅผ ์ ์๋ค. (์ถํ PCA ํฌ์คํ ์ฐธ์กฐ)
python
๐ฉดnp.linalg.svd() ์ฌ์ฉ
→ 3x2 X์ SVD → 3x3์ U์ 2๊ฐ์ singular values, ๊ทธ๋ฆฌ๊ณ 2x2์ $V^T$
→ ๊ฒฐ๊ณผ์ ์ผ๋ก $\sigma_1u_1v_1^T + \sigma_2u_2v_2^T$๋ก ๋ถํด
import numpy as np
np.set_printoptions(suppress=True)
X = np.array([[7, 2],
[3, 4],
[5, 3]])
U,sing_values,VT=np.linalg.svd(X)
U
'''
array([[-0.69366543, 0.59343205, -0.40824829],
[-0.4427092 , -0.79833696, -0.40824829],
[-0.56818732, -0.10245245, 0.81649658]])
'''
sing_values #array([10.25142677, 2.62835484])
VT
'''
array([[-0.88033817, -0.47434662],
[ 0.47434662, -0.88033817]])
'''
๐ฉด์ค์ ๋ก $XX^T$์ eigendecomposition์์ $XX^T$์ eigenvector matrix๊ฐ U์์ ํ์ธํ์๋ค. ๊ทธ๋ฆฌ๊ณ fill_diagonal()์ ์ฌ์ฉํด ์ํ๋ ฌ์ singular values๋ฅผ ๋ฃ์ผ๋ฉด ์๋ ์๋๋ก $U\Sigma V^T$์ ๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ด์ ํ์ธํ ์ ์๋ค.
np.linalg.eig(np.dot(X,X.T))[1]
'''
array([[-0.69366543, -0.59343205, -0.40824829],
[-0.4427092 , 0.79833696, -0.40824829],
[-0.56818732, 0.10245245, 0.81649658]])
'''
U
'''
array([[-0.69366543, 0.59343205, -0.40824829],
[-0.4427092 , -0.79833696, -0.40824829],
[-0.56818732, -0.10245245, 0.81649658]])
'''
D = np.zeros((3, 2))
np.fill_diagonal(D, sing_values)
D
'''
array([[10.25142677, 0. ],
[ 0. , 2.62835484],
[ 0. , 0. ]])
'''
np.dot(np.dot(U,D),VT)
'''
array([[7., 2.],
[3., 4.],
[5., 3.]])
'''
๐ฉด์ถ์ํ - ์์์ ๊ฒฝ์ฐ 3x3์ U์์ 3x2์ X๋ฅผ ํํํ๊ธฐ ์ํด ๋จ์ํ 3x2์ U์ ์ ๋ณด๋ง์ผ๋ก ์ถฉ๋ถํ ํํํ ์ ์์์ ์ ์ ์๋ค.
($\Sigma$์ ๋งจ ๋ง์ง๋ง ํ์ด ๋ชจ๋ 0์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฏ๋ก). numpy svd()์ ์ธ์ full_matrices๋ฅผ False๋ก ์ค์ ํ๋ฉด U์ ์ฐจ์์ด ์ถ์๋๊ณ , ์ถ์๋ U๋ฅผ ๊ธฐ์กด์ singular_values, $V^T$์ ๊ณฑํด๋ ๊ฒฐ๊ณผ๋ ๋์ผํ๊ฒ ๋์ด์ ํ์ธํ ์ ์๋ค.
U1,sing_values1,VT1=np.linalg.svd(X, full_matrices=False)
U1 #U 3x3
'''
array([[-0.69366543, 0.59343205],
[-0.4427092 , -0.79833696],
[-0.56818732, -0.10245245]])
'''
sing_values1 #array([10.25142677, 2.62835484])
VT1
'''
array([[-0.88033817, -0.47434662],
[ 0.47434662, -0.88033817]])
'''
D1 = np.zeros((2, 2))
np.fill_diagonal(D1, sing_values1)
np.dot(np.dot(U1,D1),VT1)
'''
array([[7., 2.],
[3., 4.],
[5., 3.]])
'''
* ์ถ์ฒ1) SVD by Gilbert Strang (MIT) https://youtu.be/mBcLRGuAFUk
* ์ถ์ฒ2) SVD (mathematical overview) by Steve Brunton https://youtu.be/nbBvuuNVfco
'Math & Linear Algebra > Concepts' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Scalar & Vector (1) | 2024.06.03 |
---|---|
Probability fundamentals (0) | 2023.02.27 |
eigendecomposition (0) | 2023.02.19 |
vector similarity (0) | 2023.02.09 |
Linear Equation & Linear System / Rank & det(A) (0) | 2023.02.01 |
๋๊ธ