이론

[알고리즘] 라쏘 회귀 - Lasso Regression 개념 정리

weweGH 2026. 7. 23. 12:27
반응형

라쏘 회귀 개념 정리
라쏘 회귀 개념 정리


라쏘 회귀 - Lasso Regression 개념 정리


들어가며


라쏘 회귀(Lasso Regression)는 선형 회귀에 규제(Regularization)를 추가한 알고리즘입니다. 규제란, 모델이 학습 데이터에 지나치게 맞춰지는 과적합(Overfitting)을 방지하기 위해 손실 함수에 패널티 항을 추가하는 기법입니다.

라쏘 회귀의 가장 큰 특징은 일부 특성의 계수를 정확히 0으로 만든다는 점입니다. 즉, 예측에 불필요한 변수를 자동으로 제거하는 변수 선택(Feature Selection) 기능을 내장하고 있습니다.

예를 들어, 집값을 예측하는 모델에 '방 개수', '위치', '건축 연도', '반려동물 허용 여부' 등 수십 개의 특성이 있다고 가정하겠습니다. 라쏘 회귀는 이 중 집값에 실질적인 영향을 미치지 않는 특성의 계수를 0으로 만들어, 모델을 단순하고 해석하기 쉽게 정리합니다.

이 글에서는 라쏘 회귀의 개념, 수식, 그리고 파이썬 구현 방법을 설명합니다.


  • 규제란? - 과적합과 규제의 관계
  • 라쏘 회귀의 수식
  • 릿지 회귀와의 비교
  • 파이썬을 활용한 라쏘 회귀

규제란? - 과적합과 규제의 관계


선형 회귀는 손실 함수인 MSE(Mean Squared Error) 를 최소화하는 방향으로 계수를 학습합니다.

$$ MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 $$

  • $y_i$: 실제값
  • $\hat{y}_i$: 예측값
  • $n$: 샘플 수

그런데 특성이 많거나 데이터가 적을 경우, 모델은 학습 데이터에 과도하게 맞춰지면서 테스트 데이터에서 성능이 크게 떨어집니다. 이것이 과적합입니다.

규제는 손실 함수에 계수의 크기에 비례하는 패널티 항을 추가하여, 계수가 지나치게 커지지 않도록 억제합니다. 패널티의 종류에 따라 라쏘(L1 규제)와 릿지(L2 규제)로 나뉩니다.

규제 방식 패널티 항 특징
L1 규제 (Lasso) 계수의 절댓값 합 일부 계수를 정확히 0으로 만듦
L2 규제 (Ridge) 계수의 제곱합 계수를 0에 가깝게 줄이지만, 0이 되지는 않음

라쏘 회귀의 수식


라쏘 회귀의 손실 함수는 MSE에 L1 패널티를 더한 형태입니다. 수식은 다음과 같습니다.

$$ L_{Lasso} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 + \lambda \sum_{j=1}^{p} |\beta_j| $$

  • $\lambda$ (lambda): 규제 강도를 조절하는 하이퍼파라미터. 값이 클수록 더 많은 계수가 0이 됨
  • $\beta_j$: $j$번째 특성의 계수
  • $p$: 특성의 수
  • $|\beta_j|$: 계수의 절댓값 (L1 노름)

$\lambda$ 값의 영향

라쏘가 계수를 정확히 0으로 만드는 이유는 L1 패널티의 기하학적 특성 때문입니다. L1 제약 조건의 경계면은 꼭짓점이 있는 다이아몬드 형태이며, 손실 함수의 등고선이 이 꼭짓점과 만날 가능성이 높습니다. 꼭짓점에서는 일부 계수가 정확히 0이 됩니다.

$\lambda$ 값 효과
$\lambda = 0$ 규제 없음. 일반 선형 회귀와 동일
$\lambda$ 증가 더 많은 계수가 0으로 수렴, 모델이 단순해짐
$\lambda$ 과도하게 큼 모든 계수가 0에 가까워져 과소적합(Underfitting) 발생

릿지 회귀와의 비교


라쏘와 릿지는 모두 과적합을 방지하는 규제 방법이지만, '패널티 항'의 차이로 인해 동작 방식이 다릅니다.

※ 두 방법을 결합한 엘라스틱넷(ElasticNet)도 존재합니다. L1과 L2 패널티를 동시에 사용하여 라쏘와 릿지의 장점을 모두 활용합니다.

