정규화를 통한 과적합 방지: Ridge Regression의 예

설명



다항식 곡선 피팅에서 더 많은 예제를 추가하는 것이 오버피팅을 방지할 수 있는 가능한 방법 중 하나라고 논의되었습니다. 위 그림에서 발생하는 현상은 교육(낮은) 오류와 검증(높은) 오류 사이의 간격입니다.

과대적합을 제어하는 ​​데 사용되는 또 다른 접근 방식은 정규화입니다. 정규화는 오차 함수에 페널티 항을 추가하여 계수가 큰 값에 도달하지 못하도록 하는 것과 패턴 인식 및 기계 학습 책에서 Bishop을 소개하는 방법을 포함합니다.

이 게시물은 선형 회귀 대신 릿지 회귀로 알려진 정규화를 통해 다항 곡선 피팅 분석을 계속합니다.

정규화



이전 분석에서 정규화를 적용하기 위해서는 정규화 매개변수 λ를 추가하여 SSE(Sum-of-Squares Error) 함수를 수정하여 아래 수식과 같이 수정해야 합니다.



SSE=12∑n=1N(ypred−y)2+λ2∣w∣2
SSE =\frac{1}{2}\sum_{n=1}^{N}\left ( y_{pred}-y\right )^{2}+\frac{\lambda}{2}\left| 승\오른쪽|^{2}
SSE=21 n=1∑N (ypred −y)2+2λ ∣w∣2

여기서 ||w||²는 w.T * w와 동일하며 매개변수 또는 계수 λ는 SSE 용어와 비교하여 정규화 용어의 상대적 중요성을 수행합니다.

이전과 마찬가지로 경사 하강법과 같은 일부 최적화 알고리즘을 사용하는 대신 아래와 같이 계수 w를 얻기 위해 적응된 정규 방정식을 사용합니다.

W=(XTX+λI)-1XTy
W=\left ( X^{T}X +\lambda I\right )^{-1}X^{T}y
W=(XTX+λI)-1XTy

여기서 λ는 정규화 매개변수이고 I는 크기 M + 1의 항등 행렬이고 M은 다항식의 차수입니다. 정규 방정식을 통해 얻은 계수는 다음 함수로 제공됩니다.

def normal_equation_ridge(x, y, M, L):

  # Normal equation: w = ((x'*x)^-1 + L*I) *x'*y

  I = np.identity(M+1)

  xT = x.T
  w = np.dot(np.dot(np.linalg.pinv(np.dot(xT, x) + L*I), xT), y)

  return w


정규화 매개변수 선택



정규화를 예시하기 위해 훈련 및 검증 세트에서 각각 0.0173 및 6.1048의 RMSE(Root-Mean Square Error)를 얻은 M = 9의 과적합 모델을 사용했습니다. -40에서 0까지 범위의 정규화 매개변수 λ 값을 조사했지만 더 잘 설명하기 위해 값을 -40 ≤ ln(λ) ≤ 0 사이의 자연 로그로 표시합니다. 여기서 값 λ = exp(L) 는 위의 함수에서 입력되고 L은 범위 내의 값입니다. 검증 세트의 RMSE는 매개변수 λ를 선택하는 데 사용됩니다. 아래 그림은 매개변수 λ를 선택하기 위해 수행된 분석을 보여줍니다.



값 ln(λ) = -40의 경우 위 그림에서 RMSE는 대략 정규화를 적용하지 않은 값(6.1042)입니다. . 발견된 최상의 매개변수(빨간색 파선)는 ln(λ) = -11.43(λ = exp(-11.43) = 1.0880e-5)이며, 검증 세트의 RMSE의 0.1218에 도달하는 반면 훈련 세트는 0.0637을 얻었습니다.

아래 표는 ln(λ) = -∞ 및 ln(λ) = -11.43에 대한 계수 값을 비교합니다. ln(λ) = -∞는 정규화가 없는 모델에 해당하고 ln(λ) = -11.43은 정규화가 있는 가장 작은 검증 오류가 있는 모델에 해당합니다. ln(λ) = -∞의 계수가 큰 반면 ln(λ) = -11.43 값은 페널티 항의 추가로 인해 더 작다는 것을 알 수 있습니다.



정규화를 사용한 다항식 차수



다항 곡선 피팅의 오류 분석은 다항식의 차수에 따라 훈련 및 검증 세트에서 수행되지만 이제 정규화됩니다.

아래 그림은 다항식의 차수에 따른 훈련 및 검증 RMSE를 나타낸 것으로, 분석된 각 차수(M=[0, 1, 3, 9])에서 정규화 사용으로 인한 과적합 방지에 주목했습니다.




전체 코드는 GithubColab에서 사용할 수 있습니다. 게시물이 도움이 된다면 블로그를 팔로우하세요.

나를 팔로우하고 Github .

좋은 웹페이지 즐겨찾기