-
Ridge / LASSO RegressionData Science/Modeling 2021. 10. 4. 16:36
Ridge와 LASSO Regression에 대한 자세한 설명은 다른 블로그에 잘 나와있으니 간단하게만 다룰 예정입니다. 대신, Ridge는 왜 가중치가 0이 되지 않고 LASSO는 0이 되는지 수식적으로 이해가 가지 않았는데, 이와 관련하여 개인적으로 이해가 수월했던 글이 있어 정리하고자 합니다.
Ridge Regression
Ridge Regression은 가중치의 제곱합을 최소화하는 것을 추가적인 제약 조건(L2-norm)으로 하는 선형 회귀 모델입니다. 패널티항인 $\lambda \sum_{i=1}^{n} \beta_i^2$이 추가됩니다. 이는 모델을 데이터에 맞추는 것뿐만 아니라 모델의 가중치가 가능한 한 작게 유지되도록 노력합니다. 패널티항은 학습하는 동안에만 추가되고, 테스트 셋에 대한 성능을 평가하거나 실제 예측을 진행할 때에는 포함하지 않습니다.
$$ L_2 = RSS + \lambda \sum_{i=1}^{n} \beta_i^2 $$
즉, 위의 식을 최소화하는 $\beta$를 찾아내는 것이 Ridge Regression의 목표입니다. 식에서 주의할 점은 먼저, 하이퍼파라미터 $\lambda$는 모델을 얼마나 많이 규제할지 조절합니다. 일반적으로 0보다 큰 어떤 값이든 사용이 가능하고, 0이면 선형 회귀와 같아집니다. $\lambda$가 아주 크면 모든 가중치가 거의 0에 가까워지고 결국 데이터의 평균을 지나는 수평선이 되니 잘 조절할 필요가 있습니다. 파이썬에서는
sklearn.linear_model.Ridge()
에 Ridge Regression이 구현되어 있지만 최적의 하이퍼파라미터 탐색을 위해서는sklearn.linear_model.RidgeCV()
사용이 권장됩니다. 다음으로 $i=1$부터 시작된다는 것입니다. 편향 $\beta_0$은 규제의 대상이 아닙니다.Ridge Regression의 특징은 다음과 같습니다:
- shrinkage method
- 가중치가 0에 가까워지나 0이 되지는 않아서 변수 선택은 불가능합니다.
- 정규방정식과 경사하강법 모두 적용 가능합니다.
- 변수간 상관관계가 높은 상황에서 좋은 예측 성능을 냅니다.
그렇다면, 왜 가중치가 0이 되지 않는 걸까요? 저는 이 글의 한 댓글을 보고 이해를 수월히 할 수 있었습니다.
앞선 식을 하나의 $\beta$만 구한다고 가정하고 다시 쓰면 $L_2 = (y-x \beta)^2 + \lambda \beta^2$ 이 됩니다. $L_2$를 최소화하려면 미분해서 0이 되는 지점을 찾으면 됩니다.
$$ L_2 = y^2 - 2xy\beta + x^2 \beta^2 + \lambda \beta^2 $$$$ {\partial L_2 \over \partial \beta} = -2xy + 2x^2\beta + 2 \lambda \beta = 0 $$
$$ \beta = {xy \over x^2 + \lambda} $$
마지막 식을 잘 보면, $x$와 $y$는 이미 정해져 있는 값이므로 $\lambda$에 의해 $\beta$가 결정됨을 알 수 있습니다. $\beta$ 즉, 가중치가 0이 되려면 $\lambda$가 무한대여야 하고, 따라서 Ridge Regression에서는 가중치가 0에 가까워질 수는 있지만 0이 될 수는 없습니다.
LASSO Regression
LASSO는 Least Absolut Shrinkage and Selection Operator 의 약자로 LASSO Regression은 가중치의 절대값의 합을 최소화하는 것을 추가적인 제약 조건(L1-norm)으로 하는 선형 회귀 모델입니다. Ridge Regression과 유사하지만, 패널티항으로 $\lambda \sum_{i=1}^{n} | \beta_i|$가 추가됩니다.
$$ L_1 = RSS + \lambda \sum_{i=1}^{n} |\beta_i| $$
즉, 위의 식을 최소화하는 $\beta$를 찾아내는 것이 LASSO Regression의 목표입니다. 하이퍼파라미터 $\lambda$는 모델을 얼마나 많이 규제할지 조절합니다. 0보다 크고 1보다 작은 값이 사용이 가능하고 일반적으로 0.005와 같이 0에 가까운 값을 사용합니다. 0이면 선형 회귀와 같아집니다. 중요한 특징은 덜 중요한 Feature의 가중치를 0으로 만들어 제거한다는 점입니다. 즉, 자동으로 feature selection을 수행하고 희소 모델(sparse model)을 만듭니다. 파이썬에서는
sklearn.linear_model.Lasso()
에 LASSO Regression이 구현되어 있지만 최적의 하이퍼파라미터 탐색을 위해서는sklearn.linear_model.LassoCV()
사용이 권장됩니다.LASSO Regression의 특징은 다음과 같습니다:
- shrinkage method + feature selection
- 덜 중요한 특성의 가중치는 0이 되어 제거됩니다.
- 서브그레이디언트 벡터를 사용하여 경사하강법을 적용할 수 있습니다.
- 변수가 많을 때 좋은 성능을 냅니다.
Ridge Regression에서와 같이 한번 수식으로 확인해보겠습니다.
앞선 식을 하나의 $\beta$만 구한다고 가정하고 다시 쓰면 $L_1 = (y-x \beta)^2 + \lambda \beta (\beta > 0)$가 됩니다. $L_1$을 최소화하려면 미분해서 0이 되는 지점을 찾으면 됩니다.
$$ L_1 = y^2 - 2xy\beta + x^2 \beta^2 + \lambda \beta $$$$ {\partial L_1 \over \partial \beta} = -2xy + 2x^2\beta + \lambda = 0 $$
$$ \beta = {2xy - \lambda \over 2x^2} $$
$ 2xy = \lambda $인 경우에는 $ \beta = 0 $입니다.
항상 '왜?'라는 질문을 가지고 공부를 하고 있습니다. 이에 대한 답 혹은 생각해 나간 과정이나 도움이 된 자료를 최대한 담아 블로그에 정리하는 중입니다. 저도 공부하는 입장이라 잘못된 부분이 있을 수 있으니, 잘못된 부분이나 같이 고민해보고 싶은 부분이 있다면 댓글로 남겨주시면 감사하겠습니다.
References: