ํƒœ๊ทธ ๋ณด๊ด€๋ฌผ: pca

pca

PCA๋ฅผ ๋˜๋Œ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ์›๋ž˜ ๋ณ€์ˆ˜๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ˆ˜ํ–‰ ๋œ ํ›„ ์†Œ์ˆ˜์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ์—์„œ

PCA (Principal Component Analysis)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์น˜์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฐจ์› ์ถ•์†Œ๊ฐ€ ์ˆ˜ํ–‰ ๋œ ํ›„ ์†Œ์ˆ˜์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ์›๋ž˜ ๋ณ€์ˆ˜ / ๊ธฐ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ๋Œ€๋žต ์žฌ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋˜๋Š” ๋ฐ์ดํ„ฐ์—์„œ ์—ฌ๋Ÿฌ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ๋ฒ„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹ค์‹œ ๋งํ•ด PCA๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐ”๊พธ๋Š”๊ฐ€?


PCA๊ฐ€ SVD (Singular Value Decomposition)์™€ ๋ฐ€์ ‘ํ•œ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด SVD๋ฅผ ์–ด๋–ป๊ฒŒ ๋’ค์ง‘์„ ๊ฒƒ์ธ๊ฐ€?



๋‹ต๋ณ€

PCA๋Š” ๊ณต๋ถ„์‚ฐ ํ–‰๋ ฌ์˜ ๊ณ ์œ  ๋ฒกํ„ฐ ( โ€œ์ฃผ์ถ•โ€)๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ๊ณ ์œ  ๊ฐ’ (์„ค๋ช… ๋œ ๋ถ„์‚ฐ์˜ ์–‘)์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ค‘์‹ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋Ÿฌํ•œ ์ฃผ์ถ•์— ํˆฌ์˜ํ•˜์—ฌ ์ฃผ์„ฑ๋ถ„ ( โ€œ์ ์ˆ˜โ€)์„ ์‚ฐ์ถœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐจ์› ์ถ•์†Œ๋ฅผ ์œ„ํ•ด ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ ๋งŒ ์œ ์ง€ํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฒ„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ( PCA ์— ๋Œ€ํ•œ ํ‰์‹ ๋„์˜ ์†Œ๊ฐœ ๋Š” ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค .)

ํ•˜์ž ๋  ์™€ ๋ฐ์ดํ„ฐ ๋งคํŠธ๋ฆญ์Šค ํ–‰ (๋ฐ์ดํ„ฐ ์ง€์ ) ๋ฐ ์—ด (๋ณ€์ˆ˜ ๋˜๋Š” ๊ธฐ๋Šฅ). ๊ฐ ํ–‰์—์„œ ํ‰๊ท  ๋ฒกํ„ฐ ๋ฅผ ๋นผ๋ฉด ์ค‘์‹ฌ ๋ฐ์ดํ„ฐ ํ–‰๋ ฌ ์–ป์Šต๋‹ˆ๋‹ค . ๋ฅผ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ ์žํ•˜๋Š” ๊ณ ์œ  ๋ฒกํ„ฐ ์˜ ํ–‰๋ ฌ๋กœ ํ•˜์ž . ์ด๋“ค์€ ๊ฐ€์žฅ ํฐ ๊ณ ์œ  ๊ฐ’์„ ๊ฐ–๋Š” ๊ณ ์œ  ๋ฒกํ„ฐ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด PCA ํ”„๋กœ์ ์…˜ ์˜ ํ–‰๋ ฌ ( โ€œ์ ์ˆ˜โ€)์€ ๋กœ ๊ฐ„๋‹จํžˆ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค . nร—pnp

Xraw

nร—p

n

p

ฮผ

X

V

pร—k

k

k

nร—k

Z=XV

