1. Basis function
โข
์
๋ ฅ๊ฐ์ ๋ค์ํ ํน์ง ์ฐจ์์ผ๋ก ํ์ฅ์ํค๋ ํจ์
โข
๊ธฐ์กด ์ฐจ์์์ ์ ํ ํ๊ท/๋ถ๋ฅ๊ฐ ๋ถ๊ฐ๋ฅํ ๋ฐ์ดํฐ์ ๊ธฐ์ ํจ์๋ฅผ ์ ์ฉํ์ฌ ์ฐจ์์ ํ์ฅํ๋ฉด ์ ์ฐจ์์์ ์ ํ ๊ด๊ณ ์ ์ฉ์ด ๊ฐ๋ฅํจ
โข
๊ธฐ์กด ๊ณต๊ฐ์์๋ ๋น์ ํ์ ์ผ๋ก ๋๋๋ ๋ฐ์ดํฐ๋ผ๋ ๊ณ ์ฐจ์์ ํน์ง ๊ณต๊ฐ์ผ๋ก mappingํ๋ฉด ์ ํ ์ดํ๋ฉด์ผ๋ก ๋ถ๋ฆฌ๊ฐ ๊ฐ๋ฅํจ
โข
๊ธฐ์ ํจ์๋ฅผ ์ ์ฉํ๋ ๊ฒฝ์ฐ ๊ฐ์ค์น update์์ ์ฐ์ฐ๋์ด ๊ธ๊ฒฉํ ์ฆ๊ฐํจ
โฆ
์) SSE๋ฅผ ๋ชฉ์ ํจ์๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
2. Kernel Method
โข
๊ณ ์ฐจ์์ ๊ธฐ์ ํจ์๊ฐ ์ ์ฉ๋ ๊ฒฝ์ฐ Gradient Descent๋ฅผ ๋จ์ํํ๋ ์ํ์ ๋ฐฉ์
โข
๊ฐ์ค์น ๊ฐ scalar linear combination์ผ๋ก ํํ๋จ์ ์ํ์ ๊ท๋ฉ๋ฒ์ ์ฌ์ฉํ์ฌ ์ฆ๋ช
โข
โข
์ update๋ scalar update์ ๊ฐ๋ค
โข
; scalar update
โข
: Kernel ํ๋ ฌ๋ก ์ ์ํ์ฌ ์ฌ์ ๊ณ์ฐ ํ ์ฌ์ฉ
โ ์ปค๋ ๋ฐฉ๋ฒ์์๋๊ฐ์ค์น ๋ฒกํฐ์ ๋ช
์์ ์
๋ฐ์ดํธ๋ฅผ ํผํ๊ณ ํ์ต ์ํ๋ณ ์ค์นผ๋ผ ๊ณ์๋ฅผ ์
๋ฐ์ดํธ ํจ์ผ๋ก์จ ๋ชจ๋ธ์ ํ์ตํ๋ค. ๋ํ ์ปค๋ ํ๋ ฌ(Gram matrix)์ ๋ฏธ๋ฆฌ ๊ณ์ฐํจ์ผ๋ก์จ ๊ณ ์ฐจ์ ๋ด์ ์ฐ์ฐ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ์ฌ ์ฐ์ฐ๋์ ์ค์ผ ์ ์๋ค.
3. Code
import numpy as np
# ๋ฐ์ดํฐ ์์ฑ
n_obs, n_feature = 10, 5
X = np.random.randn(n_obs, n_feature)
true_w = np.random.randn(n_feature)
y = X@true_w
# ์ด๊ธฐ๊ฐ ์ค์
w = np.zeros(n_feature)
lr = 0.001
n_iters = 200
# Gradient Descent
for i in range(n_iters):
y_hat = X@w
grad = -X.T @ (y - y_hat )
w += lr*grad
# Kernel Method
# ์ด๊ธฐ๊ฐ ์ค์
w = np.zeros(n_feature)
K = X @ X.T
u = np.zeros(n_obs)
for i in range(n_iters):
dual = K @ u
grad_ = -K@(y-dual)
u += lr*grad_
w_ = X.T @ u
Python
๋ณต์ฌ