본문 바로가기

개발 공부/머신러닝

[Machine Learning] LinearRegression, Ridge, Lasso, ElasticNet | 규제와 alpha 이해하기

선형회귀에서는 각 Feature에 Weight를 곱해 Target을 예측한다.
하지만 학습 데이터에 지나치게 맞춰지면 새로운 데이터에서는 성능이 떨어질 수 있다.
이번에는 기본 LinearRegression과 Weight에 제약을 주는 Ridge, Lasso, ElasticNet의 차이를 정리해봤다.

⠀⠀⠀

1. 단순 선형회귀와 다중 선형회귀

Feature가 하나라면 단순 선형회귀로 표현할 수 있다.

y = wx + b

실제 데이터에서는 여러 Feature가 Target에 동시에 영향을 주는 경우가 많다.
이때는 다중 선형회귀로 확장할 수 있다.

y = w₁x₁ + w₂x₂ + ... + wₙxₙ + b

Feature가 늘어나면 각 Feature에 대응하는 Weight도 함께 늘어난다.
x₁에는 w₁, x₂에는 w₂처럼 각각의 Feature에 하나의 Weight가 연결된다.

⠀⠀⠀

2. Weight는 무엇을 의미할까?

선형모델에서는 각 Feature에 Weight가 곱해져 예측값에 반영된다.
Weight가 0이면 해당 Feature를 곱한 값도 0이 되므로 그 Feature는 예측에 반영되지 않는다.

같은 스케일의 Feature끼리 비교한다면 Weight의 절댓값이 클수록 해당 Feature의 변화가 예측값에 더 크게 반영된다고 볼 수 있다. 반대로 Weight가 0에 가까워질수록 예측값에 미치는 영향도 작아진다.

📌 Weight의 부호는 영향의 방향을 나타낸다.
+이면 Feature가 증가할 때 예측값이 증가하는 방향, -이면 감소하는 방향으로 작용한다.

⠀⠀⠀

3. 왜 Regularization이 필요할까?

LinearRegression은 학습 데이터의 오차를 줄이는 방향으로 각 Weight를 결정한다.
그런데 모델이 학습 데이터에 지나치게 맞춰지면 Train에서는 성능이 높지만 Test에서는 성능이 크게 떨어지는 Overfitting(과적합)이 나타날 수 있다.

Regularization(규제)은 기존 오차뿐 아니라 Weight의 크기에도 제약을 추가해 모델이 지나치게 복잡해지는 것을 억제하는 방법이다.

📌 Regularization의 목적은 Train 점수를 무조건 높이는 것이 아니라,
과적합을 줄여 새로운 데이터에서도 안정적으로 예측할 수 있도록 일반화 성능을 높이는 것이다.

⠀⠀⠀

4. L1과 L2 Regularization

Weight에 어떤 방식으로 패널티를 주는지에 따라 대표적으로 L1과 L2 규제로 나눌 수 있다.

구분 L1 Regularization L2 Regularization
대표 모델 Lasso Ridge
규제 방식 Weight 절댓값의 합에 패널티 Weight 제곱의 합에 패널티
Weight 특징 일부 계수가 정확히 0이 될 수 있음 계수를 작게 만들지만 일반적으로 0이 되지는 않음
특징 일부 Feature를 제외하는 효과 여러 Feature의 계수를 전체적으로 축소

⠀⠀⠀
L1
은 일부 Weight를 0으로 만들 수 있기 때문에 Feature selection과 비슷한 효과를 낼 수 있다.

L1 Regularization의 Weight 제약 방식


L2는 특정 Weight를 완전히 제거하기보다는 여러 Weight의 크기를 줄이는 방향으로 규제한다. ⠀

L2 Regularization의 Weight 제약 방식

⠀⠀⠀

5. LinearRegression - 규제가 없는 기본 선형회귀

from sklearn.linear_model import LinearRegression

lr = LinearRegression()
lr.fit(X_tr, y_tr)

pred = lr.predict(X_te)

`fit()`으로 Train 데이터를 학습한 뒤 `predict()`로 새로운 데이터의 값을 예측한다.
또한 Train score와 Test score를 비교하면 모델이 학습 데이터에만 지나치게 맞춰졌는지 확인하는 데 도움이 된다.

예제에서는 Train 점수가 0.95보다 높게 나타난 반면 Test 점수는 약 0.61 수준으로 차이가 크게 나타난다.
이처럼 Train 성능은 매우 높은데 Test 성능이 상대적으로 낮다면 과적합을 의심할 수 있다.

LinearRegression 모델 생성 및 학습
학습된 LinearRegression 모델의 회귀계수 및 절편 확인
LinearRegression의 Train/Test 성능 비교

⠀⠀⠀

6. Ridge - L2 Regularization

Ridge는 L2 규제를 적용한 선형회귀 모델이다.
Weight의 제곱에 패널티를 주어 계수의 크기가 지나치게 커지는 것을 억제한다.

from sklearn.linear_model import Ridge

ridge = Ridge().fit(X_tr, y_tr)

ridge10 = Ridge(alpha=10).fit(X_tr, y_tr)
print(ridge10.score(X_tr, y_tr), ridge10.score(X_te, y_te))

Ridge에서 `alpha`는 규제 강도를 조절하는 하이퍼파라미터이다.
alpha가 커질수록 규제가 강해져 Weight의 크기가 작아지는 경향이 있다.

alpha 의미
작음 규제가 약함 → LinearRegression에 가까워짐
큼 규제가 강함 → Weight를 더 작게 제한

