라쏘 회귀란?
정의
$$ \begin{bmatrix} y_{1} \\ y_{2} \\ \vdots \\ y_{n} \end{bmatrix} = \begin{bmatrix} 1 & x_{11} & \cdots & x_{p1} \\ 1 & x_{12} & \cdots & x_{p2} \\ \vdots & \vdots & \ddots & \vdots \\ 1 & x_{1n} & \cdots & x_{pn} \end{bmatrix} \begin{bmatrix} \beta_{0} \\ \beta_{1} \\ \vdots \\ \beta_{p} \end{bmatrix} + \begin{bmatrix} \varepsilon_{1} \\ \varepsilon_{2} \\ \vdots \\ \varepsilon_{n} \end{bmatrix} $$ $n$ 개의 데이터가 주어져 있고 $p < n$ 이라고 할 때 선형다중회귀모델을 계획행렬로 나타내면 위와 같고, 간단히 $Y = X \beta + \varepsilon$ 라 나타내자. 이 때 다음의 최적화 문제를 BPDNbasis Pursuit Denoising라 하고, BPDN을 푸는 것을 라쏘lASSO, Least Absolute Shrinkage and Selection Operator 혹은 라쏘 회귀lASSO regression라고 한다. $$ \argmin_{\beta} \left( {{ 1 } \over { 2 }} \left\| Y - X \beta \right\|_{2}^{2} + \lambda \left\| \beta \right\|_{1} \right) $$ 여기서 $\lambda \ge 0$ 을 튜닝 파라미터tuning Parameter라 한다.
설명
라쏘는 그 작명 그대로 회귀문제에서 회귀계수operator의 절대값absolute을 수축shrinkage시켜서 최소한least만 선택selection한다.
머신러닝에서는 BPDN을 일반적인 최소제곱 문제에 $\lambda \left\| \beta \right\|_{1}$ 를 추가하는 $l_{1}$ 레귤러라이제이션regularization으로 볼 수도 있다.
왜 쓰는가?
스파스 회귀 문서를 먼저 읽고 보면 더 좋다:
- 통계학의 관점: 해석이 간단한 모델을 찾기 위해서다. 기본적으로 회귀계수의 크기는 데이터의 스케일에 비해 충분히 크지 않으면 통계적으로 유의하지 않은 것으로 보았다. 다시 말해, 꼭 $0$ 은 아니라도 거의 $0$ 이라면 데이터를 설명하기 위해 필요한 건 아닐 수 있다는 것이다. 이러한 해석이 라쏘 회귀에서도 정확히 같지는 않을 수 있겠지만, 결국 하고자 하는 건 ‘크기가 작은 회귀계수’들을 찾아내고 처리하는 것이다.
- 머신러닝의 관점: 오버피팅overfitting을 막기 위해서다. 주어진 데이터를 잘 설명하기 위해 아주 복잡한 항들을 추가하든 추가 데이터를 확보하든 해서 정말 특수한 경우까지 다 커버하는 모델을 만들 수 있을지도 모르겠지만, 이렇게 꼼꼼하게 맞추다보면 트레이닝 데이터에서만 뛰어나고 실전적인 테스트에서는 형편없을 수 있다. 그렇게 수없이 많은 변수에 대해서 자잘자잘하게 회귀계수를 찾는 건 오버피팅의 위험을 증대시키므로, 데이터를 설명하는 힘을 떨어뜨리는 페널티를 짊어지고서라도 막으려는 것이다.
이는 관점의 차이일 뿐, 잘 읽어보면 같은 말이다.
튜닝 파라미터 $\lambda$
- 이 설명은 리지 회귀에 대한 것이지만, 튜닝 파라미터를 다루는 맥락에서는 라쏘 회귀에서도 똑같다.
정의에서 소개된 튜닝 파라미터 $\lambda$ 는 크면 클수록 페널티penalty $\left\| \lambda \right\|$ 가 강해지는데, 이게 너무 작으면 그냥 회귀분석과 다를 바가 없고 너무 크면 데이터를 설명하든 못하든 그냥 $\beta = \mathbf{0}$ 가 최선의 선택이 되어버린다. 극단적이고 직관적인 예시로써, 데이터에서 나오는 값들의 스케일이 0~10 정도인데도 페널티에 너무 큰 가중치 $\lambda = 10^{6}$ 를 주면 $\left\| \beta \right\|$ 를 작게 만드는 것에 정신이 팔려서 원래 해야하는 일―데이터를 잘 설명하는 모델을 세우는 걸 전혀 못하게 된다. 요지는 적절한 $\lambda$ 를 선택해야한다는 것인데, 수식만 봤을 때 $\lambda$ 가 크고 작은 것 자체로는 딱히 좋고 나쁨이 없다.
따라서 주어진 데이터에 대한 특별한 직관이나 기준이 없다면 그냥 $\lambda$ 를 바꿔가며 목적함수가 최소가 되는 걸 선택하는 것도 한 방법이다. 위의 그림은 어떤 분석에서 $\lambda$ 를 바꿔가며 교차검증을 거친 후의 에러를 $\lambda$ 에 대한 함숫값으로 본 그래프를 그린 것이다1. 이 그래프는 $5 \times 10^{-1}$ 부근에서 최소값을 가지는 것을 수직 점선으로 표현해두었고, 별다른 이유가 없다면 $\lambda$ 는 해당 값을 사용하는 것이 타당하다.
리지 회귀와의 차이점
역사적으로 리지ridge는 1970년 편의-분산 트레이드 오프 관계에서 불편성을 어느정도 희생해서 약간의 편의가 생기더라도 모수의 추정에 대한 효율성을 증대하는 방법으로써 소개되었고2, 라쏘lASSO는 1986년 지구물리학geophysics에서 처음 등장했다가 1996년 다시 소개되면서 라쏘라는 이름이 지어졌다고 한다.3
- 리지 회귀의 목적함수: $$\argmin_{\beta} \left( \left\| Y - X \beta \right\|_{2}^{2} + \lambda \left\| \beta \right\|_{2}^{2} \right)$$
- 라쏘 회귀의 목적함수: $$\argmin_{\beta} \left( \left\| Y - X \beta \right\|_{2}^{2} + \lambda \left\| \beta \right\|_{1} \right)$$
보다시피 리지 회귀와 라쏘 회귀의 목적 함수는 무척 닮아 있어서 이래저래 많이 엮이지만, 까놓고 말해서 둘이 닮은 것은 목적함수의 형식적인 모습 뿐이며 이들의 장단점을 따지고 있는 것부터가 너무 단순한 관점일 수 있다. 흔히 리지와 라쏘의 차이점은 패널티 텀이 $l_{1}$ 이냐 $l_{2}$ 냐, 미분가능해서 그 최적해가 클로즈드 폼closed form으로 간단하게 나타나냐 아니냐, 실제로 계수를 $0$ 까지 줄일 수 있냐 없냐 등등으로 많이들 설명한다. 거기에 좀 더 꼼꼼하면 파이썬 예제 코드가 포함되고 경험적으로는 보통 뭐가 우수하다, 어떤 경우에선 다른 게 더 나을 수 있다는 언급이 추가되는 식이다.
… 근데 그런 설명들은 각종 책, 위키피디아, 블로그 등에 차고 넘치게 널려있다. 이렇게 잘 알려진 것들을 깔끔하게 정리해놓은 글들은 구글에 ‘Ridge vs LASSO’라고 검색하면 쉽게 찾아볼 수 있고, 이 포스트에서 우리는 그들보다 조금만, 아주 조금만 더 깊게 들어가보려 한다.
- 이하의 내용은 라쏘 회귀의 입장에서 리지 회귀와 어떻게 다른지를 설명한다. 리지 회귀의 입장에서 라쏘 회귀를 어떻게 볼지는 해당 포스트에서 확인하자.
일반적으로 라쏘 회귀의 코스트가 리지 회귀보다 더 비싸다거나, 계산적으로 복잡하다고들 많이 설명한다. 딱히 틀린 지적은 아니지만, 애초에 패널티 $\left\| \lambda \right\|$ 까지 짊어져가면서 하고 싶은 게 스파스 회귀라면 그깟 코스트는 문제가 안 될지도 모른다.
위의 그림에서 $\hat{\beta}$ 은 원래 최소제곱문제의 최적해고 왼쪽은 라쏘 회귀($l_{1}$), 오른쪽은 리지 회귀($l_{2}$)의 해공간을 직관적으로 보여주고 있다4. 이렇게 기하적으로 하는 설명은 앞서 언급했듯 구글에서 ‘Ridge vs LASSO’로 이미지 검색을 하면 그 수를 셀 수가 없을 정도로 많고, 그 정도로 좋은 설명이다.
- (왼쪽) 라쏘: 회귀계수 $\beta_{1}$ 과 $\beta_{2}$ 의 절대값이 어떤 값 $r$ 과 같다는 것은 한 변의 길이가 $\sqrt{r}$ 인 정사각형 $\left| \beta_{1} \right| + \left| \beta_{2} \right| = r$ 위의 한 점이라는 것이다. BPDN에서의 최적해는 $\left\| Y - X \beta \right\|_{2}$ 가 이루는 등고선 중에서 가장 낮으면서도 저 사각형과 겹치는 점이 있어야하고, 그림에서 보는 것과 같이 정확히 축 위에 위치할 수 있다. 해가 어떤 축 위에 있다는 것은 다른 차원 중 하나 이상이 $0$ 이 되었다는 것을 의미하므로, 라쏘는 특정한 회귀계수를 정확히 $0$ 으로 만들 수 있다.
- (오른쪽) 리지: 회귀계수 $\beta_{1}$ 과 $\beta_{2}$ 의 제곱이 어떤 값 $r$ 과 같다는 것은 반지름의 길이가 $r$ 인 원 $\beta_{1}^{2} + \beta_{2} ^{2} = r$ 위의 한 점이라는 것이다. 라쏘와 마찬가지로 특정 수준의 $r$ 이라 하더라도 $\hat{\beta}$ 가 이루는 등고선과 원이 만나는 점은 거의 확실히 축 위에 놓일 수 없다.
물론 리지 회귀도 그 나름대로 좋은 의미를 많이 가지고 있기는 하겠지만, 스파스 회귀의 맥락에선 결국 특정 계수를 $0$ 으로 만들지 못하는 방법과 비교되는 것 자체가 이상하다. 5 특정한 유형의 데이터에선, $\lambda$ 를 주기에 따라선, 오버피팅의 측면에선, 계산 속도와 단순함에선… 그런 모든 가정이 부질없다. 리지 회귀는 못하는 걸 라쏘 회귀는 할 수 있고, 근본적으로 이 차이를 좁힐 방법은 없다. 라쏘냐 리지냐 하는 비교는 장단점이나 사소한 차이로 따질 게 아니라는 뜻이다.
- 계산의 결과만 생각해보면 $\beta_{k} = 0$ 와 $\beta_{k} \approx 0$ 는 별로 다르지 않을 수 있겠지만, 계산의 과정까지 생각해보면 $\beta_{k} = 0$ 인 독립변수 $X_{k}$ 는 애초에 배제할 수 있다는 점이 현격하게 다르다. 만약 리지 회귀에서는 $\beta_{k} \approx 0$ 지만 라쏘 회귀에선 확실히 $\beta_{k} = 0$ 이 되는 변수가 100만개 정도 있다면, 모델로써의 퍼포먼스는 비슷하더라도 리지 회귀는 한 데이터 포인트의 피팅마다 100만 번의 곱셈이 더 필요한 것이다.
한편 라쏘는 실제로도 특정한 조건 하에서 최적해의 클로즈드 폼closed form이 알려져 있으며 그 최적해에 소프트 쓰레숄딩이 사용된다. 다시 말해 수식 자체에서도 $\beta_{k}$ 를 $0$ 으로 만드는 부분이 있다는 것이고 라쏘 회귀를 시각, 직관에 기대지 않고 감을 잡으려면 다음과 같은 수식적인 논의를 이해해야 한다.
공식
최적해 6
$$ L \left( \beta \right) = {{ 1 } \over { 2 }} \left\| Y - X \beta \right\|_{2}^{2} + \lambda \left\| \beta \right\|_{1} $$ $\lambda$ 가 상수로 주어져 있을 때, 라쏘 회귀의 목적 함수 $L$ 을 위와 같이 나타내자. 일반적으로 라쏘 회귀의 최적해는 클로즈드 폼closed form이 없지만, $X$ 의 모든 칼럼이 서로 직교한다고 가정하면 $\hat{\beta} = \argmin_{\beta} L \left( \beta \right)$ 의 $k$ 번째 성분 $\left( \hat{\beta} \right)_{k}$ 는 다음과 같다. $$ \begin{align*} \left( \hat{\beta} \right)_{k} =& {{ 1 } \over { \left( X^{T} X \right)_{kk} }} \eta_{\lambda} \left( X^{T} Y \right)_{k} \\ = & {{ 1 } \over { \left( X^{T} X \right)_{kk} }} \begin{cases} \left( X^{T} Y \right)_{k} + \lambda & , \text{if } \left( X^{T} Y \right)_{k} < - \lambda \\ 0 & , \text{if } \left( X^{T} Y \right)_{k} \in [-\lambda, \lambda] \\ \left( X^{T} Y \right)_{k} - \lambda & , \text{if } \left( X^{T} Y \right)_{k} > \lambda \end{cases} \end{align*} $$ 여기서 $A^{T}$ 는 $A$ 의 전치행렬, $A^{-1}$ 는 $A$ 의 역행렬이고 $\eta_{\lambda}$ 는 소프트 쓰레숄딩이다.
유도 7
벡터와 행렬의 그래디언트: $$ \frac{ \partial }{ \partial \mathbf{w} }\left( \mathbf{w}^{T}\mathbf{R}\mathbf{w} \right)= \left( \mathbf{R} + \mathbf{R}^{T} \right) \mathbf{w} $$
잔차제곱합의 그래디언트: $$ f \left( \mathbf{s} \right) := \left( \mathbf{y} - X \mathbf{s} \right)^{T} R \left( \mathbf{y} - X \mathbf{s} \right) $$ $\mathbf{s}$ 에 종속되지 않은 벡터 $\mathbf{y} \in \mathbb{R}^{n}$ 과 행렬 $X \in \mathbb{R}^{n \times p}$, $R \in \mathbb{R}^{n \times n}$ 에 대해 다음이 성립한다. $$ {{ \partial f \left( \mathbf{s} \right) } \over { \partial \mathbf{s} }} = - X^{T} \left( R + R^{T} \right) \left( \mathbf{y} - X \mathbf{s} \right) $$
$R = I$ 인 경우에 대해 위 공식들을 적용하면 $$ \begin{align*} {{ \partial } \over { \partial \beta }} L \left( \beta \right) =& {{ \partial } \over { \partial \beta }} {{ 1 } \over { 2 }} \left\| Y - X \beta \right\|_{2}^{2} + {{ \partial } \over { \partial \beta }} \lambda \left\| \beta \right\| \\ =& {{ \partial } \over { \partial \beta }} {{ 1 } \over { 2 }} \left( Y - X \beta \right)^{T} \left( Y - X \beta \right) + \lambda {{ \partial } \over { \partial \beta }} \left\| \beta \right\| \\ =& - {{ 1 } \over { 2 }} X^{T} \left( I + I^{T} \right) \left( Y - X \beta \right) + \lambda {{ \partial } \over { \partial \beta }} \left\| \beta \right\| \\ =& - X^{T} \left( Y - X \beta \right) + \lambda {{ \partial } \over { \partial \beta }} \left\| \beta \right\| \\ =& - X^{T} Y + X^{T} X \beta + \lambda {{ \partial } \over { \partial \beta }} \left\| \beta \right\| \end{align*} $$ 이고, $\beta = \hat{\beta}$ 는 ${{ \partial } \over { \partial \beta }} L = 0$ 을 만족시켜야 하므로, 정리하면 다음을 얻는다. $$ X^{T} X \hat{\beta} = X^{T} Y - \lambda {{ \partial } \over { \partial \beta }} \left\| \beta \right\| $$ 이제 $k = 0, 1, \cdots, p$ 에 대해 $\hat{\beta}_{k} := \left( \beta \right)_{k}$ 를 생각해보자. 행렬 $A$ 의 $i$ 번째 행을 $\left( A \right)_{i \cdot}$ 와 같이 나타내보면, $$ \begin{align*} & X^{T} X \hat{\beta} = X^{T} Y - \lambda {{ \partial } \over { \partial \beta }} \left\| \beta \right\| \\ \implies & \left( X^{T} X \right)_{i \cdot} \hat{\beta} = \left( X^{T} Y \right)_{i} - \lambda {{ \partial } \over { \partial \hat{\beta}_{i} }} \sum_{j=0}^{p} \left| \beta_{j} \right| \\ \implies & \sum_{j=0}^{p} \left( X^{T} X \right)_{i j} \hat{\beta}_{j} = \left( X^{T} Y \right)_{i} - \lambda {{ \partial } \over { \partial \hat{\beta}_{i} }} \left| \hat{\beta}_{i} \right| \\ \implies & \hat{\beta}_{i} = {{ 1 } \over { \left( X^{T} X \right)_{ii} }} \left[ \left( X^{T} Y \right)_{i} - \lambda {{ \partial } \over { \partial \hat{\beta}_{i} }} \left| \hat{\beta}_{i} \right| - \sum_{j \ne i} \left( X^{T} X \right)_{i j} \hat{\beta}_{j} \right] \end{align*} $$ 과 같은 방정식을 얻게 된다. $\hat{\beta}_{i}$ 가 다른 $\hat{\beta}_{j}$ 들에게 종속되어 있어서 이 해를 클로즈드 폼이라 할 수는 없고, $\left( X^{T} X \right)_{i j} = 0$ 일 때는 $\hat{\beta}_{j}$ 를 신경쓰지 않아도 되는 것을 확인할 수 있다. 이에 따라 $X$ 의 칼럼들이 직교한다는 가정을 추가해보면, $X$ 의 칼럼들이 직교한다는 것은 $X^{T} X$ 가 대각행렬이라는 의미가 된다.
$\hat{\beta}_{k}$ 는 $0$ 보다 크거나, 작거나, $0$ 이거나 셋 중 하나다. 만약 $\hat{\beta}_{k} > 0$ 이라면, $$ \begin{align*} & \hat{\beta}_{k} > 0 \\ \implies & \hat{\beta}_{k} = {{ 1 } \over { \left( X^{T} X \right)_{kk} }} \left[ \left( X^{T} Y \right)_{k} - \lambda {{ \partial } \over { \partial \hat{\beta}_{k} }} \left| \hat{\beta}_{k} \right| \right] > 0 \\ \implies & \hat{\beta}_{k} = {{ 1 } \over { \left( X^{T} X \right)_{kk} }} \left[ \left( X^{T} Y \right)_{k} - \lambda \right] > 0 \end{align*} $$ 이므로 $\hat{\beta}_{k} > 0$ 일 뿐만 아니라 $\left( X^{T} Y \right)_{k} > \lambda$ 이기도 해야한다. 마찬가지의 이유로 $\hat{\beta}_{k} < 0$ 이라면, $$ \begin{align*} & \hat{\beta}_{k} < 0 \\ \implies & \hat{\beta}_{k} = {{ 1 } \over { \left( X^{T} X \right)_{kk} }} \left[ \left( X^{T} Y \right)_{k} - \lambda (-1) \right] > 0 \\ \implies & \hat{\beta}_{k} = {{ 1 } \over { \left( X^{T} X \right)_{kk} }} \left[ \left( X^{T} Y \right)_{k} + \lambda \right] < 0 \end{align*} $$ 이므로 $\left( X^{T} Y \right)_{k} < - \lambda$ 이기도 해야한다. 그 외에는 $\hat{\beta}_{k} = 0$ 이고, 다음과 같이 소프트 쓰레숄딩을 통해 요약할 수 있다. $$ \begin{align*} \hat{\beta}_{k} =& {{ 1 } \over { \left( X^{T} X \right)_{kk} }} \begin{cases} \left( X^{T} Y \right)_{k} + \lambda & , \text{if } \left( X^{T} Y \right)_{k} < - \lambda \\ 0 & , \text{if } \left( X^{T} Y \right)_{k} \in [-\lambda, \lambda] \\ \left( X^{T} Y \right)_{k} - \lambda & , \text{if } \left( X^{T} Y \right)_{k} > \lambda \end{cases} \\ = & {{ 1 } \over { \left( X^{T} X \right)_{kk} }} \eta_{\lambda} \left( X^{T} Y \right)_{k} \end{align*} $$
■
알고리즘
$$ \hat{\beta}_{i} = {{ 1 } \over { \left( X^{T} X \right)_{ii} }} \left[ \left( X^{T} Y \right)_{i} - \lambda {{ \partial } \over { \partial \hat{\beta}_{i} }} \left| \hat{\beta}_{i} \right| - \sum_{j \ne i} \left( X^{T} X \right)_{i j} \hat{\beta}_{j} \right] $$ 유도과정에서 이미 확인한 것처럼 임플리싯implicit한 방정식만 있다는 게 꼭 $\hat{\beta}_{j}$ 을 구할 수 없다는 의미는 아니고, 경사하강법과 같이 반복적iterative인 알고리즘으로 근사해를 구한다고 한다. 8 BPDN만 봤을 땐, 일반적인 최적화 문제와 달리 우리가 구한 해를 검증할 방정식이라도 있으니 사정이 그럭저럭 괜찮은 편인 것이다. 한편으로는 결국 경사하강법을 쓸 땐 쓰더라도, $X$ 의 칼럼들이 준수하게 직교한다면 위의 공식으로 얻는 최적해를 초기점으로 쓸만도 하다. 어차피 변수들끼리의 독립성에 문제가 있었다면 그걸 라쏘의 결점이라고 지적하기는 곤란하다.
같이보기
James. (2013). An Introduction to Statistical Learning with Applications in R: p228. ↩︎
James. (2013). An Introduction to Statistical Learning with Applications in R: p222. ↩︎
카네시로 무네유키, 노무라 유스케. (2018). 블루 록: 1권 ↩︎
https://machinelearningcompass.com/machine_learning_models/lasso_regression/ ↩︎