[๐Ÿ“–๋…ผ๋ฌธ ๋ฆฌ๋ทฐ] Kernel Principal Component Analysis (1997)

Becky's Study Labยท2024๋…„ 6์›” 2์ผ
0

PaperReview

๋ชฉ๋ก ๋ณด๊ธฐ
20/22

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

PCA(Principal Component Analysis)

์• ์ •ํ•˜๋Š” rastgo's blog ์— ์ž˜ ์ •๋ฆฌ๋˜์–ด ์žˆ์–ด์„œ, ๋”ฐ๋กœ ์ •๋ฆฌํ•˜์ง€ ์•Š๊ณ  ์ต ์˜ค๋žœ๋งŒ์— ์ฝ์–ด ๋ณด์•˜๋‹ค.

์ค‘์š”ํ•œ ์ ์„ ์ •๋ฆฌํ•˜์ž๋ฉด,

โœ… ์„ ํ˜•๋ณ€ํ™˜ํ•œ ๋ฐ์ดํ„ฐ์˜ ๋ถ„์‚ฐ์ด ํด ์ˆ˜ ์žˆ๊ฒŒ(์ฆ‰ ๋ฐ์ดํ„ฐ๊ฐ€ PC ์ถ•์— ์ตœ๋Œ€ํ•œ ํผ์ง€๋„๋ก) PC ์ถ•์„ ์žก์•„์•ผ ํ•œ๋‹ค.
โœ… PCA ์ˆ˜ํ–‰ ๋ฐฉ๋ฒ• :

  • 1) ๊ธฐ์กด ๋ฐ์ดํ„ฐ X ์˜ ๊ณต๋ถ„์‚ฐํ–‰๋ ฌ ๊ณ„์‚ฐ
  • 2) ๊ณต๋ถ„์‚ฐํ–‰๋ ฌ์˜ ๊ณ ์œ ๊ฐ’๊ณผ ๊ณ ์œ ๋ฒกํ„ฐ ๊ณ„์‚ฐ
  • 3)๊ณ ์œ ๊ฐ’์˜ ํฌ๊ธฐ ์ˆœ์„œ๋Œ€๋กœ ๊ณ ์œ ๋ฒกํ„ฐ๋ฅผ ๋‚˜์—ด
  • 4) ์ •๋ ฌ๋œ ๊ณ ์œ ๋ฒกํ„ฐ ๊ฐ€์šด๋ฐ ์ผ๋ถ€ ์„ ํƒ
  • 5) ํ•ด๋‹น ๊ณ ์œ ๋ฒกํ„ฐ์™€ X๋‚ด์ 

โœ…PCA์˜ ๋ชฉ์ ์€ ์›๋ฐ์ดํ„ฐ ํ–‰๋ ฌ X์˜ ๋ถ„์‚ฐ์„ ์ตœ๋Œ€ํ•œ ๋ณด์กดํ•˜๋Š” ๋ฐ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Z์˜ ๋ถ„์‚ฐ ๋˜ํ•œ ์ตœ๋Œ€ํ™”๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ… ๊ณต๋ถ„์‚ฐํ–‰๋ ฌ ฮฃ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๊ณ ์œ ๋ฒกํ„ฐ๋ผ๋ฆฌ๋Š” ์„œ๋กœ ์ง๊ต(orthogonal)ํ•จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โœ… ์›๋ฐ์ดํ„ฐ๋ฅผ ๊ณต๋ถ„์‚ฐ ํ–‰๋ ฌ์˜ ๊ณ ์œ ๋ฒกํ„ฐ๋กœ ์‚ฌ์˜ํ•˜๊ธฐ ์ „์—๋Š” ๋ณ€์ˆ˜ ๊ฐ„ ์—ฐ๊ด€์„ฑ์ด ์žˆ์—ˆ๋”๋ผ๋„ PCA ๋ณ€ํ™˜์— ์˜ํ•˜์—ฌ ์ขŒํ‘œ์ถ•์ด ๋ฐ”๋€ ๋ฐ์ดํ„ฐ๋“ค์€ ์„œ๋กœ ๋ฌด์ƒ๊ด€(uncorrelated)์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Kernel Principal Component Analysis


  • Kernel PCA์˜ ๊ธฐ๋ณธ ์•„์ด๋””์–ด: ํ‘œ์ค€ ๋‚ด์  ๋Œ€์‹  ๋น„์„ ํ˜• ์ปค๋„ ํ•จ์ˆ˜ ๐‘˜๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ, ๊ณ ์ฐจ์› ๊ณต๊ฐ„ ๐น์—์„œ PCA๋ฅผ ์•”๋ฌต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณ ์ฐจ์› ๊ณต๊ฐ„ ๐น๋Š” ์ž…๋ ฅ ๊ณต๊ฐ„๊ณผ ๋น„์„ ํ˜•์ ์œผ๋กœ ๊ด€๋ จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ปค๋„ ํ•จ์ˆ˜์˜ ์—ญํ• : ๋น„์„ ํ˜• ๊ด€๊ณ„๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ ๋” ์ž˜ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