์•„๋ž˜ ๊ทธ๋ฆผ์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์„œ๋ธŒ ํ”Œ๋กฏ์—๋Š” ์ผ๋ถ€ ์ค‘์‹ฌ ๋ฐ์ดํ„ฐ ( ๋งํฌ ๋œ ์Šค๋ ˆ๋“œ์—์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ )์™€ ์ฒซ ๋ฒˆ์งธ ์ฃผ์ถ•์˜ ํˆฌ์˜์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์„œ๋ธŒ ํ”Œ๋กฏ์€์ด ํˆฌ์˜์˜ ๊ฐ’๋งŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ฐจ์›์ด 2์—์„œ 1๋กœ ๊ฐ์†Œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ํ•˜๋‚˜์˜ ์ฃผ์„ฑ๋ถ„์—์„œ ์›๋ž˜์˜ ๋‘ ๋ณ€์ˆ˜๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ ํ•˜์—ฌ ์ฐจ์›์— ๋‹ค์‹œ ๋งคํ•‘ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ์‹ค์ œ๋กœ, ๊ฐ PC์˜ ๊ฐ’์€ ํˆฌ์˜์— ์‚ฌ์šฉ ๋œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฒกํ„ฐ์— ์œ„์น˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ธŒ ํ”Œ๋กœํŠธ 1๊ณผ 3์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” . ์œ„์˜ ์„ธ ๋ฒˆ์งธ ํ•˜์œ„ ํ”Œ๋กฏ์— ํ‘œ์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์ข… ์žฌ๊ตฌ์„ฑ ๋ฅผ ์–ป์œผ๋ ค๋ฉด ํ‰๊ท  ๋ฒกํ„ฐ ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

p

VโŠค

X^=ZVโŠค=XVVโŠค

X^raw

ฮผ

PCA reconstruction=PC scoresโ‹…EigenvectorsโŠค+Mean

์— ํ–‰๋ ฌ ์„ ๊ณฑํ•˜์—ฌ ์ฒซ ๋ฒˆ์งธ ์„œ๋ธŒ ํ”Œ๋กฏ์—์„œ ์„ธ ๋ฒˆ์งธ ์„œ๋ธŒ ํ”Œ๋กฏ์œผ๋กœ ์ง์ ‘ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ์ด๋ฅผ ํˆฌ์˜ ํ–‰๋ ฌ ์ด๋ผ๊ณ ํ•ฉ๋‹ˆ๋‹ค . ๋ชจ๋“  ๊ฒฝ์šฐ์— ๊ณ ์œ  ๋ฒกํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค์Œ ๋‹จ์œ„ ํ–‰๋ ฌ์ด๋‹ค (์–ด๋–ค ์ฐจ์› ์ถ•์†Œ๋Š” ์ˆ˜ํ–‰๋˜์ง€ ์•Š์œผ๋ฉฐ, ๋”ฐ๋ผ์„œ, โ€œ์žฌ๊ตฌ์„ฑโ€์™„๋ฒฝ). ๊ณ ์œ  ๋ฒกํ„ฐ์˜ ๋ถ€๋ถ„ ์ง‘ํ•ฉ ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋™์ผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

X

VVโŠค

p

VVโŠค

์ด๊ฒƒ์€ PC ๊ณต๊ฐ„์—์„œ ์ž„์˜์˜ ํฌ์ธํŠธ ์—์„œ ์ž‘๋™ ํ•ฉ๋‹ˆ๋‹ค. ํ†ตํ•ด ์›๋ž˜ ๊ณต๊ฐ„์— ๋งคํ•‘ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

z

x^=zVโŠค

์ฃผ์š” PC ํ๊ธฐ (์ œ๊ฑฐ)

๋•Œ๋กœ๋Š” ์„ ํ–‰ PC๋ฅผ ์œ ์ง€ํ•˜๊ณ  ๋‚˜๋จธ์ง€๋ฅผ ๋ฒ„๋ฆฌ๋Š” ๋Œ€์‹  (์œ„์™€ ๊ฐ™์ด) ์ผ๋ถ€ ์ฃผ์š” PC๋ฅผ ํ๊ธฐ (์ œ๊ฑฐ)ํ•˜๊ณ  ๋‚˜๋จธ์ง€๋ฅผ ์œ ์ง€ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ชจ๋“  ๊ณต์‹์€ ์ •ํ™•ํžˆ ๋™์ผ ํ•˜์ง€๋งŒ ๋Š” ๋ฒ„๋ฆฌ๊ณ  ์žํ•˜๋Š” ์ฃผ์ถ•์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์ฃผ์ถ•์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค . ์ฆ‰, ๋Š” ํ•ญ์ƒ ์œ ์ง€ํ•˜๋ ค๋Š” ๋ชจ๋“  PC๋ฅผ ํฌํ•จํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

