이전 포스트까지는 linear regression으로 데이터에 가장 잘 맞는 직선을 찾았다.
하지만 직선이 데이터를 설명할 수 없다면 곡선을 찾아야 할 것이다.
이때 Polynomial regression을 사용한다.
Overfitting 이해
먼저 4차 polynomial function을 정의하고 그래프로 표현해보겠다.
from matplotlib import pyplot
from autograd import grad
from autograd import numpy
numpy.random.seed(0) # fix seed for reproducibility
x = numpy.linspace(-3, 3, 20)
y = x**4 + x**3 - 4*x**2 + 8*numpy.random.normal(size=len(x))
pyplot.scatter(x, y);
이 데이터는 곡선의 형태이기 때문에 직선으로 표현하는 데에 무리가 있다.
이 데이터를 맞추기 위해서는 2차이상의 함수가 필요할 것이다.
그래프로 확인하기 위해 패키지를 하나 가져오겠다.
from urllib.request import urlretrieve
URL = 'https://raw.githubusercontent.com/engineersCode/EngComp6_deeplearning/master/scripts/plot_helpers.py'
urlretrieve(URL, 'plot_helpers.py')
from plot_helpers import interact_polyreg
max_degree = 15
interact_polyreg(max_degree, x, y)
이렇게 그래프를 확인해보면
차수가 1일 때는 MAE가 매우 높고 데이터를 잘 맞추지 못한 것을 확인할 수 있다.
2차를 보면 어느 정도 잘 맞춘 것을 볼 수 있고 MAE가 절반 가까이 줄어든 것을 확인할 수 있다.
양 끝이 올라가는 형태이기 때문에 짝수차 함수만 보겠다.
데이터를 잘 설명하는 곡선이 그려졌다.
이 정도에서 끝나는 것이 적당하다고 볼 수 있다.
앞에서 데이터를 뽑아낸 것도 4차 함수였다.
이 이상으로 차수를 늘리는 것이 overfitting이다.
15차까지 늘려보겠다.
거의 모든 데이터를 맞추는 형태이다.
하지만 이것은 training 데이터이기 때문에 실제 test 데이터가 들어오면 예측률이 떨어질 것이다.
위 그래프에서 약 2.9 근처에 데이터가 들어오면 매우 큰 값을 예측하게 되기 때문에
큰 오류 값을 나타내는 것을 예로 들 수 있다.
Regularization
이를 보정하기 위해 cost function에 아래와 같은 제한 조건을 추가한다.
$$\lambda\sum_{j=1}^dw_j^2$$
이를 MSE를 사용한 cost function에 적용하면 다음과 같다.
$$L(\mathbf{w}) = \frac{1}{N} \lVert \mathbf{y} - \mathbf{Xw} \rVert^2 + \lambda \sum_{j=1}^d w_j^2$$
이 cost function은 계수가 커지면 두번째 항이 커지게 돼서 cost 값이 늘어나기 때문에
계수들이 커지는 것을 방지한다.
$\lamda$값이 커질 수록 계수들을 더 작게 만든다.
패키지를 통해 regularization 유무에 따른 차이를 확인해 보겠다.
interact_polyreg(max_degree, x, y, regularized=True)
위는 10차로 늘렸을때의 그래프다. 차수가 커질수록 regularization의 중요성이 커지는 것을 볼 수 있다.
'Studying > Machine Learning' 카테고리의 다른 글
[머신러닝] K-Means Clustering - 물고기 데이터셋 (0) | 2022.07.18 |
---|---|
[머신러닝] K-Means Clustering 정리 (0) | 2022.07.15 |
[머신러닝] Logistic Regression - 타이타닉 탑승자 사망여부 예측 (0) | 2022.07.11 |
[머신러닝] Logistic Regression (0) | 2022.07.07 |
[머신러닝] Multiple Linear Regression - 연비(MPG) 예측 (0) | 2022.07.07 |
댓글