๋ชฉํ
- Vector Transformation ์ดํด
- Eigenvector / Eigenvalue์ ๋ํ ์ดํด
- ๋ฐ์ดํฐ์ feature ์(์ฐจ์ ์)๊ฐ ๋์ด๋๋ฉด ์๊ธฐ๋ ๋ฌธ์ ์ ๋ฐ ์ด๋ฅผ handlingํ๊ธฐ ์ํ ๋ฐฉ๋ฒ
- PCA์ ๊ธฐ๋ณธ ์๋ฆฌ์ ๋ชฉ์ ์ ๋ํ ์ดํด
Vector transformation
- R^2 ๊ณต๊ฐ์์ ๋ฒกํฐ๋ฅผ ๋ณํ ์ฆ, ์ ํ ๋ณํ์ ์์์ ๋ ๋ฒกํฐ๋ฅผ ๋ํ๊ฑฐ๋ ํน์ ์ค์นผ๋ผ๊ฐ์ ๊ณฑํ๋ ๊ฒ
$$T(u+v)=T(u)+T(v)$$ $$T(cu)=cT(u)$$
๋ฒกํฐ๋ณํ์ผ๋ก์์ '๋งคํธ๋ฆญ์ค์ ๋ฒกํฐ์ ๊ณฑ'
- f๋ผ๋ transformation์ ์ฌ์ฉํ์ฌ ์์์ ๋ฒกํฐ [x1, x2]์ ๋ํด [2x1 + x2, x1 - 3x2]๋ก ๋ณํ์ ํ๋ค.
\begin{align}
f(\begin{bmatrix}x_1 \\ x_2 \end{bmatrix}) = \begin{bmatrix} 2x_1 + x_2 \\ x_1 -3x_2 \ \end{bmatrix}
\end{align}
$$\begin{align} T = \begin{bmatrix} 2 & 1 \\ 1 & -3 \end{bmatrix} \end{align}$$
์์ ๊ฐ์ ๋งคํธ๋ฆญ์ค T๋ฅผ ๊ณฑํ๋ ๊ฒ๊ณผ ๊ฐ์ ์๋ฏธ์ด๋ค.
์ฆ, ์์์ R^2 ๋ฒกํฐ๋ฅผ ๋ค๋ฅธ ๋ฒกํฐ๋ก ๋ณํํ๋ ๊ณผ์ ์ ํน์ T๋ผ๋ ๋งคํธ๋ฆญ์ค๋ฅผ ๊ณฑํ๋ ๊ฒ๊ณผ ๋์ผํ ๊ณผ์
์๋ฅผ ๋ค์ด
\begin{align}
\begin{bmatrix} 2 & 1 \\ 1 & -3 \end{bmatrix}\begin{bmatrix} 3 \\ 4 \end{bmatrix} = \begin{bmatrix} 10 \\ -9 \end{bmatrix}
\end{align}
ํ๋ฒ ๋ ์๊ฐํด๋ณด๋ฉด, ์ ์์์ ๋งคํธ๋ฆญ์ค T๋ [2 1], [1 -3]์ ๋ ๋ฒกํฐ๋ก ์ด๋ฃจ์ด์ง ํ๋ ฌ์ด๊ณ , [3 4]๋ผ๋ ๋ฒกํฐ์ ๊ธฐ์ ๋ฒกํฐ([1 0], [0 1])๋ฅผ ๋ฐ๊พธ๋ ํ์๋ก ๋ณผ ์ ์๋ค.
๋ฒกํฐ transformation์ ์ ํ(๊ณฑํ๊ณ ๋ํ๋ ๊ฒ์ผ๋ก๋ง ์ด๋ฃจ์ด์ง) ๋ณํ์ด๊ธฐ ๋๋ฌธ์ ๋งคํธ๋ฆญ์ค์ ๋ฒกํฐ์ ๊ณฑ์ผ๋ก ํํ์ด ๋๋ค.
๊ณ ์ ๋ฒกํฐ(Eigenvector)
- ์์์ ๋ดค๋ค์ํผ Transformation์ matrix๋ฅผ ๊ณฑํจ์ผ๋ก์จ ๋ฒกํฐ(๋ฐ์ดํฐ)๋ฅผ ๋ค๋ฅธ ์์น๋ก ์ฎ๊ธฐ๋ ๊ฐ๋ ์ด๋ค.
- R^3 ๊ณต๊ฐ์์ ์์๋ฅผ ๋ค์ด๋ณด์๋ฉด
R^3 ๊ณต๊ฐ์ด ํ์ ํ ๋(์์ ํ ๋), ์๋์ ๋ฐ๋ผ ์์น์ ๋ณํ ์ ๋๊ฐ ๋ค๋ฅด๋ค. - ํ์ ์ถ์ ์๋ ๊ฒฝ์ฐ transformation์ ํตํ ์์น๊ฐ ๋ณํ์ง ์๋๋ค.
- ์ด๋ ๊ฒ transformation์ ์ํฅ์ ๋ฐ์ง ์๋ ํ์ ์ถ(ํน์ ๋ฒกํฐ)๋ฅผ ๊ทธ ๊ณต๊ฐ์ ๊ณ ์ ๋ฒกํฐ(Eigenvector๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๊ณ ์ ๊ฐ(Eigenvalue)
์์์ ๊ณ ์ ๋ฒกํฐ๋ transformation ์, ๋ฐฉํฅ์ ๋ณํ์ง ์๊ณ ํฌ๊ธฐ๋ง ๋ฐ๋๋ ๋ฒกํฐ์๋๋ฐ, ์ด ๋ ๋ณํ๋ ํฌ๊ธฐ์ ์ ๋๋ฅผ ๋ํ๋ด๋ ๊ฐ์ด Eigenvalue๋ก ๊ณ ์ ๊ฐ์ด๋ผ ๋ถ๋ฅธ๋ค.(์ผ๋ง๋ ๋ณํ๋๋)
$$T \cdot v = v' = \lambda \cdot v $$
\begin{align} \begin{bmatrix} a & b \\ c & d \end{bmatrix}\begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} ax+by \\ cx+dy \end{bmatrix} = \lambda \begin{bmatrix} x \\ y \end{bmatrix} \end{align}
์๋ฅผ ๋ค๋ฉด,
\begin{align} \begin{bmatrix} 4 & 2 \\ 2 & 4 \end{bmatrix}\begin{bmatrix} 3 \\ -3 \end{bmatrix} = \begin{bmatrix} 6 \\ -6 \end{bmatrix} = 2 \begin{bmatrix} 3 \\ -3 \end{bmatrix} \end{align}
๋งคํธ๋ฆญ์ค๋ฅผ ๊ณฑํ ๊ฒ์ด ์์ 2 ๋ฅผ ๊ณฑํ ๊ฒ๊ณผ ๊ฐ์ ํจ๊ณผ์ด๋ค. ์ฆ [3 -3] ๋ฒกํฐ๋ ์ ํ๋ณํ ์ ๋ฐฉํฅ์ ์ ์งํ๊ณ ํฌ๊ธฐ๋ง ๋ฐ๋๋ ๊ฒ
๊ณ ์ ๊ฐ ๊ณ์ฐ
$$T \cdot v = \lambda \cdot v $$
์์ ์ข๋ณ์ผ๋ก ์ฎ๊ธด ํ det()=0์ด ๋๊ฒ๋ ํ์ฌ ๋๋ค๋ฅผ ๊ณ์ฐํ๋ค.(์ญํ๋ ฌ์ด ์๋ ์กฐ๊ฑด)
๊ณ ์ ๊ฐ์ ๋ฐฐ์ฐ๋ ์ด์
- vector teansformation์ ๊ฒฐ๊ตญ '๋ฐ์ดํฐ๋ฅผ ๋ณํํ๋ค.'๋ผ๋ ๋ชฉ์ ์ ๋จ๊ณ ์ค ํ๋์ด๋ค.
์ฐจ์์ ์ ์ฃผ(๊ณ ์ฐจ์์ ๋ฌธ์ ; The Curse of Dimensionality)
- ํผ์ณ์ ์(์ฐจ์์ ์)๊ฐ ๋ง์์๋ก ๋ฐ์ดํฐ์ ์ ๋ชจ๋ธ๋งํ๊ฑฐ๋ ๋ถ์ํ ๋ ๋ฐ์ํ๋ ์ฌ๋ฌ ๋ฌธ์ ์ ๋ค
- ๋ํ, ์ฐจ์์ด ์ฆ๊ฐํ ์๋ก ์ฌ๋์ด ์ง๊ด์ ์ผ๋ก ์ดํดํ๊ธฐ(์๊ฐํํ๊ธฐ) ์ด๋ ต๋ค.
- ๋ฐ์ดํฐ์
์์ ์ธ์ฌ์ดํธ๋ฅผ ์ฐพ๊ธฐ ์ํด ์ฐ์ด๋ ๋ชจ๋ feature๊ฐ ๋์ผํ๊ฒ ์ค์ํ์ง๋ ์๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ผ๋ถ ์ ํํด๋, ์๋ฏธ ํ์
์๋(์ฐ๋ฆฌ๊ฐ ์ป์ผ๋ ค๋ ์ธ์ฌ์ดํธ์๋) ํฐ ์ฐจ์ด๊ฐ ์๋ค๋ฉด ๋๋ฌด ๋ง์ input์ ์คํ๋ ค ๋ฐฉํด๊ฐ ๋ ์ ์๋ค.
- ๋๋ค๋ฅธ ๋ฌธ์ ๋ก '์ค๋ฒํผํ '(๊ณผ์ ํฉ)์ ๋ฌธ์ ๊ฐ ์๋ค. training data์๋ง ๋๋ฌด ๋ง์ ํ์ต์ด ๋์ด๋ฒ๋ฆฌ๋ฉด ์คํ๋ ค test data์์ ์ ๋๋ก ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค๊ธฐ ์ด๋ ค์์ง๋ค.
Dimension Reduction(์ฐจ์ ์ถ์)
- ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ์์ผ๋ก, ์ ์ ํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ฌ ์ถฉ๋ถํ ์๋ฏธ๋ฅผ ๋ด๊ฒ ํ ์๋ ์์๊น?
Feature Selection(๋ณ์ ์ ํ)
- ๋ณ์(์ฐจ์)๊ฐ 100๊ฐ ์์ ๋, ๋ฐ์ดํฐ์ ์ค ๊ฐ์ฅ ๋ถ์ฐ์ด ํฐ(๋ถํฌ๊ฐ ๋์ ; ๋ค์ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋) ๋ณ์๋ง ์ ํํ๊ณ ๋๋จธ์ง๋ ์ ์ธํ๋ ๋ฐฉ๋ฒ
- ์ฅ์ : ์ ํ๋ ๋ณ์์ ํด์์ด ์ฝ๋ค.(์ง๊ด์ )
- ๋จ์ : ๋ณ์๋ค ์ฌ์ด์ ์ฐ๊ด์ฑ์ ๊ณ ๋ คํด์ ์ ํํด์ผํ๋ค.(์ค๋ณต ์๋๊ฒ๋)
- ex) LASSD, Genetic algorithm ๋ฑ
Feature Extraction(๋ณ์ ์ถ์ถ)
- ๊ธฐ์กด์ ์๋ ๋ณ์(์ฐจ์)๋ฅผ ์กฐํฉํ์ฌ ์๋ก์ด ์ค๋ช ๋ ฅ์ด ์ข์ ๋ณ์๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- ์ฅ์ : ๋ณ์๋ค๊ฐ์ ์ฐ๊ด์ฑ์ด ๊ณ ๋ ค๋๋ค. ๋ณ์์ ์๋ฅผ ๋ง์ด ์ค์ผ ์ ์๋ค.
- ๋จ์ : ๋ง๋ค์ด์ง ๋ณ์๋ฅผ ํด์ํ๊ธฐ ์ด๋ ค์(๊ทธ ๋ณ์๊ฐ ์ ํํ ๋ฌด์์ ์๋ฏธํ๋์ง ํ์ ํ๋ ๊ฒ ์ด๋ ต๋ค.)
- ex) PCA, Auto-encoder ๋ฑ
PCA(Principal Component Analysis; ์ฃผ์ฑ๋ถ ๋ถ์)
- ๊ณ ์ฐจ์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ถ์ํ๊ธฐ ์ํ ๊ธฐ๋ฒ
- ๋ฎ์ ์ฐจ์์ผ๋ก ์ฐจ์ ์ถ์
- ๊ณ ์ฐจ์ ๋ฐ์ดํฐ์ ์ ๋ณด(๋ถ์ฐ)์ ์ต๋ํ ์ ์งํ๋ ๋ฒกํฐ(๋ณ์)๋ฅผ ์ฐพ๊ณ ํด๋น ๋ฒกํฐ์ ๋ํด ๋ฐ์ดํฐ๋ฅผ (Linear) Projection
- ๋ฐ์ดํฐ์ ๋ถ์ฐ == ์ ๋ณด* ๊ธฐ์ตํ๊ธฐ
import pandas as pd
import matplotlib.pyplot as plt
x = \[-2.2, -2, -2, -1, -1, 0, 0, 1, 1, 2, 2, 2.2\]
y = \[0, .5, -.5, .8, -.8, .9, -.9, .8, -.8, .5, -.5, 0\]
df = pd.DataFrame({"x": x, "y": y})
print('variance of X : ' + str(np.var(x)))
print('variance of Y : ' + str(np.var(y)))
plt.scatter(df\['x'\], df\['y'\])
plt.arrow(-3, 0, 6, 0, head\_width = .05, head\_length = .05, color ='#d63031')
plt.arrow(0, -1, 0, 6, head\_width = .05, head\_length = .05, color ='#00b894');
variance of X : 2.473333333333333
variance of Y : 0.4316666666666668
์ด ๋, ์ฐ๋ฆฌ๋ ๋ฐ์ดํฐ์ ๋ถ์ฐ(์ ๋ณด)์ ๊ฐ์ฅ ์ ๋ด๊ณ ์๋ ๋นจ๊ฐ์ ์ถ์ ์ฐ์ ์ ์ผ๋ก projectionํด์ผํ๋ค. ๊ทธ๊ฒ ์ฒซ๋ฒ์งธ ์ฃผ์ฑ๋ถ pc1์ด ๋๋ค.
PCA process
- ๋ฐ์ดํฐ ์ค๋น
import numpy as np
X = np.array([
[0.2, 5.6, 3.56],
[0.45, 5.89, 2.4],
[0.33, 6.37, 1.95],
[0.54, 7.9, 1.32],
[0.77, 7.87, 0.98]
])
print("Data: ", X)
Data: [[0.2 5.6 3.56]
[0.45 5.89 2.4 ]
[0.33 6.37 1.95]
[0.54 7.9 1.32]
[0.77 7.87 0.98]]
np.mean(X, axis=0) # ์ด๋ ๊ฒ ํ๋ฉด ์ด๋ง๋ค(์นผ๋ผ๋ง๋ค, ๋ณ์๋ง๋ค)์ ํ๊ท ๋ฐ ๋ถ์ฐ๊ฐ๋ค์ ๊ตฌํด์ค๋ค.
- ๊ฐ ์ด์ ๋ํด ํ๊ท ์ ๋นผ๊ณ , ํ์คํธ์ฐจ๋ก ๋๋์ด Normalize(์ ๊ทํ)ํ๋ค. ์ค์ผ์ผ์ ๋ง์ถ๋ ์์
standardized_data = ( X - np.mean(X, axis = 0) ) / np.std(X, ddof = 1, axis = 0) print("\n Standardized Data: \n", standardized_data)
Standardized Data:
[[-1.19298785 -1.0299848 1.5011907 ]
[-0.03699187 -0.76471341 0.35403575]
[-0.59186994 -0.32564351 -0.09098125]
[ 0.37916668 1.07389179 -0.71400506]
[ 1.44268298 1.04644992 -1.05024014]]
- ์ ๊ทํ ์งํํ ๊ฐ'์ ๋ถ์ฐ-๊ณต๋ถ์ฐ ๋งคํธ๋ฆญ์ค๋ฅผ ๊ณ์ฐ
covariance_matrix = np.cov(standardized_data.T) print("\n Covariance Matrix: \n", covariance_matrix)
Covariance Matrix:
[[ 1. 0.84166641 -0.88401004]
[ 0.84166641 1. -0.91327498]
[-0.88401004 -0.91327498 1. ]]
- ๋ถ์ฐ-๊ณต๋ถ์ฐ ๋งคํธ๋ฆญ์ค์ ๊ณ ์ ๊ฐ๊ณผ ๊ณ ์ ๋ฒกํฐ๋ฅผ ๊ณ์ฐํ๋ค.(๋ถ์ฐ, ์ฆ ์ ๋ณด์์ ๊ฐ์ฅ ํฌ๊ฒ ๊ฐ์ ธ๊ฐ๋ ์ฑ๋ถ๋ค์ ์ฐพ๊ธฐ ์ํด์)
values, vectors = np.linalg.eig(covariance_matrix) print("\n Eigenvalues: \n", values) print("\n Eigenvectors: \n", vectors)
Eigenvalues:
[2.75962684 0.1618075 0.07856566]
Eigenvectors:
[[ 0.56991376 0.77982119 0.25899269]
[ 0.57650106 -0.60406359 0.55023059]
[-0.58552953 0.16427443 0.7938319 ]]
- ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ ๋ฒกํฐ์ projectionํ๋ค.(matmul)
Z = np.matmul(standardized_data, vectors)
print("\\n Projected Data: \\n", Z)
Projected Data:
[[-2.15267901 -0.06153364 0.31598878]
[-0.66923865 0.4912475 -0.14930446]
[-0.47177644 -0.27978923 -0.40469283]
[ 1.25326312 -0.47030949 0.12228952]
[ 2.04043099 0.32038486 0.11571899]]
- ์ฌ๊ธฐ์ ์๋ฌธ. ์ฐจ์ ์ถ์๋ฅผ ํ๋๋ฐ ์ ๊ทธ๋๋ก ๋ณ์๊ฐ 3๊ฐ??
$$X = $$
$$x_1$$ | $$x_2$$ | $$x_3$$ |
---|---|---|
0.2 | 5.6 | 3.56 |
0.45 | 5.89 | 2.4 |
0.33 | 6.37 | 1.95 |
0.54 | 7.9 | 1.32 |
0.77 | 7.87 | 0.98 |
์์
$$Z = $$
$$pc_1$$ | $$pc_2$$ | $$pc_3$$ |
---|---|---|
-2.1527 | -0.0615 | 0.3160 |
-0.6692 | 0.4912 | -0.1493 |
-0.4718 | -0.2798 | -0.4047 |
1.2533 | -0.4703 | 0.1223 |
2.0404 | 0.3204 | 0.1157 |
๊ฐ ๋ ๊ฒ์ด๋ค. ์ฆ, ๋ฐ์ดํฐ๋ฅผ ์ ์ค๋ช ํ๋ ์ถ 3๊ฐ์ ์ขํ๊ณ๋ก ๋ฐ๊ฟจ๋ค๊ณ ์๊ฐํ๋ฉด ์ข๋ค.
์ด์ ์ด๋ ๊ฒ ํ ํ, ๊ณ ์ ๊ฐ์ ๋น๊ตํ์ฌ pc2๊น์ง ๊ฐ์ ธ๊ฐ์ง ๋ฑ์ ๊ณ ๋ฏผ์ ํ๋ ๊ฒ!
๊ทผ๋ฐ ์ด์ ์ฌ๊ธฐ์ sklearn(์ฌ์ดํท๋ฐ)์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์์ ๊ณผ์ ์ ์์ฃผ ezํ๊ฒ ๊ฐ๋ฅ(๋ถ๋ค๋ถ๋ค)
from sklearn.preprocessing import StandardScaler, Normalizer
from sklearn.decomposition import PCA
print("Data: \n", X)
scaler = StandardScaler()
Z = scaler.fit_transform(X)
print("\n Standardized Data: \n", Z)
pca = PCA(2)
pca.fit(Z)
print("\n Eigenvectors: \n", pca.components_)
print("\n Eigenvalues: \n",pca.explained_variance_)
B = pca.transform(Z)
print("\n Projected Data: \n", B)
Data:
[[0.2 5.6 3.56]
[0.45 5.89 2.4 ]
[0.33 6.37 1.95]
[0.54 7.9 1.32]
[0.77 7.87 0.98]]
Standardized Data:
[[-1.33380097 -1.15155802 1.67838223]
[-0.04135817 -0.85497558 0.395824 ]
[-0.66173071 -0.36408051 -0.10172014]
[ 0.42392124 1.20064752 -0.79828193]
[ 1.61296861 1.16996658 -1.17420417]]
Eigenvectors:
[[-0.13020816 -0.73000041 0.67092863]
[-0.08905388 0.68256517 0.72537866]]
Eigenvalues:
[2.15851707 0.09625196]
Projected Data:
[[ 1.87404384 0.35553233]
[ 0.85151446 -0.31022649]
[ 0.21482136 -0.29832914]
[-1.35210803 0.27030569]
[-1.58827163 -0.0172824 ]]
- ์ค๊ฐ์ standardized data๊ฐ ์ด์ ๊ณผ ๋ค๋ฅธ ์ด์ ?
standardized_data = ( X - np.mean(X, axis = 0) ) / np.std(X, ddof = 1, axis = 0) print("\n Standardized Data: \n", standardized_data)
์์ standard deviation์ ์ฐ์ด๋ ์์ ๋๊ฐ 0์ด๋ 1์ด๋์ ์ฐจ์ด(๋ชจ์ง๋จ์ผ ๋ 0, ํ๋ณธ์ง๋จ์ผ ๋ 1)
PCA์ ํน์ง
- ๋ฐ์ดํฐ์ ๋ํด ๋ ๋ฆฝ์ ์ธ ์ถ์ ์ฐพ๋๋ฐ ์ ์ฉํ๋ค.
- ๋ฐ์ดํฐ์ ๋ถํฌ๊ฐ ์ ๊ท์ฑ์ ๋์ง ์๋ ๊ฒฝ์ฐ ์ ์ฉ์ด ์ด๋ ต๋ค.
- ๋น์ฐํ ๊ฒ, ๋ถ์ฐ์ ๊ฐ์ฅ ํฌ๊ฒ ๊ฐ๋ ์๋ก์ด ์ถ๋ค์ ์ฐพ๋๊ฑด๋ฐ ๊ทธ ๋ถ์ฐ ์กฐ์ฐจ ์ฐพ๊ธฐ ์ด๋ ค์ด ๋ฐ์ดํฐ๋ผ๋ฉด ๋น์ฐํ ์ด๋ ต๋ค.
- ๋ถ๋ฅ/์์ธก ๋ฌธ์ ์ ๋ํด์ ๋ฐ์ดํฐ์ ๋ผ๋ฒจ์ ๊ณ ๋ คํ์ง ์๊ธฐ์ ํจ๊ณผ์ ๋ถ๋ฆฌ๊ฐ ์ด๋ ต๋ค.
- ์ด ๊ฒฝ์ฐ๋ PLS ์ฌ์ฉ ๊ฐ๋ฅ
'๐ฟ Data > ๋ถํธ์บ ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL]15.์ค์ฑ3 (0) | 2021.12.08 |
---|---|
[TIL]14.Clustering(๊ตฐ์งํ) (0) | 2021.12.07 |
[TIL]12.Linear Algebra + (0) | 2021.12.03 |
[TIL]11.Vector and Matrix (0) | 2021.12.01 |
[TIL]10.์คํ๋ฆฐํธ ์ฑ๋ฆฐ์ง (0) | 2021.12.01 |