들어가며
머신러닝 모델이 데이터에 과대적합되었다면 이를 해결하기 위해 우리는 규제를 해야할 것이다
다항 회귀 모델을 규제하는 간단한 방법은 차수를 줄여 모델을 간단히 만드는 것이다
선형 회귀 모델에서는 보통 모델의 가중치를 제한함으로써 규제를 가한다
이번 글에서는 모델의 가중치를 제한하는 방법으로 규제를 가하는
릿지 회귀, 라쏘 회귀, 엘라스틱넷 회귀에 대하여 알아볼 것이다
릿지 회귀
릿지 회귀는 선형 회귀의 비용함수에 규제항을 추가한 형태이다

규제항이 적용되면 가중치가 커질수록 비용함수가 증가하여
최적화 과정에서 가중치가 작은 값이 되도록 유도한다
이때 하이퍼파라미터 λ는 모델을 얼마나 많이 규제할지의 정도를 나타낸다
λ=0이라면 규제가 없어지므로 릿지회귀는 선형회귀와 같아지게된다
릿지회귀의 비용함수는 아래와 같다

추가로 릿지 회귀의 규제항은 L2노름을 사용한다
L2노름은 아래와 같이 표현된다

루트가 씌어진 형태이므로 비용함수에 적용시에는 제곱 형태로 나타낸다


사이킷런에서 릿지회귀는 정규방정식에서도 적용될 수 있고
확률적 경사 하강법(SGD)에서도 적용이 가능하다

릿지 회귀를 계산하기 위해 정규방정식을 사용할 수 있다
기본 정규방정식에 규제항인 λI만 더해진 것이다
사이킷런에서 정규방정식을 사용하여 릿지 회귀를 적용한 것이다
from sklearn.linear_model import Ridge
ridge_reg = Ridge(alpha=0.1)
다음은 SGD에 적용했을 때이다
sgd_reg = SGDRegressor(penalty="l2", alpha=0.1 / m, tol=None,
max_iter=1000, eta0=0.01, random_state=42)
sgd_reg.fit(X, y.ravel()) # fit()은 1D 타겟을 기대하므로 y.ravel()을 사용합니다.
penalty 매개변수는 사용할 규제를 지정한다
"l2"로 지정하면 SGD가 비용함수에 l2노름 제곱에 alpha를 곱한 규제항이 추가된다
라쏘 회귀
라쏘 회귀는 릿지 회귀처럼 비용함수에 규제항을 추가한 형태이지만
l2노름 대신 l1노름을 사용한다는 것이 차이점이다
l1노름은 각각의 값에 절댓값을 씌워 더해준다


라쏘 회귀의 비용함수는 위와 같은 형태이고
아래와 같이 표현 가능하다

라쏘 회귀의 중요한 특징은 덜 중요한 특성의 가중치를 제거하려고 한다는 것이다
최적화 과정에서 자동으로 덜 중요한 특성을 선택하고 희소모델을 만든다
즉 일부 가중치를 0으로 만든다
여기서 말하는 덜 중요한 특성이라는 것은 가중치가 바뀌었을 때 MSE의 변동이 적은 것을 말한다
MSE의 변동이 거의 없으면 규제항의 영향이 더 커져 가중치가 0으로 되는 것이다
라쏘회귀의 규제항은 가중치의 값이 0인 지점은 미분이 불가능하다
그래서 적용할 수 있는 것이 서브그레디언트 벡터이다

미분이 불가능한 지점에서 [-1, +1] 사이의 값으로 지정해주면 경사하강법을 적용하는 데에 문제가 없어진다
사이킷런에서 라쏘 회귀를 사용하여 SGD에 적용할 수 있다
from sklearn.linear_model import Lasso
lasso_reg = Lasso(alpha=0.1)
이런식으로 간단히 표현할 수 있고
sgd_reg = SGDRegressor(penalty="l1", alpha=0.1 / m, tol=None,
max_iter=1000, eta0=0.01, random_state=42)
위에서 릿지회귀를 SGD에 적용시킨 코드에서 penalty 매개변수 값을 "l2" 대신 "l1"으로 바꿔주기만 하면
라쏘회귀를 사용한 확률적 경사 하강법을 사용할 수 있다
참고로 라쏘회귀는 l1규제의 미분 불가능한 지점에 관한 특성때문에
정규방정식에는 적용시킬 수 없다
엘라스틱넷
엘라스틱넷 회귀는 릿지 회귀와 라쏘 회귀를 절충한 모델이라고 보면된다
규제항은 릿지 회귀와 라쏘 회귀의 규제항을 더한 것이며 혼합정도는 ρ을 사용해 조절한다

ρ=0이면 릿지 회귀와 같아지고
ρ=1이면 라쏘 회귀와 같아진다
사이킷런에서 엘라스틱넷을 사용할 수 있도록 함수를 제공한다
from sklearn.linear_model import ElasticNet
elastic_net = ElasticNet(alpha=0.1, l1_ratio=0.5)
l1_ratio 매개변수가 혼합정도 ρ를 나타낸다고 보면된다
마치며
이번 글에서는 선형 회귀 모델을 규제하는 방법들에 대하여 알아보았다
규제항이 더해진다는 개념 자체는 괜찮았지만
이게 최적화 과정에서 어떤 식으로 작용하고 가중치에 어떻게 영향을 미치는지 이해하는 과정에서
꽤나 애를 먹었고 특히 라쏘회귀에서 이해하는 데에 시간을 굉장히 많이 사용했다
오늘 배운 내용에서는 수학적 개념이 평소보다 상대적으로 많이 사용된 것도 이유가 되는 것 같다
머신러닝에 있어서 수학적 개념은 꼭 잡아놓고 있어야 한다는 것을 다시 한 번 느꼈다
'AI > Machine Learning' 카테고리의 다른 글
| [AI] 선형 서포트 벡터 머신(SVM) 분류 (0) | 2026.03.30 |
|---|---|
| [AI] 로지스틱 회귀(logistic regression) (0) | 2026.03.17 |
| [AI] 학습 곡선(Learning Curve) (0) | 2026.03.15 |
| [AI] 경사하강법(Gradient Descent) (1) | 2026.03.14 |
| [AI] 오차 행렬을 통한 오류 분석 (1) | 2026.03.02 |
