Chapter 4 모델훈련 -2

임동윤·2022년 10월 5일
0
post-thumbnail

다항회귀

  • 가지고 있는 데이터가 직선이 아닌 복잡한 형태일때 사용
  • 특성의 거듭제곱을 새로운 특성으로 추가하고, 확장된 특성을 포함한 데이터셋에 선형모델을 학습시키는 기법

실습

  • 2차 함수의 형태를 한 데이터 생성
import numpy as np
import numpy.random as rnd

np.random.seed(42)

m = 100
X = 6 * np.random.rand(m, 1) - 3
y = 0.5 * X**2 + X + 2 + np.random.randn(m, 1)
plt.plot(X, y, "b.")
plt.xlabel("$x_1$", fontsize=18)
plt.ylabel("$y$", rotation=0, fontsize=18)
plt.axis([-3, 3, 0, 10])
save_fig("quadratic_data_plot")
plt.show()

  • sklearnPolynomialFeatures을 이용하여 훈련데이터를 변환
from sklearn.preprocessing import PolynomialFeatures
poly_features = PolynomialFeatures(degree=2, include_bias=False)
X_poly = poly_features.fit_transform(X)
X_poly[0]
array([-0.75275929,  0.56664654])
  • 학습을 통해 파라미터를 도출
lin_reg = LinearRegression()
lin_reg.fit(X_poly, y)
lin_reg.intercept_, lin_reg.coef_
(array([1.78134581]), array([[0.93366893, 0.56456263]]))


학습곡선

  • 고차 다항회귀를 적용하면 보통의 선형 회귀에서보다 학습결과가 좋을것입니다.
  • 아래의 실험에서 보면 다항회귀 모델의 경우 심각하게 과대적합 되었으며, 선형 모델의 경우 과소적합 된 것을 알 수 있습니다.
  • 이때 얼마나 복잡한 모델을 사용할지, 그리고 모델이 데이터에 과대 적합 및 과소적합 되었는지 알기 위해 학습곡선을 이용합니다.

과소적합

  • 과소적합의 경우 학습데이터와 평가데이터 사이의 그래프 간격이 크지 않습니다.
  • 곡선이 어느 정도 평편해진 이후에는 학습이 더 진행되어도 평가 데이터에 대한 오차가 크게 나아지거나 나빠지지 않습니다.

과대적합

  • 과대적합의 경우 학습데이터와 평가데이터 사이의 그래프 간격이 큽니다.

규제가 있는 선형 모델

  • 과대 적합을 감소시키기 위한 방법이 모델을 제한하는 것입니다.
  • 다항회귀 모델의 경우 가장 간단하게 제한하는 것은 다항식의 차수를 감소시키는 것입니다.
  • 선형 회귀 모델의 경우 보통 모델의 가중치를 제한함으로써 규제를 가합니다.

릿지 회귀

  • 릿지 회귀는 규제가 추가된 선형회귀 버전입니다.
  • 규제항 αi=1nθi2\alpha\sum\limits_{i=1}^{n}{\theta_i}^2이 비용함수에 추가됩니다.
  • α\alpha를 이용하여 모델을 얼마나 규제할지 조절합니다.
  • 릿지회귀의 비용함수
    J(θ)=MSE(θ)+α12i=1nθi2J(\boldsymbol{\theta}) = \text{MSE}(\boldsymbol{\theta}) + \alpha \dfrac{1}{2}\sum\limits_{i=1}^{n}{\theta_i}^2

실습

  • sklearn을 이용하여 릿지회귀 모델 학습
from sklearn.linear_model import Ridge
ridge_reg = Ridge(alpha=1, solver="sag", random_state=42)
ridge_reg.fit(X, y)
ridge_reg.predict([[1.5]])
array([[1.5507201]])

라쏘 회귀

  • 라쏘 회귀는 선형 회귀의 또 다른 규제된 버전입니다.
  • 라쏘 회귀는 덜 중요한 특성의 가중치를 제거하려고 합니다.
  • 라쏘 회귀의 비용함수
    J(θ)=MSE(θ)+αi=1nθiJ(\boldsymbol{\theta}) = \text{MSE}(\boldsymbol{\theta}) + \alpha \sum\limits_{i=1}^{n}\left| \theta_i \right|

실습

  • sklearn을 이용하여 라쏘 회귀 모델 학습
from sklearn.linear_model import Lasso
lasso_reg = Lasso(alpha=0.1)
lasso_reg.fit(X, y)
lasso_reg.predict([[1.5]])
array([1.53788174])

라쏘 릿지 비교

엘라스틱넷

  • 엘라스틱넷은 릿지 회귀와 라소 회귀를 절충한 모델입니다.
  • 혼합 정도는 혼합비율 rr을 사용하여 조절합니다.
  • 엘라스틱넷 비용함수
    J(θ)=MSE(θ)+rαi=1nθi+1r2αi=1nθi2J(\boldsymbol{\theta}) = \text{MSE}(\boldsymbol{\theta}) + r \alpha \sum\limits_{i=1}^{n}\left| \theta_i \right| + \dfrac{1 - r}{2} \alpha \sum\limits_{i=1}^{n}{{\theta_i}^2}

실습

  • sklearn을 이용하여 엘레스틱넷 모델 학습
from sklearn.linear_model import ElasticNet
elastic_net = ElasticNet(alpha=0.1, l1_ratio=0.5, random_state=42)
elastic_net.fit(X, y)
elastic_net.predict([[1.5]])
array([1.54333232])

조기 종료

  • 조기종료는 모델을 규제하기 위한 다른 방법으로 검증에러가 최솟값에 도달하면 바로 훈련을 중지시키는 것입니다.


profile
AI Tensorflow Python

0개의 댓글