์ฐจ์ ์ถ์(Dimensionality Reduction) ๋
๊ณ ์ฐจ์ ๋ฐ์ดํฐ์ ํน์ง์ ์์ค์ ์ต์ํํ๋ฉฐ ์ ์ฐจ์์ผ๋ก ์์ถํ๋ ๊ธฐ๋ฒ์ด๋ค.
| ๋ชฉ์ | ์ค๋ช |
|---|---|
| ์๊ฐํ | 2Dยท3D ๊ณต๊ฐ์์ ๋ฐ์ดํฐ ๊ตฌ์กฐ ํ์ธ |
| ์๋ ํฅ์ | ํ์ตยท์์ธก ์๊ฐ ๋จ์ถ |
| ๋ ธ์ด์ฆ ์ ๊ฑฐ | ๋ถํ์ํ ๋ณ์ ์ ๊ฑฐ |
| ๊ณผ์ ํฉ ๋ฐฉ์ง | ๋จ์ํ๋ ๋ชจ๋ธ ๊ตฌ์กฐ๋ก ์ผ๋ฐํ ์ฑ๋ฅ ํฅ์ |
๐ก ์ค์ ๋ฐ์ดํฐ์
(์: 100๊ฐ ๋ณ์)์ ์ค๋ณต ์ ๋ณด๊ฐ ๋ง๋ค.
PCA, LDA, Kernel PCA๋ ์ด๋ฅผ ํจ์จ์ ์ผ๋ก ์์ฝํ๋ค.
๋ฐ์ดํฐ์ ๋ถ์ฐ์ด ๊ฐ์ฅ ํฐ ๋ฐฉํฅ์ ์ฐพ์
์๋ก์ด ์ถ(์ฃผ์ฑ๋ถ, Principal Component)์ผ๋ก ํ์ ์์ผ ํํํ๋ ์ ํ ์ฐจ์ ์ถ์ ๊ธฐ๋ฒ.
์ฆ, ์๋์ ๋ณ์๋ค์ ์ ํ ๊ฒฐํฉํด ์ ๋ณด ์์ค ์ต์ํ.
2์ฐจ์ ๋ฐ์ดํฐ๋ฅผ ์๊ฐํด๋ณด๋ฉด,
๋ถ์ฐ์ด ๊ฐ์ฅ ํฐ ๋ฐฉํฅ(์ฆ, ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ํผ์ง ์ถ)์ ์ ์ขํ์ถ์ผ๋ก ํ์ ์ํจ๋ค.
โ ์๊ฐํ ์ ๋ฐ์ดํฐ์ ๋ณธ์ง์ ๊ตฌ์กฐ๋ฅผ ๋ ๋ช
ํํ ๋ณผ ์ ์๋ค.
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_scaled = sc.fit_transform(X)
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
print(pca.explained_variance_ratio_)
๐ก explained_variance_ratio_ ๋ ๊ฐ ์ฃผ์ฑ๋ถ์ด ์ค๋ช
ํ๋ ๋ถ์ฐ ๋น์จ.
์: [0.72, 0.18] โ ์ฒซ ๋ฒ์งธ ์ฃผ์ฑ๋ถ์ด 72% ์ค๋ช
.
import matplotlib.pyplot as plt
plt.scatter(X_pca[:,0], X_pca[:,1], c=y, cmap='rainbow')
plt.title('PCA Visualization (2 Components)')
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.show()
๊ฒฐ๊ณผ:
๊ณ ์ฐจ์ ๋ฐ์ดํฐ๋ฅผ 2D ํ๋ฉด์์ ์๊ฐํ โ
ํด๋์ค ๊ฐ ๊ตฌ์กฐ๋ ๊ตฐ์ง ํํ๊ฐ ์ง๊ด์ ์ผ๋ก ๋๋ฌ๋๋ค.
dataset = scale(dataset[, -3])
pca = prcomp(dataset)
summary(pca)
biplot(pca)
biplot()์ผ๋ก ๊ฐ ๋ณ์์ ์ฃผ์ฑ๋ถ ๊ฐ ๊ด๊ณ๋ฅผ ์๊ฐ์ ์ผ๋ก ํ์ธ ๊ฐ๋ฅ.
PCA๊ฐ ๋น์ง๋ํ์ต(ํด๋์ค ์ ๋ณด ์์) ์ด๋ผ๋ฉด,
LDA๋ ์ง๋ํ์ต ๊ธฐ๋ฐ ์ฐจ์ ์ถ์ ๊ธฐ๋ฒ์ด๋ค.
๋ชฉํ:
ํด๋์ค ๊ฐ ๋ถ์ฐ(๋ถ๋ฆฌ๋)์ ๊ทน๋ํํ๊ณ ,
ํด๋์ค ๋ด ๋ถ์ฐ์ ์ต์ํํ๋ ์ถ์ ์ฐพ๋๋ค.
| ํญ๋ชฉ | PCA | LDA |
|---|---|---|
| ์ง๋ ์ฌ๋ถ | ๋น์ง๋ | ์ง๋ |
| ๋ชฉํ | ๋ถ์ฐ ์ต๋ํ | ํด๋์ค ๋ถ๋ฆฌ ์ต๋ํ |
| ์ถ๋ ฅ ์ถ | ๋ฐ์ดํฐ ๋ฐฉํฅ | ํด๋์ค ๊ตฌ๋ถ ๋ฐฉํฅ |
| ์ ์ฉ ์์ | ํผ์ฒ ์ถ์ถ | ๋ถ๋ฅ ์ ๋จ๊ณ |
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
lda = LDA(n_components=2)
X_lda = lda.fit_transform(X_scaled, y)
plt.scatter(X_lda[:,0], X_lda[:,1], c=y, cmap='rainbow')
plt.title('LDA Projection')
plt.show()
๊ฒฐ๊ณผ:
ํด๋์ค ๊ฐ ๊ฒฝ๊ณ๊ฐ ๋ช
ํํ๊ฒ ๊ตฌ๋ถ๋ 2์ฐจ์ ํ๋ฉด์ด ์์ฑ๋๋ค.
library(MASS)
lda_model = lda(Class ~ ., data = dataset)
lda_pred = predict(lda_model, dataset)
plot(lda_pred$x, col=dataset$Class)
๐ก R์ lda()๋ ์๊ฐํ๊น์ง ์๋ ์ฒ๋ฆฌ.
๊ฐ ํด๋์ค๊ฐ ์ผ๋ง๋ ์ ๋ถ๋ฆฌ๋๋์ง ์ง๊ด์ ์ผ๋ก ํ์ธ ๊ฐ๋ฅ.
PCA๋ ์ ํ ๋ฐ์ดํฐ์๋ง ์ ํจํ์ง๋ง,
Kernel PCA ๋ ๋น์ ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ๋ฐ์ํ ์ ์๋ค.
ํต์ฌ ์์ด๋์ด:
๋ฐ์ดํฐ๋ฅผ ๊ณ ์ฐจ์ ๊ณต๊ฐ์ผ๋ก ๋งคํ ํ,
๊ทธ ๊ณต๊ฐ์์ ์ ํ PCA ์ํ.
| ์ปค๋ | ์์ | ํน์ง |
|---|---|---|
| Linear | ์ผ๋ฐ PCA | |
| Polynomial | ๊ณก์ ๊ด๊ณ ํํ | |
| RBF (Gaussian) | ( e^{-\gamma |
from sklearn.decomposition import KernelPCA
kpca = KernelPCA(n_components=2, kernel='rbf')
X_kpca = kpca.fit_transform(X_scaled)
plt.scatter(X_kpca[:,0], X_kpca[:,1], c=y, cmap='rainbow')
plt.title('Kernel PCA (RBF)')
plt.show()
๐ก RBF ์ปค๋์ ๋น์ ํ ๊ฒฝ๊ณ๋ฅผ ์์ฐ์ค๋ฝ๊ฒ ํํํด
โ๊ณก์ ํ ๋ถ๋ฆฌโ๊ฐ ํ์ํ ๋ฐ์ดํฐ์์ ๊ฐ๋ ฅํ ํจ๊ณผ๋ฅผ ๋ธ๋ค.
library(kernlab)
kpca_model = kpca(~., data=dataset, kernel="rbfdot", features=2)
pcv = rotated(kpca_model)
plot(pcv[,1], pcv[,2], col=dataset$Class)
| ๊ตฌ๋ถ | PCA | LDA | Kernel PCA |
|---|---|---|---|
| ์ง๋/๋น์ง๋ | ๋น์ง๋ | ์ง๋ | ๋น์ง๋ |
| ์ ์ฉ ๋์ | ์ ํ ๋ฐ์ดํฐ | ๋ถ๋ฅ ๋ฐ์ดํฐ | ๋น์ ํ ๋ฐ์ดํฐ |
| ๋ชฉ์ | ๋ถ์ฐ ์ต๋ํ | ํด๋์ค ๋ถ๋ฆฌ | ๋น์ ํ ํจํด ํ์ต |
| ์ปค๋ ์ฌ์ฉ | โ | โ | โ |
| ๊ฒฐ๊ณผ ํด์ | ์ง๊ต ์ฃผ์ฑ๋ถ | ๋ถ๋ฆฌ ์ถ | ๋งคํ๋ ๊ณต๊ฐ ์ถ |
| ๋ถ์ผ | ์ ์ฉ ์์ |
|---|---|
| ๋ฐ์ดํฐ ์๊ฐํ | ๊ณ ์ฐจ์ ๋ฐ์ดํฐ์ 2D ํํ |
| ์ด๋ฏธ์ง ์์ถ | ํฝ์ ์ฐจ์ ์ถ์ |
| ์ด์ ํ์ง | ๋ ธ์ด์ฆ ์ ๊ฑฐ, ์ด์์น ๊ฒ์ถ |
| ๋ถ๋ฅ ์ฌ์ ์ฒ๋ฆฌ | ์ฐจ์ ์ถ์ ํ SVM, KNN, ANN ์ ์ฉ |
from sklearn.decomposition import PCA, KernelPCA
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
# 1. PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
# 2. LDA
lda = LDA(n_components=2)
X_lda = lda.fit_transform(X_scaled, y)
# 3. Kernel PCA
kpca = KernelPCA(n_components=2, kernel='rbf')
X_kpca = kpca.fit_transform(X_scaled)
์ฐจ์ ์ถ์๋ ๋ณต์กํ ๋ฐ์ดํฐ๋ฅผ ๋จ์ํํ์ฌ
๋ชจ๋ธ ํจ์จ์ฑยท์๊ฐํยท์ผ๋ฐํ ์ฑ๋ฅ์ ํฅ์์ํค๋ ํต์ฌ ์ ์ฒ๋ฆฌ ๋จ๊ณ๋ค.
๐ ํต์ฌ ์์ฝ
| ๊ธฐ๋ฒ | ํต์ฌ ๊ฐ๋ | ์ฅ์ | ๋จ์ |
|---|---|---|---|
| PCA | ๋ถ์ฐ ๊ทน๋ํ ์ถ ์ฐพ๊ธฐ | ๋จ์, ๋น ๋ฆ | ํด๋์ค ์ ๋ณด ๋ฏธ์ฌ์ฉ |
| LDA | ํด๋์ค ๊ฐ ๋ถ๋ฆฌ ๊ทน๋ํ | ๋ถ๋ฅ ์ ํ๋ ํฅ์ | ๋น์ ํ ๋ฐ์ดํฐ์ ์ฝํจ |
| Kernel PCA | ์ปค๋ ๊ธฐ๋ฐ ๋น์ ํ ์ถ์ | ๋ณต์กํ ํจํด ํํ | ๊ณ์ฐ๋ ํผ |