๋ณธ ๋ด์ฉ์ ํธ์ฆ์จ ๋จธ์ ๋ฌ๋2 ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ์์ผ๋ฉฐ, ์๋ต๋ ๋ด์ฉ์ด๋ ์ถ๊ฐ๋ ๋ด์ฉ์ด ์์ต๋๋ค.
[4.1] ์ ํ ํ๊ท
- ์ ํ ํ๊ท ๋ชจ๋ธ์ ์์ธก
- $y = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + ... +\theta_n x_n$
- $y = h_\theta(x) = \theta \cdot x$
- $y$๋ ์์ธก๊ฐ, $n$ ์ ํน์ฑ์ ์, $x_i$๋ $i$๋ฒ์งธ ํน์ฑ๊ฐ, $\theta_j$๋ $j$๋ฒ์งธ ๋ชจ๋ธ ํ๋ผ๋ฏธํฐ
- ์ฑ๋ฅ ํ๊ฐ ์งํ
- ํ๊ท ์ ๊ณฑ๊ทผ ์ค์ฐจ(RMSE) : $\sqrt{MSE(\theta)}$
- RMSE๋ฅผ ์ต์ํํ๋ $\theta$๋ฅผ ์ฐพ์์ผ ํ๋ค
- ํ๊ท ์ ๊ณฑ๊ทผ ์ค์ฐจ(RMSE) : $\sqrt{MSE(\theta)}$
- ์ ๊ท ๋ฐฉ์ ์
- $\theta = (X^TX)^{-1}X^Ty$
- $\theta$ ๋ ๋น์ฉ ํจ์๋ฅผ ์ต์ํํ๋ ๊ฐ์ด๋ค.
- $y$๋ $y^{1}$ ๋ถํฐ $y^{m}$ ๊น์ง ํฌํจํ๋ ํ๊ฒ ๋ฒกํฐ
import numpy as np
X = 2 * np.random.rand(100, 1) #100x1 ๋ฐฐ์ด์ ๊ฐ์ง๋ ํ์ค ์ ๊ท๋ถํฌ ๋์๋ฅผ ์์ฑ
y = 4 + 3 * X + np.random.randn(100, 1) #ํ๊ท 0, ํ์คํธ์ฐจ 1์ ๊ฐ์ฐ์์ ํ์ค์ ๊ท๋ถํฌ๋ฅผ ๊ฐ์ง๋ 100x1 ๋ฐฐ์ด ์์ฑ
X_b = np.c_[np.ones((100, 1)), X] # ๋ชจ๋ ์ํ์ x0 = 1์ ์ถ๊ฐ
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y) #์ ๊ท๋ฐฉ์ ์
print(theta_best)
- ์ ์ฝ๋๋ฅผ ํตํด ์์ธก๋ $\theta_0, \theta_1$์ ์ ์ ์๋ค. ( $\theta_0 = 4, \theta_1 = 3$ ์ ๊ธฐ๋ํ๋ค)
X_new = np.array([[0], [2]]) # x0 = 0 , x1 = 2
X_new_b = np.c_[np.ones((2,1)), X_new] #๋ชจ๋ ์ํ์ x0 = 1์ ์ถ๊ฐ
y_predict = X_new_b.dot(theta_best) # ๋ชจ๋ธ์ ์์ธก
- ์ ์ฝ๋๋ฅผ ํตํด ์ง์ ์์์ผ๋ก ์ ํ ํ๊ท๋ฅผ ๋ํ๋ด๋ณผ ์ ์๋ค.
from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(X, y)
lin_reg.intercept_, lin_reg.coef_ #์ ํ ํ๊ท ๋ชจ๋ธ์ ์ ํธ๊ณผ ๊ธฐ์ธ๊ธฐ
lin_reg.predict(X_new)
- sklearn์ LinearRegression ํจ์๋ฅผ ํตํด ๊ฐ๋จํ๊ฒ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค
- ๊ณ์ฐ ๋ณต์ก๋ $O(n^2)$
[4.2] ๊ฒฝ์ฌ ํ๊ฐ๋ฒ
- ์ฌ๋ฌ ๋ฌธ์ ์์ ์ต์ ์ ํด๋ฒ์ ์ฐพ์ ์ ์๋ ์ผ๋ฐ์ ์ธ ์ต์ ํ ์๊ณ ๋ฆฌ์ฆ
- ๋น์ฉ ํจ์๋ฅผ ์ต์ํ ํ๊ธฐ ์ํด ๋ฐ๋ณตํด์ ํ๋ผ๋ฏธํฐ๋ฅผ ์กฐ์
- ๋ฌธ์ ์
- ์๊ณ ๋ฆฌ์ฆ์ด ๋ฌด์์ ์ด๊ธฐํ ๋๋ฌธ์ ์ผ์ชฝ์์ ์์ํ๋ค๋ฉด ์ ์ญ ์ต์๊ฐ๋ณด๋ค ๋ ์ข์ ์ง์ญ ์ต์๊ฐ์ ์๋ ดํ ๊ฐ๋ฅ์ฑ์ด ์๋ค.(๋ณผ๋กํจ์์ธ ๊ฒฝ์ฐ๋ ์ ์ญ ์ต์๊ฐ์ผ๋ก ์๋ ด)
- ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ์ฌ์ฉํ ๋๋ ๋ฐ๋์ ๋ชจ๋ ํน์ฑ์ด ๊ฐ์ ์ค์ผ์ผ์ ๊ฐ๋๋ก ๋ง๋ค์ด์ผ ํ๋ค.(ex. StadardScaler) ๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ ดํ๋๋ฐ ํจ์ฌ ์ค๋๊ฑธ๋ฆฐ๋ค.
๋ฐฐ์น ๊ฒฝ์ฌ ํ๊ฐ๋ฒ
- ํธ๋ํจ์ : $\theta_j$ ๊ฐ ์กฐ๊ธ ๋ณ๊ฒฝ๋ ๋ ๋น์ฉ ํจ์๊ฐ ์ผ๋ง๋ ๋ฐ๋๋์ง ๊ณ์ฐ
- ๋น์ฉํจ์์ ํธ๋ํจ์ : $\frac{\partial}{\partial \theta_j} MSE(\theta) = \frac{2}{m} \sum_{i=1}^{m}(\theta^Tx^{i} - y^i)x_j^i$
- ์ ๊ณต์์ ๋งค ์คํ ์์ ํ๋ จ ๋ฐ์ดํฐ ์ ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ํ์ตํ๋ค. ๊ทธ๋ฐ ์ด์ ๋ก ํฐ ํ๋ จ ์ธํธ์์๋ ๋๋ฆฌ๋ค๋ ๋จ์ ์ด ์๋ค.
- ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ์คํ : $\theta^{next step} = \theta - \eta \nabla_{\theta}MSE(\theta)$
eta = 0.1 #ํ์ต๋ฅ
n_iterations = 1000
m = 100
theta = np.random.randn(2, 1) #๋ฌด์์ ์ด๊ธฐํ
for iteraion in range(n_interations):
gradients = 2/m * X_b.T.dot(X_b.dot(theta) - y)
theta = theta - eta * gradients
- ์ ์ ํ ํ์ต๋ฅ ์ด ์ค์ํ๋ค
ํ๋ฅ ์ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ
- ๋งค ์คํ ์์ ํ ๊ฐ์ ์ํ์ ๋ฌด์์๋ก ์ ํํ๊ณ ๊ทธ ํ๋์ ์ํ์ ๋ํ ๊ทธ๋ ๋์ธํธ๋ฅผ ๊ณ์ฐํ๋ค
- ๋ฐ๋ณต๋ง๋ค ํ๋์ ์ํ๋ง ์ฒ๋ฆฌํ๋ฉด ๋์ ์๊ณ ๋ฆฌ์ฆ ์๋๊ฐ ๋น ๋ฅด๋ค
- ๋ฐ๋ฉด, ํ๋ฅ ์ (๋ฌด์์)์ด๋ฏ๋ก ๋ฐฐ์น ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ๋นํด ๋ถ์์ ํ๋ค
- ๋ฌด์์์ฑ์ด ์ง์ญ ์ต์๊ฐ์ ํ์ถํ ์ ์๋๋ก ๋์์ค๋ค๋ ์ฅ์ ์ด ์๋ค.
- ์๊ณ ๋ฆฌ์ฆ์ ์ ์ญ ์ต์๊ฐ์ ๋ค๋ค๋ฅด์ง ๋ชปํ๋ค. ๋ฐ๋ผ์ ์ด๋ฐ์ ํ์ต๋ฅ ์ ํฌ๊ฒํ์ฌ ์ง์ญ ์ต์๊ฐ์์ ๋ฒ์ด๋๊ฒ ํ๊ณ ์ ์ฐจ ์ค์ฌ๊ฐ๋ฉฐ ์ ์ญ ์ต์๊ฐ์ ๋๋ฌํ๊ฒ ํ๋ค
n_epochs = 50
t0, t1 = 5, 50
#ํ์ต๋ฅ ์ ์ ์ฐจ ์ค์ฌ์ฃผ๋ ํจ์
def learning_schedule(t):
return t0 / (t + t1)
theta = np.random.randn(2, 1)
for epoch in range(n_epochs):
for i in range(m) # ๋งค ์ํ์ ๋ํ ๊ทธ๋ ๋์ธํธ ๊ณ์ฐ ํ ํ๋ผ๋ฏธํฐ ์
๋ฐ์ดํธ
random_index = np.random.randint(m)
xi = X_b[random_index:random_index+1]
yi = y[random_index:random_index+1]
gradients = 2 * xi.T.dot(xi.dot(theta) - yi) # ํ๋์ ์ํ์ ๋ํ ๊ทธ๋ ์ด๋์ธํธ ๊ณ์ฐ
eta = learning_schedule(epoch * m + i) # ํ์ต ์ค์ผ์ฅด์ ์ด์ฉํ ํ์ต๋ฅ ์กฐ์
theta = theta - eta * gradients
- ๋ฐฐ์น ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ ์ ์ฒด ์ธํธ์ ๋ํด 1000๋ฒ ๋ฐ๋ณตํ๋ ๋์ ์ ์ฝ๋(ํ๋ฅ ์ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ)์ ํ๋ จ ์ธํธ์์ 50๋ฒ๋ง ๋ฐ๋ณตํ๊ณ ๋ ์ฑ๋ฅ์ด ์ข๋ค
from sklearn.linear_model import SGDRegressor
sgd_reg = SGDRegressor(max_iter = 1000, tol = 1e-3, penalty = None, eta0 = 0.1)
sgd_reg.fit(X, y.ravel())
๋ฏธ๋๋ฐฐ์น ๊ฒฝ์ฌ ํ๊ฐ๋ฒ
- ๋ฏธ๋๋ฐฐ์น๋ผ ๋ถ๋ฆฌ๋ ์์์ ์์ ์ํ ์ธํธ์ ๋ํด Gradient๋ฅผ ๊ณ์ฐํ๋ค.
- SGD๋ณด๋ค ๋ ๋ถ๊ท์น์ ์ด๋ค, ํ์ง๋ง SGD๋ณด๋ค ์ง์ญ ์ต์๊ฐ์์ ๋ฒ์ด๋๋ ๊ฒ์ ์ด๋ ค์ธ ์ ์๋ค
[4.3] ๋คํญ ํ๊ท
- ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ๊ฐ ๋จ์ํ ์ง์ ๋ณด๋ค ๋ณต์กํ ํํ์ผ ๋ ์ฌ์ฉํ๋ค
- ๊ฐ ํน์ฑ์ ๊ฑฐ๋ญ์ ๊ณฑ์ ์๋ก์ด ํน์ฑ์ผ๋ก ์ถ๊ฐํ๊ณ , ์ด ํ์ฅ๋ ํน์ฑ์ ํฌํจํ ๋ฐ์ดํฐ์ ์์ ์ ํ ๋ชจ๋ธ์ ํ๋ จ์ํค๋ ๊ฒ
#๋น์ ํ ๋ฐ์ดํฐ
m = 100
X = 6 * np.random.rand(m, 1) -3
y = 0.5 * X**2 + X + 2 + np.random.randn(m, 1)
- ์ ์ฝ๋์ ์ ํ ๋ชจ๋ธ์ ์ ์ฉํ๋ค๋ฉด ์ ํฉํ์ง ์์ ๊ฒ์ด๋ค ๋ฐ๋ผ์ sklearn์ PolynomialFeatures๋ฅผ ์ฌ์ฉํด ํ๋ จ ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๋ค.
from sklearn.preprocessing import PolynomialFeatures
poly_features = PolynomialFeatures(degree = 2, include_bias = False)
X_poly = poly_features.fit_transform(X)
- X ๋ฐ์ดํฐ์ ์ ์ ๊ณฑ๋ ๊ฐ์ด ํฌํจ๋ ๊ฐ์ X_poly์ ์ ์ฉํ๋ค.
lin_reg = LinearRegression()
lin_reg.fit(X_poly, y)
- LinearRegression()์ ์ ์ฉ
[4.4] ํ์ต ๊ณก์
- ํ์ต ๊ณก์ ์ ํตํด ๋ชจ๋ธ์ด ๊ณผ๋์ ํฉ์ธ์ง ๊ณผ์์ ํฉ์ธ์ง ํ๋จํ๋ค.
- ๊ณผ์์ ํฉ์ ๊ฒฝ์ฐ ํ๋ จ ์ํ์ ๋ ์ถ๊ฐํด๋ ์๋ฏธ๊ฐ ์๋ค. ๋ ๋ณต์กํ ๋ชจ๋ธ์ ์ฌ์ฉํ๊ฑฐ๋ ๋ ๋์ ํน์ฑ์ ์ฌ์ฉํด์ผํ๋ค
- ๊ณผ๋์ ํฉ์ ๊ฒฝ์ฐ ๊ฒ์ฆ ์ค์ฐจ๊ฐ ํ๋ จ ์ค์ฐจ์ ๊ทผ์ ํ ๋๊น์ง ๋ ๋ง์ ํ๋ จ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด๋ค
- ํธํฅ / ๋ถ์ฐ ํธ๋ ์ด๋์คํ
- ํธํฅ : ํธํฅ์ด ํฐ ๋ชจ๋ธ์ ํ๋ จ ๋ฐ์ดํฐ์ ๊ณผ์์ ํฉ๋๊ธฐ ์ฝ๋ค. ์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ๊ฐ ์ค์ ๋ก๋ 2์ฐจ์ธ๋ฐ ์ ํ์ผ๋ก ๊ฐ์ ํ๋ ๊ฒฝ์ฐ
- ๋ถ์ฐ : ๋ถ์ฐ์ ํ๋ จ ๋ฐ์ดํฐ์ ์๋ ์์ ๋ณ๋์ ๋ชจ๋ธ์ด ๊ณผ๋ํ๊ฒ ๋ฏผ๊ฐํ๊ธฐ ๋๋ฌธ์ ๋ํ๋๋ค. ๊ณ ์ฐจ ๋คํญ ํ๊ท๋ชจ๋ธ ๊ฐ์ด ์์ ๋๊ฐ ๋์ ๋ชจ๋ธ์ ๊ฒฝ์ฐ ๋์ ๋ถ์ฐ์ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๊ณผ๋์ ํฉ์ด ๋๋ ๊ฒฝํฅ์ด ์๋ค.
- ๋ชจ๋ธ์ ๋ณต์ก๋๊ฐ ์ปค์ง๋ฉด ํต์์ ์ผ๋ก ๋ถ์ฐ์ด ๋์ด๋๊ณ ํธํฅ์ ์ค์ด๋ ๋ค. ๋ฐ๋๋ก ๋ชจ๋ธ์ ๋ณต์ก๋๊ฐ ์ค์ด๋ค๋ฉด ํธํฅ์ด ์ปค์ง๊ณ ๋ถ์ฐ์ด ์์์ง๋ค
[4.5] ๊ท์ ๊ฐ ์๋ ์ ํ ๋ชจ๋ธ
- ๊ณผ๋์ ํฉ์ ๊ฐ์์ํค๋ ์ข์ ๋ฐฉ๋ฒ์ ๋ชจ๋ธ์ ๊ท์ ํ๋ ๊ฒ์ด๋ค. ์ฆ, ๋ชจ๋ธ์ ์ ํํ๋ ๊ฒ
- ์ ํ ํ๊ท ๋ชจ๋ธ์์๋ ๋ณดํต ๋ชจ๋ธ์ ๊ฐ์ค์น๋ฅผ ์ ํํจ์ผ๋ก์จ ๊ท์ ๋ฅผ ๊ฐํ๋ค.
๋ฆฟ์ง ํ๊ท
- ๋ฆฟ์ง ํ๊ท๋ ๊ท์ ๊ฐ ์ถ๊ฐ๋ ์ ํ ํ๊ท ๋ฒ์ ์ด๋ค.
- ๊ท์ ํญ $\alpha \Sigma_{i=1}^{n} \theta_i^2$ ์ด ๋น์ฉ ํจ์์ ์ถ๊ฐ๋๋ค.
- $\alpha$๋ ๋ชจ๋ธ์ ์ผ๋ง๋ ๋ง์ด ๊ท์ ํ ์ง ์กฐ์ ํ๋ค.
- ํธํฅ $\theta_0$ ๋ ๊ท์ ๋์ง ์๋๋ค ๋ฐ๋ผ์ $i$๋ 1๋ถํฐ ์์ํ๋ค
from sklearn.linear_model import Ridge
ridge_reg = Ridge(alpha = 1, solver = "cholesky")
ridge_reg.fit(X, y)
ridge_reg.predict([[1.5]])
- ์๋ ์ฝ๋๋ SGD๋ฅผ ์ฌ์ฉํ ์ฝ๋์ด๋ค
sgd_reg = SGDRegresor(penalty = "l2") # penalty๋ ์ฌ์ฉํ ๊ท์ ๋ฅผ ๋ํ๋ธ๋ค sgd_reg.fit(X,y.ravel()) sgd_reg.predict([[1.5]])
๋ผ์ ํ๊ท
- ๋ผ์ ํ๊ท๋ ์ ํ ํ๊ท์ ๋ ๋ค๋ฅธ ๊ท์ ๋ฒ์ ์ด๋ค
- ๋ฆฟ์ง ํ๊ท์ฒ๋ผ ๋น์ฉ ํจ์์ ๊ท์ ํญ์ ๋ํ์ง๋ง ๊ฐ์ค์น ๋ฒกํฐ $l_1$ ๋ ธ๋ฆ์ ์ฌ์ฉํ๋ค
- $J(\theta) = MSE(\theta) + \alpha\Sigma_{i=1}^n \left\vert \theta_i \right\vert$
- ๋ผ์๋ฅผ ์ฌ์ฉํ ๋ ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ด ์ต์ ์ ๊ทผ์ฒ์์ ์ง๋ํ๋ ๊ฒ์ ๋ง์ผ๋ ค๋ฉด ํ๋ จํ๋ ๋์ ์ ์ง์ ์ผ๋ก ํ์ต๋ฅ ์ ๊ฐ์์์ผ์ผ ํ๋ค.
- ๋ผ์ vs ๋ฆฟ์ง ์ฐจ์ด์
- ๋ผ์๋ ๊ฐ์ค์น๋ค์ด 0์ด์ง ๋์ง๋ง, ๋ฆฟ์ง์ ๊ฐ์ค์น๋ค์ 0์ ๊ฐ๊น์์ง ๋ฟ 0์ด ๋์ง๋ ์๋๋ค.
- ํน์ฑ์ด ๋ง์๋ฐ ๊ทธ ์ค ์ผ๋ถ๋ถ๋ง ์ค์ํ๋ค๋ฉด ๋ผ์๊ฐ, ํน์ฑ์ ์ค์๋๊ฐ ์ ์ฒด์ ์ผ๋ก ๋น์ทํ๋ค๋ฉด ๋ฆฟ์ง๊ฐ ์ข ๋ ๊ด์ฐฎ์ ๋ชจ๋ธ์ด๋ผ ํ๋จํ๋ค.
from sklearn.linear_model import Lasso
lasso_reg = Lasso(alpha = 0.1)
lasso_reg.fit(X, y)
SGDRegressor(penalty = "") #๋ผ์ ๋์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค
์๋ผ์คํฑ๋ท
- ์๋ผ์คํฑ๋ท์ ๋ฆฟ์ง ํ๊ท์ ๋ผ์ ํ๊ท๋ฅผ ์ ์ถฉํ ๋ชจ๋ธ์ด๋ค
- $J(\theta) = MSE(\theta) + r\alpha\Sigma_{i=1}^n\left\vert \theta_i \right\vert + \frac{1-r}{2}\alpha\Sigma_{i=1}^n\theta_i^2$
- ์ผ๋ฐ์ ์ผ๋ก ๋ฆฟ์ง๊ฐ ๊ธฐ๋ณธ์ด ๋์ง๋ง ์ฐ์ด๋ ํน์ฑ์ด ๋ช ๊ฐ ๋ฟ์ด๋ผ๊ณ ์์ฌ๋๋ฉด ๋ผ์๋ ์๋ผ์คํฑ๋ท์ด ๋ซ๋ค
- ๊ทธ ์ด์ ๋ ๋ถํ์ํ ํน์ฑ์ ๊ฐ์ค์น๋ฅผ 0์ผ๋ก ๋ง๋ค์ด ์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค
- ํน์ฑ ์๊ฐ ํ๋ จ ์ํ ์๋ณด๋ค ๋ง๊ฑฐ๋ค ํน์ฑ ๋ช ๊ฐ๊ฐ ๊ฐํ๊ฒ ์ฐ๊ด๋์ด ์์ ๋๋ ๋ณดํต ๋ผ์๊ฐ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ฏ๋ก ๋ผ์๋ณด๋ค๋ ์๋ผ์คํฑ๋ท์ ์ ํธํ๋ค
from sklearn.linear_model import ElasticNet
elastic_net = ElasticNet(alpha = 0.1, l1_ratio = 0.5)
elastic_net.fit(X, y)
์กฐ๊ธฐ ์ข ๋ฃ
- ๊ฒ์ฆ ์๋ฌ๊ฐ ์ต์๊ฐ์ ๋๋ฌํ๋ฉด ๋ฐ๋ก ํ๋ จ์ ์ค์ง์ํค๋ ๊ฒ์ด๋ค
sgd_reg = SGDRegressor(max_iter=1, tol=-np.infty, warm_start=True,
penalty=None, learning_rate="constant", eta0=0.0005, random_state=42)
n_epochs = 500
train_errors, val_errors = [], [] # ํ๋ จ/๊ฒ์ฆ ๋ชจ๋ธ ์ฑ๋ฅ ๊ธฐ๋ก ์ฅ์น
for epoch in range(n_epochs):
sgd_reg.fit(X_train_poly_scaled, y_train) # warm_start=True ์ด๊ธฐ์ ํ์ต๊ฒฐ๊ณผ๋ฅผ ์ด์ด๊ฐ.
y_train_predict = sgd_reg.predict(X_train_poly_scaled)
y_val_predict = sgd_reg.predict(X_val_poly_scaled)
train_errors.append(mean_squared_error(y_train, y_train_predict)) # ํ๋ จ/๊ฒ์ฆ๋ชจ๋ธ ์ฑ๋ฅ ๊ธฐ๋ก
val_errors.append(mean_squared_error(y_val, y_val_predict))
best_epoch = np.argmin(val_errors) # ์ต๊ณ ์ฑ๋ฅ์ ๋ชจ๋ธ ๊ธฐ์ตํด๋๊ธฐ
best_val_rmse = np.sqrt(val_errors[best_epoch])
[4.6] ๋ก์ง์คํฑ ํ๊ท
- ์ํ์ด ํน์ ํด๋์ค์ ์ํ ํ๋ฅ ์ ์ถ์ ํ๋๋ฐ ์ฌ์ฉ ๋๋ค.
- ์ด๋ฉ์ผ์ด ์คํธ์ผ ํ๋ฅ ์ ๋ช์ธ๊ฐ?
- ํ๋ฅ ์ด 50%๊ฐ ๋์ผ๋ฉด ํด๋น ํด๋์ค์ ์ํ๋ค๊ณ ์์ธกํ๋ค. ์ด๋ฅผ ์ด์ง ๋ถ๋ฅ๊ธฐ๋ผ๊ณ ํ๋ค
- ์ ํ ํ๊ท์ฒ๋ผ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ์ง ์๊ณ ๊ฒฐ๊ด๊ฐ์ Logistic์ ์ถ๋ ฅํ๋ค
- ๋ก์ง์คํฑ์ 0๊ณผ 1 ์ฌ์ด์ ๊ฐ์ ์ถ๋ ฅํ๋ ์๊ทธ๋ชจ์ด๋ ํจ์์ด๋ค
- $\sigma(t) = \frac{1}{1+exp(-t)}$
- ํ๋ จ ๋ฐฉ๋ฒ : ์์ฑ ์ํ(y=1)์ ๋ํด์๋ ๋์ ํ๋ฅ ์ ์ถ์ ํ๊ณ ์์ฑ ์ํ(y=0)์ ๋ํด์๋ ๋ฎ์ ํ๋ฅ ์ ์ถ์ ํ๋ ๋ชจ๋ธ์ ํ๋ผ๋ฏธํฐ ๋ฒกํฐ๋ฅผ ์ฐพ๋ ๊ฒ์ด๋ค.
- ํ๋์ ํ๋ จ ์ํ์ ๋ํ ๋น์ฉ ํจ์
- y = 1์ผ๋ ) $-log(p)$
- y = 0์ผ๋ ) $-log(1-p)$
- ๋น์ฉํจ์๋ t๊ฐ 0์ ๊ฐ๊น์์ง๋ฉด $-log(p)$๊ฐ ๋งค์ฐ ์ปค์ง๋ฏ๋ก ํ๋นํ๋ค
- ๋น์ฉ ํจ์ : $J(\theta) = -\frac{1}{m}\Sigma_{i=1}^m[y^{i}log(p^{i})+(1-y^{i})log(1-p^{i})]$
- ์ด ๋น์ฉ ํจ์๋ ๋ณผ๋ก ํจ์(Convex) ์ด๋ฏ๋ก ๊ฒฝ์ฌ ํ๊ฐ๋ฒ์ด ์ ์ญ ์ต์๊ฐ์ ์ฐพ๋ ๊ฒ์ ๋ณด์ฅํ๋ค.
์ํํธ๋งฅ์ค ํ๊ท
- ์ฌ๋ฌ ๊ฐ์ ์ด์ง ๋ถ๋ฅ๊ธฐ๋ฅผ ํ๋ จ์์ผ ์ฐ๊ฒฐํ์ง ์๊ณ ์ง์ ๋ค์ค ํด๋์ค๋ฅผ ์ง์ํ๋๋ก ์ผ๋ฐํ ๋ ์ ์๋ค. ์ด๋ฅผ ์ํํธ๋งฅ์ค ํ๊ท(๋คํญ ๋ก์ง์คํฑ ํ๊ท)๋ผ๊ณ ํ๋ค.
- ์ํ x๊ฐ ์ฃผ์ด์ง๋ฉด ๋จผ์ ์ํํธ๋งฅ์ค ํ๊ท ๋ชจ๋ธ์ด ๊ฐ ํด๋์ค k์ ๋ํ ์ ์๋ฅผ ๊ณ์ฐํ๊ณ , ๊ทธ ์ ์์ ์ํํธ๋งฅ์ค ํจ์๋ฅผ ์ ์ฉํ์ฌ ๊ฐ ํด๋์ค์ ํ๋ฅ ์ ์ถ์ ํ๋ค.
- ํด๋์ค k์ ๋ํ ์ํํธ๋งฅ์ค ์ ์ : $S_k(x) = (\theta^{k})^T X$
- ์ํํธ๋งฅ์ค ํจ์
- K๋ ํด๋์ค ์, $s(x)$๋ ์ํ x์ ๋ํ ๊ฐ ํด๋์ค์ ์ ์๋ฅผ ๋ด์ ๋ฒกํฐ,
- $\sigma(s(x))_k$๋ ์ํ x์ ๋ํ ๊ฐ ํด๋์ค์ ์ ์๊ฐ ์ฃผ์ด์ก์ ๋ ์ด ์ํ์ด ํด๋์ค k์ ์ํ ์ถ์ ํ๋ฅ
- ์ํํธ๋งฅ์ค ํ๊ท ๋ถ๋ฅ๊ธฐ์ ์์ธก : $y = argmax(\sigma(s(x))_k)$ / $argmax$๋ํจ์๋ฅผ ์ต๋ํํ๋ ๋ณ์์ ๊ฐ์ ๋ฐํํ๋ค.
- ์ํํธ๋งฅ์ค๋ ํ ๋ฒ์ ํ๋์ ํด๋์ค๋ง ์์ธกํ๋ค. ๋ค์ค ํด๋์ค o ๋ค์ค ์ถ๋ ฅ x
- ํ๋ จ ๋ฐฉ๋ฒ : ๋ชจ๋ธ์ด ํ๊ฒ ํด๋์ค์ ๋ํด์๋ ๋์ ํ๋ฅ ์ ์ถ์ ํ๋๋ก ๋ง๋๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ค
- ํฌ๋ก์ค ์ํธ๋กํผ ๋น์ฉ ํจ์๋ฅผ ์ต์ํ ํ๋ ๊ฒ์ด ํ๊ฒ ํด๋์ค์ ๋ํด ๋ฎ์ ํ๋ฅ ์ ์์ธกํ๋ ๋ชจ๋ธ์ ์ต์ ํ๋ฏ๋ก ๋ชฉ์ ์ ๋ถํฉํ๋ค
- ํฌ๋ก์ค ์ํธ๋กํผ : $J(\theta) = -\frac{1}{m}\Sigma_{i=1}^m\Sigma_{k=1}^K(y_k^{i}log(p_k^{i}))$
- $y_k^{i}$๋ i๋ฒ์งธ ์ํ์ด ํด๋์ค $k$์ ์ํ ํ๊ฒ ํ๋ฅ
X = iris["data"][:, (2,3)]
y = iris["target"]
softmax_reg = LogisticRegression(multi_class = "multinomial", solver = "lbfgs", C = 10)
softmax_reg.fit(X, y)
'AI > Machine Learning' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํธ์ฆ์จ ๋จธ์ ๋ฌ๋ 2ํ] Chapter 10 ์์ฝ (0) | 2022.12.08 |
---|---|
[ํธ์ฆ์จ ๋จธ์ ๋ฌ๋ 2ํ] Chapter 8 ์์ฝ (0) | 2022.12.03 |
[ํธ์ฆ์จ ๋จธ์ ๋ฌ๋ 2ํ] Chapter 5 ์์ฝ (0) | 2022.11.29 |
[ํธ์ฆ์จ ๋จธ์ ๋ฌ๋ 2ํ] Chapter 3 ์์ฝ (0) | 2022.10.26 |
[ํธ์ฆ์จ ๋จธ์ ๋ฌ๋ 2ํ] Chapter 3์ฅ ์ฐ์ต๋ฌธ์ ํ์ด (0) | 2022.10.23 |