์ฃผ์ฑ๋ถ ๋ถ์(Principal Component Analysis, PCA)์ ๊ณ ์ฐจ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฐจ์์ผ๋ก ๋ณํํ์ฌ ๋ฐ์ดํฐ์ ์ฃผ์ ๋ณ๋์ฑ์ ๋ณด์กดํ๋ ์ฐจ์ ์ถ์ ๊ธฐ๋ฒ์ ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ฐ์ดํฐ์ ๋ถ์ฐ์ ์ต๋ํํ๋ ์ง๊ต ์ถ์ ์ฐพ์ ๋ฐ์ดํฐ๋ฅผ ์๋ก์ด ์ขํ๊ณ๋ก ๋ณํํจ์ผ๋ก์จ ๋ ธ์ด์ฆ๋ฅผ ์ค์ด๊ณ , ์๊ฐํ ๋ฐ ํด์์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค. ์ฃผ์ฑ๋ถ ๋ถ์์ ๋ฐ์ดํฐ ์๊ฐํ, ๋ ธ์ด์ฆ ์ ๊ฑฐ, ๋ฐ์ดํฐ ์์ถ ๋ฑ์ ๋ชฉ์ ์ผ๋ก ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
PCA(์ฃผ์ฑ๋ถ ๋ถ์)์ ํน์ง
PCA์ ์ฃผ์ํ ํน์ง์ ์ด๋ ํ ์ ์ด ์์๊น์?
1. ๋ถ์ฐ ์ต๋ํ
PCA๋ ๋ฐ์ดํฐ์ ๋ถ์ฐ์ ์ต๋ํํ๋ ๋ฐฉํฅ์ผ๋ก ์๋ก์ด ์ถ์ ํ์ํฉ๋๋ค. ๊ฐ์ฅ ๋ง์ ๋ณ๋์ฑ์ ์ค๋ช ํ๋ ์ฃผ์ฑ๋ถ์ ์ฐพ๋๋ค๋ ์๋ฏธ์ ๋๋ค.
2. ์ง๊ต ์ถ
์ฃผ์ฑ๋ถ์ ์๋ก ์ง๊ต(orthogonal)ํ๋ ์ถ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ด๋ก ์ธํด ์ฃผ์ฑ๋ถ ๊ฐ์ ์๊ด๊ด๊ณ๊ฐ ์์ผ๋ฉฐ, ๊ฐ ์ฃผ์ฑ๋ถ์ด ๊ณ ์ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
3. ์์ ์ค์
์ฒซ ๋ฒ์งธ ์ฃผ์ฑ๋ถ์ ๊ฐ์ฅ ํฐ ๋ถ์ฐ์ ๊ฐ์ง๋ฉฐ, ๋ ๋ฒ์งธ ์ฃผ์ฑ๋ถ์ ๋ค์์ผ๋ก ํฐ ๋ถ์ฐ์ ๊ฐ์ง๋๋ค. ๋ฐ์ดํฐ์ ์ฃผ์ ๋ณ๋์ ๋จ๊ณ์ ์ผ๋ก ์ค๋ช ํฉ๋๋ค.
4. ๋ฐ์ดํฐ ๋ณํ
๊ณ ์ ๋ฒกํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์๋ก์ด ์ขํ๊ณ๋ก ๋ณํํฉ๋๋ค. ์ด ๋ณํ๋ ๋ฐ์ดํฐ๋ ์ฐจ์์ด ์ถ์๋์์ง๋ง, ์๋ ๋ฐ์ดํฐ์ ์ค์ํ ์ ๋ณด๋ฅผ ์ต๋ํ ๋ณด์กดํฉ๋๋ค.
PCA์ ๊ธฐ๋ณธ ์๋ฆฌ
PCA์ ๊ธฐ๋ณธ ์๋ฆฌ๋ ์ด๋ ํ ๊ฒ๋ค์ด ์์๊น์?
๋ฐ์ดํฐ ์ค์ฌํ (Centering the Data)
๊ฐ ๋ณ์์ ํ๊ท ์ 0์ผ๋ก ์ค์ ํ์ฌ ๋ฐ์ดํฐ์ ์ค์ฌ์ ๋ง์ถฅ๋๋ค. ์ด๋ฅผ ํตํด ์ค์ฌํ๋ ๋ฐ์ดํฐ ํ๋ ฌ X ๋ฅผ ๋ง๋ญ๋๋ค.
๊ณต๋ถ์ฐ ํ๋ ฌ ๊ณ์ฐ (Calculating the Covariance Matrix)
์ค์ฌํ๋ ๋ฐ์ดํฐ์ ๊ณต๋ถ์ฐ ํ๋ ฌ Σ(Sigma)๋ฅผ ๊ณ์ฐํฉ๋๋ค. ๊ณต๋ถ์ฐ ํ๋ ฌ์ ๋ฐ์ดํฐ ๋ณ์ ๊ฐ์ ๋ถ์ฐ๊ณผ ๊ณต๋ถ์ฐ์ ํฌํจํฉ๋๋ค.
๊ณ ์ ๊ฐ ๋ถํด (Eigenvalue Decomposition)
๊ณต๋ถ์ฐ ํ๋ ฌ Σ(Sigma)์ ๊ณ ์ ๊ฐ๊ณผ ๊ณ ์ ๋ฒกํฐ๋ฅผ ๊ณ์ฐํฉ๋๋ค. ๊ณ ์ ๊ฐ λi ์ ๊ณ ์ ๋ฒกํฐ vi ๋ฅผ ํ์ํ์ฌ, ๋ฐ์ดํฐ์ ๋ณ๋์ฑ์ ์ค๋ช ํ๋ ์ฃผ์ฑ๋ถ์ ์ฐพ์ต๋๋ค.
์ฃผ์ฑ๋ถ ์ ํ (Selecting Principal Components)
๊ณ ์ ๊ฐ์ ํฌ๊ธฐ ์์ผ๋ก ๊ณ ์ ๋ฒกํฐ๋ฅผ ์ ๋ ฌํ์ฌ ์ฃผ์ฑ๋ถ์ ์ ํํฉ๋๋ค. ๊ฐ์ฅ ํฐ ๊ณ ์ ๊ฐ์ ํด๋นํ๋ ๊ณ ์ ๋ฒกํฐ๊ฐ ์ฒซ ๋ฒ์งธ ์ฃผ์ฑ๋ถ์ ๋ํ๋ด๋ฉฐ, ์ดํ ๊ณ ์ ๊ฐ ์์ผ๋ก ์ฃผ์ฑ๋ถ์ ์ ํํฉ๋๋ค.
๋ฐ์ดํฐ ๋ณํ (Transforming the Data)
์ ํ๋ ์ฃผ์ฑ๋ถ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์๋ก์ด ์ขํ๊ณ๋ก ๋ณํํฉ๋๋ค. ๋ณํ๋ ๋ฐ์ดํฐ ํ๋ ฌ Z ๋ ์ค์ํ ์ ๋ณด๋ฅผ ๋ณด์กดํ๋ฉด์๋ ์ฐจ์์ด ์ถ์๋ ๋ฐ์ดํฐ์ ๋๋ค.
- ์ฌ๊ธฐ์ Z๋ ๋ณํ๋ ๋ฐ์ดํฐ ํ๋ ฌ, V๋ ์ ํ๋ ๊ต์ ๋ฒกํฐ ํ๋ ฌ์ ๋๋ค.
PCA(์ฃผ์ฑ๋ถ ๋ถ์)์ ์ฅ, ๋จ์
์ฃผ์ฑ๋ถ ๋ถ์์ ์ฅ์
- ์ฐจ์ ์ถ์: ๋ฐ์ดํฐ์ ์ฐจ์์ ์ถ์ํ์ฌ ๊ณ์ฐ ๋น์ฉ์ ์ค์ด๊ณ , ๋ฐ์ดํฐ ์๊ฐํ๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค. ๊ณ ์ฐจ์ ๋ฐ์ดํฐ๋ฅผ 2์ฐจ์์ด๋ 3์ฐจ์์ผ๋ก ๋ณํํ์ฌ ์๊ฐ์ ์ผ๋ก ๋ถ์ํ ์ ์์ต๋๋ค.
- ๋ ธ์ด์ฆ ์ ๊ฑฐ: ์ฃผ์ ์ฑ๋ถ์ ์ ์ธํ ๋๋จธ์ง ์ฑ๋ถ์ ์ ๊ฑฐํจ์ผ๋ก์จ ๋ฐ์ดํฐ์ ๋ ธ์ด์ฆ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. ์ด๋ ๋ชจ๋ธ์ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฐ ๋์์ ์ค๋๋ค.
- ๋ฐ์ดํฐ ์์ถ: ์ค์ํ ์ ๋ณด๋ง์ ๋ณด์กดํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ์์ถํ ์ ์์ต๋๋ค. ์ด๋ ์ ์ฅ ๊ณต๊ฐ์ ์ ์ฝํ๊ณ , ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๋๋ฅผ ๋์ด๋ ๋ฐ ์ ๋ฆฌํฉ๋๋ค.
์ฃผ์ฑ๋ถ ๋ถ์์ ๋จ์
- ํด์์ ์ด๋ ค์: ๋ณํ๋ ์ฃผ์ฑ๋ถ์ด ์๋ ๋ณ์์ ์ด๋ค ๊ด๊ณ๊ฐ ์๋์ง ํด์ํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ์ฃผ์ฑ๋ถ์ด ์ง๊ด์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ๋ฅผ ์ดํดํ๋ ๋ฐ ์ถ๊ฐ์ ์ธ ๋ถ์์ด ํ์ํ ์ ์์ต๋๋ค.
- ์ ํ์ฑ ๊ฐ์ : PCA๋ ์ ํ ๋ณํ๋ง์ ์ฌ์ฉํ๋ฏ๋ก, ๋น์ ํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ์๋ ์ ํฉํ์ง ์์ต๋๋ค. ๋น์ ํ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ, PCA์ ์ ์ฉ์ด ํ๊ณ๊ฐ ์์ ์ ์์ต๋๋ค.
- ์ ๋ณด ์์ค: ์ฐจ์์ ์ถ์ํ๋ ๊ณผ์ ์์ ์ผ๋ถ ์ ๋ณด๊ฐ ์์ค๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ด๋ก ์ธํด ๋ฐ์ดํฐ์ ์๋ ๊ตฌ์กฐ๋ ๊ด๊ณ๊ฐ ์ผ๋ถ ์๊ณก๋ ์ ์์ต๋๋ค.
PCA(์ฃผ์ฑ๋ถ ๋ถ์)์ ๊ฐ์ ๋ฐฉ๋ฒ
๋น์ ํ ์ฐจ์ ์ถ์ ๊ธฐ๋ฒ
- PCA๋ ์ ํ ๋ณํ์ ํ์ ๋๋ฏ๋ก, ๋น์ ํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ์๋ ๋ค๋ฅธ ์ฐจ์ ์ถ์ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์๋ฅผ ๋ค์ด, t-SNE๋ UMAP๊ณผ ๊ฐ์ ๋น์ ํ ์ฐจ์ ์ถ์ ๊ธฐ๋ฒ์ด ํจ๊ณผ์ ์ผ ์ ์์ต๋๋ค.
๊ณ ์ฐจ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
- ๊ณ ์ฐจ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋๋ ๋จผ์ ์ค์ํ์ง ์์ ๋ณ์๋ฅผ ์ ๊ฑฐํ๊ฑฐ๋ ๋ณ์ ์ ํ(feature selection)์ ์ํํ์ฌ ์ฐจ์์ ๊ฐ์์ํจ ํ, PCA๋ฅผ ์ ์ฉํ๋ ๊ฒ์ด ํจ๊ณผ์ ์ ๋๋ค.
PCA์ ๋ณํ
- ์ปค๋ PCA (Kernel PCA): ๋น์ ํ ๋ณํ์ ํตํด ๋ฐ์ดํฐ์ ๋น์ ํ ๊ตฌ์กฐ๋ฅผ ๋ฐ์ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์๋ PCA๋ฅผ ์ปค๋ ํธ๋ฆญ๊ณผ ๊ฒฐํฉํ์ฌ ๋น์ ํ ๊ด๊ณ๋ฅผ ํ์ํฉ๋๋ค.
- Sparse PCA: ํฌ์์ฑ์ ์ ์ฉํ์ฌ ์ฃผ์ฑ๋ถ ํ์์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด๋ ๋ณ์ ์ ํ๊ณผ PCA๋ฅผ ๊ฒฐํฉํ ํํ๋ก, ํน์ ๋ณ์๋ค๋ง์ ๊ฐ์กฐํ์ฌ ์ฐจ์ ์ถ์๋ฅผ ์ํํฉ๋๋ค.
PCA(์ฃผ์ฑ๋ถ ๋ถ์) Example Code
!kaggle datasets download -d mlg-ulb/creditcardfraud
!unzip creditcardfraud.zip
# ์ฃผ์ฑ๋ถ ๋ถ์ (PCA) ์์
# ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํฌํธ
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
# ๋ฐ์ดํฐ์
๋ก๋
data = pd.read_csv('/content/creditcard.csv')
# ํ์ํ ํน์ฑ ์ ํ
X = data.drop(['Time', 'Class'], axis=1)
y = data['Class']
# ๋ฐ์ดํฐ ํ์คํ
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# PCA ์ ์ฉ
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
# PCA ๊ฒฐ๊ณผ ์๊ฐํ
plt.figure(figsize=(10, 7))
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis', alpha=0.5)
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('PCA of Credit Card Fraud Dataset')
plt.show()
'๐ Machine Learning' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ML] t-SNE (t-Distributed Stochastic Neighbor Embedding) (0) | 2024.08.20 |
---|---|
[ML] Isomap (์์ด์๋งต) (0) | 2024.08.20 |
[ML] DBSCAN (Density-Based Spatial Clustering of Applications with Noise) (0) | 2024.08.18 |
[ML] Hierarchical Clustering (๊ณ์ธต์ ๊ตฐ์ง ๋ถ์) (0) | 2024.08.17 |
[ML] K-Means Clustering (K-ํ๊ท ํด๋ฌ์คํฐ๋ง) (0) | 2024.08.17 |