규제가 너무 약하면 과적합을 충분히 줄이지 못할 수 있고,
반대로 너무 강하면 필요한 관계까지 제한해 Underfitting(과소적합)이 나타날 수 있다.
따라서 Train/Test 성능을 비교하면서 적절한 alpha를 찾는 것이 중요하다.

📌 alpha는 Learning Rate가 아니다.
Learning Rate는 파라미터 업데이트 크기를 조절하고, Ridge/Lasso의 alpha는 규제의 강도를 조절한다.

Ridge의 alpha 변화에 따른 Train/Test 성능 비교

alpha 값을 바꾸면 규제 강도가 달라지고, 그에 따라 Train/Test 성능도 함께 변한다.
예제에서는 alpha가 너무 작거나 너무 클 때보다 중간 수준의 alpha에서 Test 성능이 더 높게 나타나는 구간을 확인할 수 있다.

따라서 alpha는 단순히 크게 설정하는 것이 아니라, Train/Test 성능을 비교하면서 적절한 값을 찾는 것이 중요하다.

⠀⠀⠀

7. Ridge의 계수 그래프로 alpha 변화 확인하기

각 Feature의 `coef_`를 그래프로 비교하면 alpha가 Weight에 어떤 영향을 주는지 더 쉽게 확인할 수 있다.
규제가 없는 LinearRegression을 기준으로 Ridge의 alpha를 크게 할수록 여러 계수가 0에 가까운 방향으로 축소된다.

다만 Ridge는 Lasso와 달리 일반적으로 계수를 정확히 0으로 만들지는 않는다. 따라서 Feature 자체를 제거하기보다는 각 Feature의 영향이 지나치게 커지지 않도록 조절하는 방식에 가깝다.

LinearRegression과 Ridge의 alpha별 계수 비교

규제가 없는 LinearRegression과 비교하면 Ridge의 alpha가 커질수록 각 Feature의 계수 크기가 0에 가까워지는 것을 확인할 수 있다.
즉, alpha가 커질수록 규제가 강해지면서 Weight의 크기를 더 강하게 제한한다.

다만 Ridge는 Lasso와 달리 Weight를 작게 만들 뿐, 일반적으로 정확히 0으로 만들지는 않는다.

⠀⠀⠀

8. Lasso - L1 Regularization

Lasso는 L1 규제를 사용하는 선형회귀 모델이다.
L1 규제의 특징은 일부 Weight를 정확히 0으로 만들 수 있다는 점이다.

from sklearn.linear_model import Lasso

lasso = Lasso().fit(X_tr, y_tr)
print(np.sum(lasso.coef_ != 0))

lass001 = Lasso(alpha=0.01, max_iter=100000).fit(X_tr, y_tr)

`np.sum(lasso.coef_ != 0)`은 Lasso 학습 후 계수가 0이 아닌 Feature가 몇 개인지 확인하는 코드이다.
계수가 0이 된 Feature는 예측식에서 사실상 제외되기 때문에 Lasso는 Feature selection 효과를 가질 수 있다.

Lasso 역시 alpha가 커질수록 규제가 강해지며 더 많은 계수가 0이 될 수 있다.
반대로 alpha를 너무 작게 하면 규제 효과가 약해진다.

기본 Lasso에서는 104개의 Feature 중 4개만 사용했지만, alpha=0.01로 규제를 약하게 설정하자 33개의 Feature를 사용하는 것으로 증가했다.
즉, Lasso는 alpha 값에 따라 일부 Weight를 0으로 만들 수 있으며, alpha가 작아질수록 규제가 약해져 더 많은 Feature가 예측에 사용될 수 있다.

⠀⠀⠀

9. ElasticNet - L1과 L2를 함께 사용

ElasticNet은 L1과 L2 규제를 함께 사용하는 모델이다.
전체 규제 강도는 `alpha`, L1과 L2의 비율은 `l1_ratio`로 조절한다.

from sklearn.linear_model import ElasticNet

elnet = ElasticNet(
alpha=0.01,
l1_ratio=0.8,
random_state=42
).fit(X_tr, y_tr)

파라미터 의미
alpha 전체 규제 강도
l1_ratio = 0 L2 규제만 사용
l1_ratio = 1 L1 규제만 사용
0 < l1_ratio < 1 L1 + L2 혼합

예를 들어 l1_ratio=0.8이면 L1의 비중 80%, L2 규제 비중이 20%인 형태로 규제를 혼합한다.
예제에서는 l1_ratio를 0.2, 0.5, 0.8로 바꾸거나 alpha를 0.001, 0.01, 0.1로 바꾸면서 성능 변화를 비교한다.

ElasticNet의 l1_ratio 변화에 따른 성능 비교
ElasticNet의 alpha 변화에 따른 성능 비교
ElasticNet의 l1_ratio별 Train/Test 성능 비교
ElasticNet의 alpha별 Train/Test 성능 비교

⠀⠀⠀

10. LinearRegression / Ridge / Lasso / ElasticNet 정리

모델 규제 특징
LinearRegression 없음 기본 선형회귀
Ridge L2 Weight를 전체적으로 작게 조절
Lasso L1 일부 Weight가 0이 될 수 있음
ElasticNet L1 + L2 두 규제를 함께 사용

규제가 너무 약하면 과적합을 충분히 억제하지 못할 수 있고, 너무 강하면 모델이 데이터의 관계를 충분히 학습하지 못할 수 있다.
따라서 단순히 Train 점수가 높은 모델을 선택하는 것이 아니라, Test 또는 Validation 데이터에서도 안정적인 성능을 보이는 규제 방법과 alpha 값을 선택하는 것이 중요하다.



반응형