본문 바로가기
ML & DL/혼자 공부하는 머신러닝+딥러닝

규제(Regularization)

by Glory_Choi 2022. 7. 29.
반응형

규제란?

규제는 머신러닝 모델이 훈련 세트를 너무 과도하게 학습하지 못하도록 훼방하는 것을 말합니다. 즉 모델이 훈련 세트에 과대 적합하지 않도록 만드는것이라고 생각하지면 됩니다. 선형 회귀 모델의 경우 특성에 곱해지는 계수(또는 기울기)의 크기를 작게 만드는 일입니다.

특성의 스케일이 정규화되지 않으면 여기에 곱해지는 계수 값도 차이가 나게 됩니다. 일반적으로 선형 회귀 모델에 규제를 적용할 때 계수 값의 크기가 서로 많이 다르면 공정하게 제어되지 않을 겁니다. 그렇다면 규제를 적용하기 전에 먼저 정규화를 해야됩니다.

특성이 55개인 데이터를 사용해 선형 회귀 모델을 훈련하겠습니다.

정규화를 위해서 표준편차를 구합니다. 이때 사용한 클래스는 사이킷런에서 제공하는 StandardScaler 클래스 입니다.

이제 표준점수로 변환한 train_scaled와 test_scaled가 준비되었습니다.

 

선형 회귀 모델에 규제를 추가한 모델을 릿지(ridge)와 라쏘(lasso)라고 부릅니다.

두 모델은 규제를 가하는 방법이 다릅니다.

릿지는 계수를 제곱한 값을 기준으로 규제를 적용하고, 라쏘는 계수의 절대값을 기준으로 규제를 적용합니다. 일반적으로 릿지를 조금 더 선호합니다.

 

릿지 회귀

릿지와 라쏘 모두 sklearn.linear_model 패키지 안에 있습니다. 사이킷런 모델을 사용할 때 편리한 점은 훈련하고 사용하는 방법이 항상 같다는 것입니다. 모델 객체를 만들고 fit() 메서드에서 훈련한 다음 score() 메서드로 평가합니다.

\

선형 회귀에서는 거의 완벽에 가까웠던 점수가 조금 낮아졌습니다.  테스트 세트에 대한 점수를 확인하겠습니다.

테스트 세트 점수가 정상으로 돌아왔습니다. 확실히 많은 특성을 사용했음에도 불구하고 훈련세트에 너무 과대적합되지 않아 테스트 세트에서도 좋은 성능을 내고 있습니다.

 

릿지와 라쏘 모델을 사용할 때 규제의 양을 임의로 조절할 수 있습니다. 모델 객체를 만들 때 alpha 매개변수로 규제의 강도를 조절합니다. alpha 값이 크면 규제 강도가 세지므로 계수 값을 더 줄이고 조금더 과소적합되도록 유도합니다. alpha값이 작으면 계수를 줄이는 역할이 줄어들고 선형 회귀 모델과 유사해지므로 과대적합될 가능성이 큽니다.

 

적절한 alpha 값을 찾는 한 가지 방법은 alpha 값에 대한 R스퀘어 값의 그래프를 그려 보는 것입니다. 훈련 세트와 테스트 세트의 점수가 가장 가까운 지점이 최적의 alpha 값이 됩니다.

alpha 값을 0.001부터 10배씩 늘렸기 때문에 그래프 왼쪽이 너무 촘촘해져 alpha_list에 있는 6개의 값을 동일한 간격으로 나타내기 위해 로그 함수로 바꾸어 지수로 표현하겠습니다.

\

두 그래프가 가장 가깝고 test 세트의 점수가 가장 높은 alpha값은 -1, 즉 10의 -1승 0.1입니다. alpha 값을 0.1로 하여 최종 모델을 훈련하겠습니다.

이 모델은 훈련 세트와 테스트 세트의 점수가 비슷하게 모두 높고 과대적합과 과소적합 사이에서 균형을 맞추고 있습니다.

라쏘 모델을 훈련하는 것은 릿지와 매우 비슷합니다 Ridge 클래스를 Lasso 클래스로 바꾸는 것이 전부입니다.

반응형