1) Linear PCA: ์ž…๋ ฅ ๊ณต๊ฐ„์—์„œ ํ‘œ์ค€ ๋‚ด์ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์„ฑ๋ถ„์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
2) Kernel PCA: ๋น„์„ ํ˜• ์ปค๋„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž…๋ ฅ ๊ณต๊ฐ„์„ ๊ณ ์ฐจ์› ํ”ผ์ฒ˜ ๊ณต๊ฐ„์œผ๋กœ ๋งคํ•‘ํ•˜๊ณ , ๊ทธ ๊ณต๊ฐ„์—์„œ PCA๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จ ์ˆ˜์‹

์šฐ์„  ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์กด D์ฐจ์›์—์„œ ๋” ๊ณ ์ฐจ์›์ธ M์ฐจ์›์œผ๋กœ ๋ณ€ํ™˜ํ•œ ษธ(x)๋ฅผ ์ƒ์ •ํ•ฉ๋‹ˆ๋‹ค. ษธ(x)์— PCA๋ฅผ ์ ์šฉํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์‹์ด ์ „๊ฐœ๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ์‹์„ ษธ(x)์— ๋Œ€ํ•ด ํ’€๋ฉด ์—ฐ์‚ฐ์ด ๊ต‰์žฅํžˆ ๋ณต์žกํ•ด์ง€์ง€๋งŒ, ์ปค๋„ํŠธ๋ฆญ์€ ์ด๋ฅผ โ€˜์ปค๋„ ํ•จ์ˆ˜โ€™๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” k(x, x) ๋กœ ๋Œ€์ฒดํ•ด ๋งค์šฐ ๊ฐ„๋‹จํ•œ ์—ฐ์‚ฐ์œผ๋กœ ์น˜ํ™˜์‹œํ‚ต๋‹ˆ๋‹ค. ์ค‘๊ฐ„ ์œ ๋„๊ณผ์ •์€ ์ƒ๋žตํ•˜๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์ฐพ๊ณ ์ž ํ•˜๋Š” ์ฃผ์„ฑ๋ถ„ v๋ฅผ ๊ตฌํ•˜๋Š” ์‹์œผ๋กœ ์ •๋ฆฌํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ฆ‰, ์ปค๋„ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ษธ(x)๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๊ตฌํ•˜์ง€ ์•Š๊ณ ์„œ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์ฐจ์›์œผ๋กœ ์˜ฎ๊ธด ํ›„ PCA๋ฅผ ์ ์šฉํ•œ ๊ฐ’์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒŒ ์ปค๋„PCA์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

์ปค๋„ํ•จ์ˆ˜๋กœ๋Š” ๋Œ€ํ‘œ์ ์œผ๋กœ 2๊ฐ€์ง€๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹คํ•ญ์ปค๋„ํ•จ์ˆ˜(Polynomial kernel function)๊ณผ ๊ฐ€์šฐ์‹œ์•ˆ ๋˜๋Š” RBF์ปค๋„ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

โ— ์‹ค์ œ๋กœ ํ”ผ์ฒ˜ ๊ณต๊ฐ„ ๐น๋กœ ๋ช…์‹œ์ ์œผ๋กœ ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ, Kernel PCA๋Š” ๊ณ ์ฐจ์› ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ปค๋„ ํ•จ์ˆ˜ ๐‘˜๋ฅผ ์‚ฌ์šฉ => Kernel PCA๋Š” ๋งค์šฐ ๋†’์€ ์ฐจ์›์˜ ๊ณต๊ฐ„์—์„œ ๋‚ด์ ์„ ๊ณ„์‚ฐํ•˜๋Š” ๋Œ€์‹ , ์ปค๋„ ํ•จ์ˆ˜ ํ‰๊ฐ€๋ฅผ ํ†ตํ•ด ํšจ์œจ์ ์œผ๋กœ ์ฃผ์„ฑ๋ถ„ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.


Kernal PCA ์ฝ”๋“œ

# Kernel PCA with Polynomial kernel
def poly_kpca(X, degree, n_components, coef0=1):
 K = (np.dot(X, X.T) + coef0) ** degree
 N = K.shape[0]
 one_n = np.ones((N, N)) / N
 K = K - one_n.dot(K) - K.dot(one_n) + one_n.dot(K).dot(one_n)
 eigvals, eigvecs = eigh(K)
 pc = np.column_stack((eigvecs[:, -i] for i in range(1, n_components + 1)))
 return pc
pc = poly_kpca(X, 5, 2) #degree=5๋กœ ์„ค์ •
x1 = pc[:,0]
x2 = pc[:,1]
plt.figure(figsize=(6,6))
plt.scatter(x1[y==100], x2[y==100], c='b', alpha=0.5, label='Class1')
plt.scatter(x1[y==30], x2[y==30], c='r', alpha=0.5, label='Class2')
plt.legend()
plt.show()

๐Ÿ”– Reference
์ฐธ๊ณ 1
์ฐธ๊ณ 2

profile
๋ฐฐ์šฐ๊ณ  ๊ณต๋ถ€ํ•˜๊ณ  ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์„ ๋ฉˆ์ถ”์ง€ ์•Š๋Š”๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€