[AI] 릿지 회귀(ridge regression), 라쏘 회귀(lasso regression), 엘라스틱넷 회귀(elastic net regression)

2026. 3. 15. 19:14·AI/Machine Learning
반응형

들어가며

머신러닝 모델이 데이터에 과대적합되었다면 이를 해결하기 위해 우리는 규제를 해야할 것이다

다항 회귀 모델을 규제하는 간단한 방법은 차수를 줄여 모델을 간단히 만드는 것이다

선형 회귀 모델에서는 보통 모델의 가중치를 제한함으로써 규제를 가한다

이번 글에서는 모델의 가중치를 제한하는 방법으로 규제를 가하는

릿지 회귀, 라쏘 회귀, 엘라스틱넷 회귀에 대하여 알아볼 것이다

 

릿지 회귀

릿지 회귀는 선형 회귀의 비용함수에 규제항을 추가한 형태이다

규제항

규제항이 적용되면 가중치가 커질수록 비용함수가 증가하여

최적화 과정에서 가중치가 작은 값이 되도록 유도한다

 

이때 하이퍼파라미터 λ는 모델을 얼마나 많이 규제할지의 정도를 나타낸다

λ=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
'AI/Machine Learning' 카테고리의 다른 글
  • [AI] 선형 서포트 벡터 머신(SVM) 분류
  • [AI] 로지스틱 회귀(logistic regression)
  • [AI] 학습 곡선(Learning Curve)
  • [AI] 경사하강법(Gradient Descent)
20puddle
20puddle
20puddle 님의 블로그 입니다.
  • 20puddle
    20puddle 님의 블로그
    20puddle
  • 전체
    오늘
    어제
    • 분류 전체보기 (100)
      • Spring boot (5)
      • git & github (5)
      • algorithm (47)
        • theory (3)
        • 배열 (7)
        • 연결 리스트 (3)
        • 스택 (5)
        • 큐 (3)
        • 덱 (2)
        • 기초 코드 (19)
        • BFS (5)
      • AI (43)
        • Machine Learning (35)
        • Deep Learning (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    git
    연결리스트
    주성분변환
    list
    github
    Java
    Aimers
    AI
    홀드아웃 검증
    머신러닝
    인공지능
    게시판
    백준
    딥러닝
    그레디언트 클리핑
    Spring Boot
    알고리즘
    ML
    DL
    오프라인 학습
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
20puddle
[AI] 릿지 회귀(ridge regression), 라쏘 회귀(lasso regression), 엘라스틱넷 회귀(elastic net regression)
상단으로

티스토리툴바