항목 라쏘 (Lasso) 릿지 (Ridge)
패널티 $\lambda \sum \|\beta_j\|$ (L1) $\lambda \sum \beta_j^2$ (L2)
계수 처리 일부 계수를 정확히 0으로 만듦 계수를 0에 가깝게 줄이지만, 0은 되지 않음
변수 선택 가능 (0인 계수 = 해당 변수 제거) 불가능
적합한 상황 불필요한 특성이 많을 때 모든 특성이 어느 정도 유효할 때
다중공선성 상관된 변수 중 하나만 남기는 경향 상관된 변수 계수를 고르게 축소
파이썬 클래스 Lasso Ridge
반응형

파이썬을 활용한 라쏘 회귀


파이썬에서는 sklearnLasso를 사용합니다. 보스턴 주택 가격과 유사한 구조의 캘리포니아 주택 데이터셋으로 예제를 구현하면 다음과 같습니다.


라쏘 회귀에서는 특성 간 스케일 차이가 계수에 영향을 미치므로, StandardScaler로 표준화를 반드시 적용합니다.

from sklearn.linear_model import Lasso, LinearRegression
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
import pandas as pd
import numpy as np

# 데이터 로드
data = fetch_california_housing()
X, y = data.data, data.target
feature_names = data.feature_names

# 학습/테스트 분리
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# 스케일링 (라쏘는 특성 간 스케일에 민감하므로 표준화 필요)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 라쏘 회귀 학습
lasso = Lasso(alpha=0.1)  # alpha = lambda (규제 강도)
lasso.fit(X_train_scaled, y_train)

# 예측 및 평가
y_pred = lasso.predict(X_test_scaled)
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
print(f"RMSE: {rmse:.4f}")

RMSE
RMSE


계수 확인 및 변수 선택 결과

출력 결과에서 계수가 0인 특성은 라쏘가 자동으로 제거한 변수입니다. alpha 값을 높일수록 0이 되는 특성이 증가합니다.

# 각 특성의 계수 확인
coef_df = pd.DataFrame({
    '특성': feature_names,
    '계수': lasso.coef_
}).sort_values('계수', key=abs, ascending=False)

print(coef_df)
print(f"\n계수가 0인 특성 수: {(lasso.coef_ == 0).sum()}")

계수가 0인 특성
계수가 0인 특성


alpha 값에 따른 계수 변화

alpha가 커질수록 각 특성의 계수가 0으로 수렴하는 과정을 확인할 수 있습니다.

import matplotlib.pyplot as plt

# 다양한 alpha 값에 따른 계수 변화 시각화
alphas = [0.001, 0.01, 0.1, 0.5, 1.0, 5.0]
coefs = []

for alpha in alphas:
    model = Lasso(alpha=alpha, max_iter=10000)
    model.fit(X_train_scaled, y_train)
    coefs.append(model.coef_)

plt.figure(figsize=(10, 6))
for i, name in enumerate(feature_names):
    plt.plot(alphas, [c[i] for c in coefs], marker='o', label=name)

plt.xscale('log')
plt.xlabel('alpha (규제 강도)')
plt.ylabel('계수 값')
plt.title('Lasso - alpha에 따른 계수 변화')
plt.legend(loc='upper right', fontsize=8)
plt.axhline(0, color='black', linewidth=0.8, linestyle='--')
plt.tight_layout()
plt.show()

알파값에 따른 계수 변화
알파값에 따른 계수 변화


주요 파라미터

최적의 alpha를 찾고 싶다면 sklearnLassoCV를 사용하면 교차 검증으로 자동 탐색할 수 있습니다.

파라미터 설명 기본값
alpha 규제 강도 ($\lambda$). 클수록 더 강한 규제 1.0
max_iter 수렴을 위한 최대 반복 횟수 1000
fit_intercept 절편(intercept) 학습 여부 True
positive 계수를 양수로만 제한할지 여부 False

마무리하며

라쏘 회귀는 선형 회귀에 L1 규제를 추가하여 일부 계수를 정확히 0으로 만드는 알고리즘입니다. 불필요한 특성을 자동으로 제거하는 변수 선택 기능이 내장되어 있어, 특성이 많고 희소한 데이터에 적합합니다. alpha값으로 규제 강도를 조절하며, 학습 전 반드시 표준화를 적용해야 합니다.


반응형