PCA (Principal Component Analysis)๋ฅผ ์ฌ์ฉํ์ฌ ์น์๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ฐจ์ ์ถ์๊ฐ ์ํ ๋ ํ ์์์ ์ฃผ์ ๊ตฌ์ฑ ์์์์ ์๋ ๋ณ์ / ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ๋๋ต ์ฌ๊ตฌ์ฑ ํ ์ ์์ต๋๊น?
๋๋ ๋ฐ์ดํฐ์์ ์ฌ๋ฌ ์ฃผ์ ๊ตฌ์ฑ ์์๋ฅผ ์ด๋ป๊ฒ ์ ๊ฑฐํ๊ฑฐ๋ ๋ฒ๋ฆด ์ ์์ต๋๊น?
๋ค์ ๋งํด PCA๋ฅผ ์ด๋ป๊ฒ ๋ฐ๊พธ๋๊ฐ?
PCA๊ฐ SVD (Singular Value Decomposition)์ ๋ฐ์ ํ ๊ด๋ จ์ด ์๋ค๊ณ ๊ฐ์ ํ๋ฉด SVD๋ฅผ ์ด๋ป๊ฒ ๋ค์ง์ ๊ฒ์ธ๊ฐ?
๋ต๋ณ
PCA๋ ๊ณต๋ถ์ฐ ํ๋ ฌ์ ๊ณ ์ ๋ฒกํฐ ( โ์ฃผ์ถโ)๋ฅผ ๊ณ์ฐํ๊ณ ๊ณ ์ ๊ฐ (์ค๋ช ๋ ๋ถ์ฐ์ ์)์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ค์ฌ ๋ฐ์ดํฐ๋ฅผ ์ด๋ฌํ ์ฃผ์ถ์ ํฌ์ํ์ฌ ์ฃผ์ฑ๋ถ ( โ์ ์โ)์ ์ฐ์ถ ํ ์ ์์ต๋๋ค. ์ฐจ์ ์ถ์๋ฅผ ์ํด ์ฃผ์ ๊ตฌ์ฑ ์์์ ํ์ ์งํฉ ๋ง ์ ์งํ๊ณ ๋๋จธ์ง๋ ๋ฒ๋ฆด ์ ์์ต๋๋ค. ( PCA ์ ๋ํ ํ์ ๋์ ์๊ฐ ๋ ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ญ์์ค .)
ํ์ ๋ ์ ๋ฐ์ดํฐ ๋งคํธ๋ฆญ์ค ํ (๋ฐ์ดํฐ ์ง์ ) ๋ฐ ์ด (๋ณ์ ๋๋ ๊ธฐ๋ฅ). ๊ฐ ํ์์ ํ๊ท ๋ฒกํฐ ๋ฅผ ๋นผ๋ฉด ์ค์ฌ ๋ฐ์ดํฐ ํ๋ ฌ ์ป์ต๋๋ค . ๋ฅผ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๊ณ ์ํ๋ ๊ณ ์ ๋ฒกํฐ ์ ํ๋ ฌ๋ก ํ์ . ์ด๋ค์ ๊ฐ์ฅ ํฐ ๊ณ ์ ๊ฐ์ ๊ฐ๋ ๊ณ ์ ๋ฒกํฐ ์ผ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ฉด PCA ํ๋ก์ ์ ์ ํ๋ ฌ ( โ์ ์โ)์ ๋ก ๊ฐ๋จํ ์ ๊ณต๋ฉ๋๋ค . nรpnp
Xrawnรp
n
p
ฮผ
X
V
pรk
k
k
nรk
Z=XV
์๋ ๊ทธ๋ฆผ์ ์ค๋ช ๋์ด ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์๋ธ ํ๋กฏ์๋ ์ผ๋ถ ์ค์ฌ ๋ฐ์ดํฐ ( ๋งํฌ ๋ ์ค๋ ๋์์ ์ ๋๋ฉ์ด์ ์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํ ๋ฐ์ดํฐ )์ ์ฒซ ๋ฒ์งธ ์ฃผ์ถ์ ํฌ์์ด ํ์๋ฉ๋๋ค. ๋ ๋ฒ์งธ ์๋ธ ํ๋กฏ์์ด ํฌ์์ ๊ฐ๋ง ๋ณด์ฌ์ค๋๋ค. ์ฐจ์์ด 2์์ 1๋ก ๊ฐ์๋์์ต๋๋ค.
์ด ํ๋์ ์ฃผ์ฑ๋ถ์์ ์๋์ ๋ ๋ณ์๋ฅผ ์ฌ๊ตฌ์ฑํ๊ธฐ ์ํด ์ฌ์ฉ ํ์ฌ ์ฐจ์์ ๋ค์ ๋งคํ ํ ์ ์์ต๋๋ค . ์ค์ ๋ก, ๊ฐ PC์ ๊ฐ์ ํฌ์์ ์ฌ์ฉ ๋ ๊ฒ๊ณผ ๋์ผํ ๋ฒกํฐ์ ์์นํด์ผํฉ๋๋ค. ์๋ธ ํ๋กํธ 1๊ณผ 3์ ๋น๊ตํฉ๋๋ค. ๊ฒฐ๊ณผ๋ . ์์ ์ธ ๋ฒ์งธ ํ์ ํ๋กฏ์ ํ์ํ๊ณ ์์ต๋๋ค. ์ต์ข ์ฌ๊ตฌ์ฑ ๋ฅผ ์ป์ผ๋ ค๋ฉด ํ๊ท ๋ฒกํฐ ๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
pVโค
X^=ZVโค=XVVโค
X^raw
ฮผ
์ ํ๋ ฌ ์ ๊ณฑํ์ฌ ์ฒซ ๋ฒ์งธ ์๋ธ ํ๋กฏ์์ ์ธ ๋ฒ์งธ ์๋ธ ํ๋กฏ์ผ๋ก ์ง์ ์ด๋ํ ์ ์์ต๋๋ค . ์ด๋ฅผ ํฌ์ ํ๋ ฌ ์ด๋ผ๊ณ ํฉ๋๋ค . ๋ชจ๋ ๊ฒฝ์ฐ์ ๊ณ ์ ๋ฒกํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ค์ ๋จ์ ํ๋ ฌ์ด๋ค (์ด๋ค ์ฐจ์ ์ถ์๋ ์ํ๋์ง ์์ผ๋ฉฐ, ๋ฐ๋ผ์, โ์ฌ๊ตฌ์ฑโ์๋ฒฝ). ๊ณ ์ ๋ฒกํฐ์ ๋ถ๋ถ ์งํฉ ๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋์ผํ์ง ์์ต๋๋ค.
XVVโค
p
VVโค
์ด๊ฒ์ PC ๊ณต๊ฐ์์ ์์์ ํฌ์ธํธ ์์ ์๋ ํฉ๋๋ค. ํตํด ์๋ ๊ณต๊ฐ์ ๋งคํ ๋ ์ ์์ต๋๋ค .
zx^=zVโค
์ฃผ์ PC ํ๊ธฐ (์ ๊ฑฐ)
๋๋ก๋ ์ ํ PC๋ฅผ ์ ์งํ๊ณ ๋๋จธ์ง๋ฅผ ๋ฒ๋ฆฌ๋ ๋์ (์์ ๊ฐ์ด) ์ผ๋ถ ์ฃผ์ PC๋ฅผ ํ๊ธฐ (์ ๊ฑฐ)ํ๊ณ ๋๋จธ์ง๋ฅผ ์ ์งํ๋ ค๊ณ ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ชจ๋ ๊ณต์์ ์ ํํ ๋์ผ ํ์ง๋ง ๋ ๋ฒ๋ฆฌ๊ณ ์ํ๋ ์ฃผ์ถ์ ์ ์ธํ ๋ชจ๋ ์ฃผ์ถ์ผ๋ก ๊ตฌ์ฑ๋์ด์ผํฉ๋๋ค . ์ฆ, ๋ ํญ์ ์ ์งํ๋ ค๋ ๋ชจ๋ PC๋ฅผ ํฌํจํด์ผํฉ๋๋ค.
VV
์๊ด ๊ด๊ณ์ ๋ํ PCA์ ๋ํ ๊ฒฝ๊ณ
PCA๊ฐ ์๊ด ํ๋ ฌ (๊ณต๋ถ์ฐ ํ๋ ฌ์ด ์๋)์ ๋ํด ์ํ ๋ ๋ ์์ ๋ฐ์ดํฐ ๋ ๋ฅผ ๋นผ์ ์ค์ฌ์ ๋๋ฟ๋ง ์๋๋ผ ๊ฐ ์ด์ ํ์ค ํธ์ฐจ ๋ก ๋๋ ์ ์ค์ผ์ผ๋ฉ๋๋ค . ์ด ๊ฒฝ์ฐ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ๊ตฌ์ฑํ๋ ค๋ฉด ํ์ฌ ์ ์ด์ ๋ค์ ์ค์ผ์ผ๋ง ํ ๋ค์ ํ๊ท ๋ฒกํฐ ๋ค์ ์ถ๊ฐํด์ผํฉ๋๋ค .
Xrawฮผ
ฯi
X^
ฯi
ฮผ
์ด๋ฏธ์ง ์ฒ๋ฆฌ ์
์ด ์ฃผ์ ๋ ์ข ์ข ์ด๋ฏธ์ง ์ฒ๋ฆฌ์ ๊ด๋ จํ์ฌ ๋ํ๋ฉ๋๋ค. ์ด๋ฏธ์ง ์ฒ๋ฆฌ ๋ฌธํ์ ํ์ค ์ด๋ฏธ์ง ์ค ํ๋ ์ธ Lenna๋ฅผ ๊ณ ๋ คํ์ญ์์ค (๋งํฌ๋ฅผ ๋ฐ๋ผ ์ถ์ฒ๋ฅผ ์ฐพ์ผ์ญ์์ค). ์ผ์ชฝ ์๋์์ด ์ด๋ฏธ์ง ์ ํ์์กฐ ๋ณํ์ด ํ์๋ฉ๋๋ค ( ์ฌ๊ธฐ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ํ์ผ ).
512ร512์ด ๊ทธ๋ ์ด ์ค์ผ์ผ ์ด๋ฏธ์ง๋ฅผ ๋ฐ์ดํฐ ๋งคํธ๋ฆญ์ค ๋ก ์ทจ๊ธ ํ ์ ์์ต๋๋ค . PCA๋ฅผ ์ํ ํ๊ณ ์ฒ์ 50 ๊ฐ์ ์ฃผ์ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฅผ ๊ณ์ฐํฉ๋๋ค. ๊ฒฐ๊ณผ๊ฐ ์ค๋ฅธ์ชฝ์ ํ์๋ฉ๋๋ค.
512ร512Xraw
X^raw
SVD ๋๋๋ฆฌ๊ธฐ
PCA๋ ๋จ์ผ ๊ฐ ๋ถํด (SVD)์ ๋ฐ์ ํ ๊ด๋ จ์ด ์์ต๋๋ค. SVD์ PCA์ ๊ด๊ณ๋ฅผ ์ฐธ์กฐํ์ญ์์ค
. SVD๋ฅผ ์ฌ์ฉํ์ฌ PCA๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ? ์์ธ ์ฌํญ์. ๊ฒฝ์ฐ ๋งคํธ๋ฆญ์ค SVD-ED๋ ๊ทธ๋๋ก ๋ฐ ํ๋ ์ ํํ๋ ์ฐจ์ ๋ฒกํฐ ์ โ์ถ์โ์ ์ง์ ๋ํ๋ด๋ โ ๊ณต๊ฐ์ ์ ์ธก์ ํ ๋ค์์ ๋ค์ ๋งคํํ๋ ํ๋์ ๊ณฑํด์ผ ์น์ .
X
X=USVโค
k
z
U
k
p
S1:k,1:kโคV:,1:kโค
R, Matlab, Python ๋ฐ Stata์ ์
Fisher Iris ๋ฐ์ดํฐ ์ ๋ํด PCA๋ฅผ ์ํ ํ ํ ์ฒ์ ๋ ๊ฐ์ง ์ฃผ์ ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๊ตฌ์ฑํฉ๋๋ค. ์๊ด ํ๋ ฌ์ด ์๋ ๊ณต๋ถ์ฐ ํ๋ ฌ์์ PCA๋ฅผ ์ํํ๊ณ ์์ต๋๋ค. ์ฆ, ์ฌ๊ธฐ์ ๋ณ์๋ฅผ ์ค์ผ์ผ๋งํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์ฌ์ ํ ํ๊ท ์ ๋ค์ ์ถ๊ฐํด์ผํฉ๋๋ค. Stata์ ๊ฐ์ ์ผ๋ถ ํจํค์ง๋ ํ์ค ๊ตฌ๋ฌธ์ ํตํด ์ฒ๋ฆฌํฉ๋๋ค. ์ฝ๋์ ๋ํ ๋์์ ์ฃผ์ @StasK์ @Kodiologist์๊ฒ ๊ฐ์ฌํฉ๋๋ค.
์ฒซ ๋ฒ์งธ ๋ฐ์ดํฐ ํฌ์ธํธ์ ์ฌ๊ตฌ์ฑ์ ํ์ธํฉ๋๋ค.
5.1 3.5 1.4 0.2
MATLAB
load fisheriris
X = meas;
mu = mean(X);
[eigenvectors, scores] = pca(X);
nComp = 2;
Xhat = scores(:,1:nComp) * eigenvectors(:,1:nComp)';
Xhat = bsxfun(@plus, Xhat, mu);
Xhat(1,:)
์ฐ์ถ:
5.083 3.5174 1.4032 0.21353
์๋ฅด ์ํ
X = iris[,1:4]
mu = colMeans(X)
Xpca = prcomp(X)
nComp = 2
Xhat = Xpca$x[,1:nComp] %*% t(Xpca$rotation[,1:nComp])
Xhat = scale(Xhat, center = -mu, scale = FALSE)
Xhat[1,]
์ฐ์ถ:
Sepal.Length Sepal.Width Petal.Length Petal.Width
5.0830390 3.5174139 1.4032137 0.2135317
์ด๋ฏธ์ง์ PCA ์ฌ๊ตฌ์ฑ์ ๋ํ R ์์ ๋ ์ด ๋ต๋ณ ๋ ์ฐธ์กฐํ์ญ์์ค .
ํ์ด์ฌ
import numpy as np
import sklearn.datasets, sklearn.decomposition
X = sklearn.datasets.load_iris().data
mu = np.mean(X, axis=0)
pca = sklearn.decomposition.PCA()
pca.fit(X)
nComp = 2
Xhat = np.dot(pca.transform(X)[:,:nComp], pca.components_[:nComp,:])
Xhat += mu
print(Xhat[0,])
์ฐ์ถ:
[ 5.08718247 3.51315614 1.4020428 0.21105556]
์ด๊ฒ์ ๋ค๋ฅธ ์ธ์ด์ ๊ฒฐ๊ณผ์ ์ฝ๊ฐ ๋ค๋ฆ ๋๋ค. ํ์ด์ฌ์ ์์ด๋ฆฌ์ค ๋ฐ์ดํฐ ์ ๋ฒ์ ์ ์ค์๊ฐ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ ์ ๋๋ค.
์คํ ํ
webuse iris, clear
pca sep* pet*, components(2) covariance
predict _seplen _sepwid _petlen _petwid, fit
list in 1
iris seplen sepwid petlen petwid _seplen _sepwid _petlen _petwid
setosa 5.1 3.5 1.4 0.2 5.083039 3.517414 1.403214 .2135317