V

V

์ƒ๊ด€ ๊ด€๊ณ„์— ๋Œ€ํ•œ PCA์— ๋Œ€ํ•œ ๊ฒฝ๊ณ 

PCA๊ฐ€ ์ƒ๊ด€ ํ–‰๋ ฌ (๊ณต๋ถ„์‚ฐ ํ–‰๋ ฌ์ด ์•„๋‹˜)์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ ๋  ๋•Œ ์›์‹œ ๋ฐ์ดํ„ฐ ๋Š” ๋ฅผ ๋นผ์„œ ์ค‘์‹ฌ์„ ๋‘˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐ ์—ด์„ ํ‘œ์ค€ ํŽธ์ฐจ ๋กœ ๋‚˜๋ˆ ์„œ ์Šค์ผ€์ผ๋ฉ๋‹ˆ๋‹ค . ์ด ๊ฒฝ์šฐ ์›๋ž˜ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ํ•˜์—ฌ ์˜ ์—ด์„ ๋‹ค์‹œ ์Šค์ผ€์ผ๋ง ํ•œ ๋‹ค์Œ ํ‰๊ท  ๋ฒกํ„ฐ ๋‹ค์‹œ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค .

Xraw

ฮผ

ฯƒi

X^

ฯƒi

ฮผ

์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ์˜ˆ

์ด ์ฃผ์ œ๋Š” ์ข…์ข… ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จํ•˜์—ฌ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ๋ฌธํ—Œ์˜ ํ‘œ์ค€ ์ด๋ฏธ์ง€ ์ค‘ ํ•˜๋‚˜ ์ธ Lenna๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค (๋งํฌ๋ฅผ ๋”ฐ๋ผ ์ถœ์ฒ˜๋ฅผ ์ฐพ์œผ์‹ญ์‹œ์˜ค). ์™ผ์ชฝ ์•„๋ž˜์—์ด ์ด๋ฏธ์ง€ ์˜ ํšŒ์ƒ‰์กฐ ๋ณ€ํ˜•์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค ( ์—ฌ๊ธฐ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ ).

512ร—512

์ด ๊ทธ๋ ˆ์ด ์Šค์ผ€์ผ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ์ดํ„ฐ ๋งคํŠธ๋ฆญ์Šค ๋กœ ์ทจ๊ธ‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . PCA๋ฅผ ์ˆ˜ํ–‰ ํ•˜๊ณ  ์ฒ˜์Œ 50 ๊ฐœ์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๊ฐ€ ์˜ค๋ฅธ์ชฝ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

512ร—512

Xraw

X^raw

SVD ๋˜๋Œ๋ฆฌ๊ธฐ

PCA๋Š” ๋‹จ์ผ ๊ฐ’ ๋ถ„ํ•ด (SVD)์™€ ๋ฐ€์ ‘ํ•œ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. SVD์™€ PCA์˜ ๊ด€๊ณ„๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค
. SVD๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ PCA๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•? ์ƒ์„ธ ์‚ฌํ•ญ์€. ๊ฒฝ์šฐ ๋งคํŠธ๋ฆญ์Šค SVD-ED๋Š” ๊ทธ๋Œ€๋กœ ๋ฐ ํ•˜๋‚˜ ์„ ํƒํ•˜๋Š” ์ฐจ์› ๋ฒกํ„ฐ ์€ โ€œ์ถ•์†Œโ€์˜ ์ง€์  ๋‚˜ํƒ€๋‚ด๋Š” โ€“ ๊ณต๊ฐ„์„ ์˜ ์ธก์ • ํ•œ ๋‹ค์Œ์— ๋‹ค์‹œ ๋งคํ•‘ํ•˜๋Š” ํ•˜๋‚˜์™€ ๊ณฑํ•ด์•ผ ์น˜์ˆ˜ .

nร—p

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  

๋‹ต๋ณ€