Codelog
[AIB] High dimensional Data ๋ณธ๋ฌธ
๐ก Vector transformation
๋ฒกํฐ ๋ณํ์ ์์์ ๋ ๋ฒกํฐ๋ฅผ ๋ํ๊ฑฐ๋ ํน์ ์ค์นผ๋ผ ๊ฐ์ ๊ณฑํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ฒกํฐ ๋ณํ์ผ๋ก์จ์ ๋งคํธ๋ฆญ์ค-๋ฒกํฐ ๊ณฑ
- f ๋ผ๋ transformation์ ์ฌ์ฉํ์ฌ
- ์์์ ๋ฒกํฐ [x1, x2]์ ๋ํด์
- [2x1+x2, x1-3x2] ๋ก ๋ณํ
์ฌ๊ธฐ์ ์๋ ๋ฒกํฐ [x1, x2]๋ ์ ๋๋ฒกํฐ๋ฅผ ์ด์ฉํ์ฌ ์๋์ฒ๋ผ ๋ถ๋ฆฌํ ์ ์๋๋ฐ,
๋ถ๋ฆฌ๋ ๊ฐ ์ ๋๋ฒกํฐ๋ transformation์ ํตํด์ ๊ฐ๊ฐ
- 2x1, x1๊ณผ
- x2, -3x2 ๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๋์์ผ ํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
์ด๋ฅผ ๋งคํธ๋ฆญ์ค ํํ๋ก ํฉ์น๊ฒ ๋๋ฉด, ์๋์ ๊ฐ์ T ๋งคํธ๋ฆญ์ค๋ฅผ ์ป์ ์ ์๋ค.
์ด ๋งคํธ๋ฆญ์ค๋ฅผ ์ฒ์ ๋ฒกํฐ์ ๊ณฑํ์ ๊ฒฝ์ฐ transformation์ด ์ํ๋ ๋๋ก ์ด๋ฃจ์ด์ง๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
์ฆ, ์์์ R2 ๋ฒกํฐ๋ฅผ ๋ค๋ฅธ R2 ๋ด๋ถ์ ๋ฒกํฐ๋ก ๋ณํํ๋ ๊ณผ์ ์, ํน์ T๋ผ๋ ๋งคํธ๋ฆญ์ค๋ฅผ ๊ณฑํ๋ ๊ฒ๊ณผ ๋์ผํ ๊ณผ์ ์ด๋ค.
๋ฐ๋ผ์ Vector transformation์ ์ ํ, ์ฆ ๊ณฑํ๊ณ ๋ํ๋ ๊ฒ์ผ๋ก๋ง ์ด๋ฃจ์ด์ก๊ธฐ ๋๋ฌธ์ ๋งคํธ๋ฆญ์ค์ ๋ฒกํฐ์ ๊ณฑ์ผ๋ก ํํํ ์ ์๋ค.
๐ก ๊ณ ์ ๋ฒกํฐ (Eigenvector)
Transformation์ matrix๋ฅผ ๊ณฑํ๋ ๊ฒ์ ํตํด, ๋ฒกํฐ๋ฅผ ๋ค๋ฅธ ์์น๋ก ์ฎ๊ธด๋ค ๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ด๋ฒ์๋ R3 ๊ณต๊ฐ์์์ transformation์ ์์๋ก ๋ค์ด๋ณผ ๊ฒ์ด๋ค.
์ง๊ตฌ๋ณธ์ R3 ๊ณต๊ฐ์ผ๋ก ๋ณด๋ฉด, R3 ๊ณต๊ฐ์ด ํ์ ํ ๋, ์์น์ ๋ฐ๋ผ์ ๋ณํํ๋ ์ ๋๊ฐ ๋ค๋ฅด๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
๊ฐ๋ น ์ ๋ ๋ถ๊ทผ์ ์๋ ์ ์ ๋ณํ๋๋ ๊ฑฐ๋ฆฌ์ ๊ทน์ง๋ฐฉ์ ์๋ ์ ์ ์์น๊ฐ ๋ณํ๋๋ ๊ฑฐ๋ฆฌ๋ ๋ค๋ฅผ ๊ฒ์ด๋ค.
์ด๋ ํ์ ์ถ์ผ๋ก ๊ฐ๊น์ด ๊ฐ์๋ก / ๋ฉ์ด์ง์๋ก ๋์ฑ ๋ช ํํด์ง๋ฉฐ, ์ ํํ๊ฒ ํ์ ์ถ์ ์์นํด์๋ ๊ฒฝ์ฐ, transformation์ ํตํด ์์น๊ฐ ๋ณํ์ง ์๋๋ค.
์ด๋ ๊ฒ transformation์ ์ํฅ์ ๋ฐ์ง ์๋ ํ์ ์ถ, ํน์ ๋ฒกํฐ๋ฅผ ๊ณต๊ฐ์ ๊ณ ์ ๋ฒกํฐ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
Eigenvector๋ ๋ฐ์ดํฐ์ ๋ํด ๊ณต๋ถ์ฐ ํ๋ ฌ์ ์ ์ฉํ์ฌ ์ ํ ๋ณํ์ ์ํํ์ง๋ง, ๋ฐฉํฅ์ ๋ณํํ์ง ์๊ณ ํฌ๊ธฐ๋ง ๋ณํํ๋ ๋ฒกํฐ๋ฅผ ๋งํ๋ค. PCA ๊ณผ์ ์์๋, ์ด๋ ๊ฒ ์ฐพ์์ง๋ Eigenvector์ Eigenvalue๊ฐ ํฐ ์์๋๋ก PC1, PC2๋ฅผ ์ฑํํ๊ฒ ๋๋ค.
์ฆ Eigenvalue์ ๊ฐ์ ํตํด์ ์ด๋ค ๊ฒ์ PC์ถ์ผ๋ก ์ ํํ ์ง ์ ํ๊ฒ ๋๋ค.
๐ก ๊ณ ์ ๊ฐ (Eigenvalue)
์์ ๋ดค๋ ๊ณ ์ ๋ฒกํฐ๋ ์ฃผ์ด์ง transformation์ ๋ํด์ ํฌ๊ธฐ๋ง ๋ณํ๊ณ ๋ฐฉํฅ์ ๋ณํํ์ง ์๋ ๋ฒกํฐ์ด๋ค.
์ฌ๊ธฐ์ ๋ณํํ๋ ํฌ๊ธฐ๋ ๊ฒฐ๊ตญ ์ค์นผ๋ผ ๊ฐ์ผ๋ก ๋ณํํ ์ ๋ฐ์ ์๋๋ฐ, ์ด ํน์ ์ค์นผ๋ผ ๊ฐ์ ๊ณ ์ ๊ฐ์ด๋ผ๊ณ ํ๋ค.
๊ณ ์ ๊ฐ, ๊ณ ์ ๋ฒกํฐ ๊ณ์ฐํ๊ธฐ
๊ณ ์ ๊ฐ, ๊ณ ์ ๋ฒกํฐ ๊ณ์ฐ ๋ด์ฉ์ Matrix Diagonalization๊ณผ Gaussian Elimination ๋ฑ, ์ ํ๋์์ ๋ณต์กํ ๋ด์ฉ๋ค์ ํฌํจํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋์ ์ด๋ฅผ ์์ฉํ๋ Principle Component Analysis(PCA) ์ ๊ด๋ จ๋ ๋ด์ฉ์ ์์๋ณด๋ ค๊ณ ํ๋ค.
๐ก Dimension Reduction
๋ฐ์ดํฐ์ ์๊ฐํ๋ ํ์์ด ์ด๋ ค์์ง๋ ๊ฒ ๋ฟ๋ง ๋ชจ๋ธ๋ง์์์ overfitting ์ด์๋ฅผ ํฌํจํ๋ ๋ฑ ๋น ๋ฐ์ดํฐ ๋ฐ์ดํฐ์ ์ feature๊ฐ ๋ง์ผ๋ฉด ๋ง์์๋ก ์ด๋ก ์ธํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ ์ ์ ๋ง์์ง ๊ฒ์ด๋ค.
๋จธ์ ๋ฌ๋์์๋ ์ด๋ฅผ ์ํ ๋ค์ํ ์ฐจ์์ถ์ ๊ธฐ์ ๋ค์ด ์ด๋ฏธ ์ฐ๊ตฌ๋์ด ์๋ค.
1. Feature Selection
Feature Selection์ด๋ ๋ฐ์ดํฐ์ ์์ ๋ ์ค์ํ feature๋ฅผ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ์ ์๋ฏธํ๋ค.
- ์ ํ๋ feature ํด์์ด ์ฝ๋ค.
- feature๋ค๊ฐ์ ์ฐ๊ด์ฑ์ ๊ณ ๋ คํด์ผ ํ๋ค.
- Ex) LASSO, Genetic algorithm ๋ฑ
2. Feature Extraction
๊ธฐ์กด์ ์๋ feature ํน์ ๊ทธ๋ค์ ๋ฐํ์ผ๋ก ์กฐํฉ๋(feature engineering) feature๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๋ฏธํ๋ค.
- feature๋ค๊ฐ์ ์ฐ๊ด์ฑ์ด ๊ณ ๋ ค๋๋ค.
- feature์ ์๋ฅผ ๋ง์ด ์ค์ผ ์ ์๋ค.
- feature ํด์์ด ์ด๋ ต๋ค.
- Ex) PCA, Auto-encoder ๋ฑ
๐ก PCA (Principal Component Analysis)
- ๊ณ ์ฐจ์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ถ์ํ๊ธฐ ์ํ ๊ธฐ๋ฒ
- ๋ฎ์ ์ฐจ์์ผ๋ก ์ฐจ์์ถ์
- ๊ณ ์ฐจ์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์๊ฐํ + clustering
- ์๋ ๊ณ ์ฐจ์ ๋ฐ์ดํฐ์ ์ ๋ณด(๋ถ์ฐ)๋ฅผ ์ต๋ํ ์ ์งํ๋ ๋ฒกํฐ๋ฅผ ์ฐพ๊ณ , ํด๋น ๋ฒกํฐ์ ๋ํด ๋ฐ์ดํฐ๋ฅผ (Linear) Projection
PCA์ ๋ชฉ์ ์ ์ฐจ์ ์ถ์, ์ฆ feature ๊ฐ์ ๊ฐ์์ด๋ค.
์ฐจ์์ด ๋ง์ผ๋ฉด (feature๊ฐ ๋ง์ผ๋ฉด) ๋ถ์์ ์ํฅ๋ ฅ์ด ์๋ feature๋ฅผ ๋ชจ๋ ๋ฐ์ํ๊ณ , feature๋ค๋ผ๋ฆฌ ๋ํ๋ด๋ ๊ฐ์ด ์ค๋ณต๋๊ธฐ ๋๋ฌธ์ overfitting์ด ๋ฐ์ํ๊ธฐ ์ฝ๋ค. PCA๋ ์ด๋ฌํ overfitting ๋ฐฉ์ง์๋ ๋์์ ์ค๋ค.
cf.
๋ฐ์ดํฐ๊ฐ ์ ์๋ฏธํ ์ ๋ณด๋ฅผ ๋ง์ด ๋ด๊ณ ์๋ค๋ ๊ฒ์ ๋ฐ์ดํฐ์ ๋ถ์ฐ์ด ํฌ๋ค๊ณ ๋ณผ ์ ์๋ค.
๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ๋ถ์์ ํ๋ ค๋ฉด ์๋ก ๋ค๋ฅธ ๊ฐ์ ๊ฐ๋ ๋ถ๋ถ(๋ฐ์ดํฐ)๊ฐ ํ์ํ๋ค.
์๋ฅผ ๋ค๋ฉด, ์ฌ์์ ํธ๋์ด ๋ถ๋ฅ ๋ชจ๋ธ์์ ๊ฐ๊ธฐ์ ์ ๋ฌด์ ๊ฐ์ ์ฐจ์ด๋ฅผ ๊ฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋งํ ์ ์๋ค.
๋ฐ๋ผ์ ๋ฐ์ดํฐ ๊ฐ์ด ๋ค๋ฅด๋ค๋ ๊ฒ์ด ๊ฒฐ๊ตญ ๋ฐ์ดํฐ์ ๋ถ์ฐ์ด ํฌ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
๐ฅ PCA Process
๋ค์ฐจ์์ ๋ฐ์ดํฐ๋ฅผ ์๊ฐํํ๊ธฐ ์ํด์ ์ ๋ณด ์์ค์ด ์ ์ผ ์ ์ 2์ฐจ์์ผ๋ก ์ถ์ํด์ผ ํ๋ค.
1) ๋ฐ์ดํฐ ์ค๋น
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]
])
2) ๊ฐ ์ด์ ๋ํด์ ํ๊ท ์ ๋นผ๊ณ , ํ์คํธ์ฐจ๋ก ๋๋์ด Normalize ์งํํจ
standardized_data = (X - np.mean(X, axis=0)) / np.std(X, ddof=1, axis=0)
print("\n Standardized Data: \n", standardized_data)
output :
3) Z์ ๋ถ์ฐ-๊ณต๋ถ์ฐ ๋งคํธ๋ฆญ์ค๋ฅผ ๊ณ์ฐํจ
covariance_matrix = np.cov(standardized_data.T)
print("\n Covariance Matrix: \n", covariance_matrix)
output :
4) ๋ถ์ฐ-๊ณต๋ถ์ฐ ๋งคํธ๋ฆญ์ค์ ๊ณ ์ ๋ฒกํฐ์ ๊ณ ์ ๊ฐ์ ๊ณ์ฐํจ
values, vectors = np.linalg.eig(covariance_matrix)
print("\n Eigenvalues: \n", values)
print("\n Eigenvectors: \n", vectors)
output :
5) ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ ๋ฒกํฐ์ Projection ์ํด (matmul ์ฌ์ฉ)
Z = np.matmul(standardized_data, vectors)
print("\n Projected Data: \n", Z)
output :
๊ฒฐ๊ณผ
PCA๋ ๊ณ ์ฐจ์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ์ ์ ์งํ๋ ์ถ(PC)์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณํํ ๊ฒ์ด๋ฉฐ,
ํด๋น PC๋ค ์ค ์ผ๋ถ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ์ฐจ์ ์ถ์๋ฅผ ํ ์ ์๋ค.
๋ฐ๋ผ์ Z ๋งคํธ๋ฆญ์ค ์ค pc1, pc2 ๋ง์ ์ฌ์ฉํ ๊ฒฝ์ฐ 2์ฐจ์์ผ๋ก ์ถ์ํ๋ค ๋ผ๋ ์๋ฏธ๊ฐ ์๊ฒ ๋๋ค.
โจ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ PCA
from sklearn.preprocession 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)
output :
์ค๊ฐ์ Standardized Data๊ฐ ์ด์ ๊ณผ ๋ค๋ฅธ ์ด์
standardized_data = (X - np.mean(X, axis=0)) / np.std(X, ddof=1, axis=0) ์์
standard deviation์ ์ฐ์ด๋ ์์ ๋๊ฐ 1์ด๋ ํน์ 0์ด๋์ ์ฐจ์ด
๐ก PCA์ ํน์ง
- ๋ฐ์ดํฐ์ ๋ํด ๋ ๋ฆฝ์ ์ธ ์ถ์ ์ฐพ๋๋ฐ ์ฌ์ฉํ ์ ์์
- ๋ฐ์ดํฐ์ ๋ถํฌ๊ฐ ์ ๊ท์ฑ์ ๋์ง ์๋ ๊ฒฝ์ฐ ์ ์ฉ์ด ์ด๋ ค์ -> ์ปค๋ PCA ์ฌ์ฉ ๊ฐ๋ฅ
- ๋ถ๋ฅ / ์์ธก ๋ฌธ์ ์ ๋ํด์ ๋ฐ์ดํฐ์ ๋ผ๋ฒจ์ ๊ณ ๋ คํ์ง ์๊ธฐ ๋๋ฌธ์ ํจ๊ณผ์ ๋ถ๋ฆฌ๊ฐ ์ด๋ ค์ -> PLS ์ฌ์ฉ ๊ฐ๋ฅ
'Boot Camp > section1' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[AIB] Clustering (+ PCA ๊ฐ๋ ) (0) | 2022.02.09 |
---|---|
[AIB] Intermediate Linear Algebra (0) | 2021.12.28 |
[AIB] Vector/Matrices (0) | 2021.12.20 |
[AIB] Bayesian (0) | 2021.11.02 |
[AIB] Confidence Intervals (0) | 2021.11.02 |