# Ridge 회귀, Lasso 회귀 등 현대 기법

#### 정규화의 필요성

고전적 선형 최소제곱법으로 계수를 추정할 때, 학습 데이터의 잡음이나 다중공선성에 의해 계수의 크기가 불필요하게 커지는 문제가 발생할 수 있다. 이를 방지하기 위해 계수(파라미터)에 대한 제약을 추가하여 모델의 복잡도를 낮추는 기법이 정규화(regularization)다. 이러한 정규화 기법을 통해 일반화 성능을 향상시키고 과적합(overfitting)을 완화할 수 있다.

#### Ridge 회귀의 기초

Ridge 회귀는 최소제곱법의 목적함수에 L2 노름을 활용한 정규화 항을 추가한 형태다. 선형회귀에서 계수 벡터를 $\mathbf{w}$, 입력 벡터를 $\mathbf{x}\_i$, 목표값을 $y\_i$라 하면, 고전적 최소제곱법의 비용함수는

$$
\begin{align} J(\mathbf{w})  &= \sum\_{i=1}^n \bigl(y\_i - \mathbf{x}\_i^\top \mathbf{w}\bigr)^2 \end{align}
$$

이다. Ridge 회귀는 여기에 계수 벡터 $\mathbf{w}$의 L2 노름 제곱 항을 추가하여

$$
\begin{align} J\_{\text{ridge}}(\mathbf{w})  &= \sum\_{i=1}^n \bigl(y\_i - \mathbf{x}\_i^\top \mathbf{w}\bigr)^2 + \lambda |\mathbf{w}|*2^2 \\
&= \sum*{i=1}^n \bigl(y\_i - \mathbf{x}*i^\top \mathbf{w}\bigr)^2 + \lambda \sum*{j} w\_j^2 \end{align}
$$

로 표현한다. 여기서 $\lambda>0$는 정규화 세기를 조절하는 하이퍼파라미터다. $\lambda$가 클수록 계수 벡터가 더 작아지며, 일반화가 잘되지만 편향(bias)이 증가할 수 있다. 반대로 $\lambda$가 작으면 일반화는 약해지나 분산(variance)이 증가할 위험이 줄어든다.

Ridge 회귀의 해를 행렬 형태로 살펴보기 위해 입력 데이터 행렬을 $\mathbf{X}\in\mathbb{R}^{n \times d}$, 출력 벡터를 $\mathbf{y}\in\mathbb{R}^n$라 두고, 계수 벡터를 $\mathbf{w}\in\mathbb{R}^d$라 하면, 비용함수는

$$
\begin{align} J\_{\text{ridge}}(\mathbf{w})  &= (\mathbf{y} - \mathbf{X}\mathbf{w})^\top(\mathbf{y} - \mathbf{X}\mathbf{w}) + \lambda \mathbf{w}^\top \mathbf{w} \end{align}
$$

이다. 이를 $\mathbf{w}$에 대해 미분하여 0이 되게 하는 정상방정식을 찾으면

$$
\begin{align} \frac{\partial}{\partial \mathbf{w}} J\_{\text{ridge}}(\mathbf{w}) = -2 \mathbf{X}^\top(\mathbf{y} - \mathbf{X}\mathbf{w}) + 2\lambda\mathbf{w} = \mathbf{0} \end{align}
$$

이므로

$$
\begin{align} \mathbf{X}^\top \mathbf{X}\mathbf{w} + \lambda \mathbf{w}  &= \mathbf{X}^\top \mathbf{y}\\
(\mathbf{X}^\top \mathbf{X} + \lambda \mathbf{I})\mathbf{w}  &= \mathbf{X}^\top \mathbf{y} \\
\mathbf{w}  &= (\mathbf{X}^\top \mathbf{X} + \lambda \mathbf{I})^{-1} \mathbf{X}^\top \mathbf{y} \end{align}
$$

가 Ridge 회귀의 모범해다. 여기서 $\mathbf{I}$는 항등행렬이다. 이렇게 Ridge 회귀는 고전 선형회귀에 비해 해의 안정성이 높으며, $\mathbf{X}^\top\mathbf{X}$가 역행렬을 가지지 않는 경우에도 $\mathbf{X}^\top \mathbf{X} + \lambda \mathbf{I}$가 양의 정부호 행렬로 바뀌어 역행렬이 보장된다.

#### Ridge 회귀의 기하학적 해석

Ridge 회귀에서 계수 벡터에 대한 L2 노름 제약은 계수 벡터가 모두 작게 유지되도록 유도한다. 해석적으로는 에너지(norm)를 최소화하려는 경향이 있으며, 다중공선성이 큰 데이터에서도 계수의 폭발적 증가를 방지한다. L2 노름은 계수 벡터의 크기를 한꺼번에 줄이는 특성이 있어, 중요도가 큰 계수들을 제한적으로 줄이면서도 영향이 작은 계수들의 값도 함께 줄이는 형태를 가진다.

#### Lasso 회귀의 기초

Lasso 회귀는 최소제곱법의 목적함수에 L1 노름을 활용한 정규화 항을 추가한 형태다. L1 노름은 계수 벡터 각 성분의 절댓값 합으로 정의된다. 선형회귀에서 Lasso 비용함수는

$$
\begin{align} J\_{\text{lasso}}(\mathbf{w})  &= \sum\_{i=1}^n \bigl(y\_i - \mathbf{x}\_i^\top \mathbf{w}\bigr)^2 + \lambda |\mathbf{w}|*1\\
&= \sum*{i=1}^n \bigl(y\_i - \mathbf{x}*i^\top \mathbf{w}\bigr)^2 + \lambda \sum*{j} |w\_j| \end{align}
$$

의 형태를 갖는다. 여기서 $\lambda>0$는 마찬가지로 정규화 세기를 조절하는 하이퍼파라미터다. L1 노름은 계수의 합을 줄이려는 경향이 있어, 어떤 계수는 0으로 정확히 만들기도 한다.

Lasso 회귀는 Ridge 회귀와는 다르게 $|\mathbf{w}|$의 항이 미분 불가능한 지점(계수 벡터가 0일 때)을 갖는다. 따라서 직접적인 정상방정식 형태로 모범해를 구하기 어렵고, 좌표강하법(coordinate descent)이나 정교한 서브그라디언트(subgradient) 방법 등을 통해 최적해를 구한다.

#### Lasso 회귀의 기하학적 해석

Lasso 회귀에서 계수 벡터를 제약하는 L1 노름은 벡터 공간에서 마름모 형태의 등고선(contour)을 만든다. 최소제곱 오차가 일정한 타원과 이 마름모 영역이 만나는 점이 해가 되며, 모서리나 축에 닿는 지점에서 계수 성분이 0이 되는 해를 얻는다. 이는 변수 선택(variable selection)의 효과를 가져오며, 모델 해석 및 희소성(sparsity)이 중요한 상황에서 유용하다.

#### 정규화의 확장: Elastic Net 등

Ridge와 Lasso 회귀를 결합하면 Elastic Net이라는 정규화 기법이 탄생한다. Ridge(L2)와 Lasso(L1)가 모두 가진 장점을 절충하여, 상호보완적 형태로 정규화를 수행한다. Elastic Net은 L2와 L1 항을 동시에 고려하기 때문에, 한쪽 항만 사용하는 기법보다 더 유연하고 안정적인 추정이 가능하다. 일반적 Elastic Net의 비용함수는

$$
\begin{align} J\_{\text{EN}}(\mathbf{w})  &= \sum\_{i=1}^n \bigl(y\_i - \mathbf{x}\_i^\top \mathbf{w}\bigr)^2  + \lambda\_1 |\mathbf{w}|\_1  + \lambda\_2 |\mathbf{w}|\_2^2 \end{align}
$$

과 같이 표현된다. 보통 $\lambda\_1$과 $\lambda\_2$를 각각 L1, L2 규제계수로 둔다. L1 항은 가중치의 희소성(sparsity)을 유도하여 변수 선택 효과를 일으키는 반면, L2 항은 다중공선성을 완화하고 안정적인 계수 추정을 도와준다.

Elastic Net을 조금 더 일반화한 형태로 쓰기 위해, 다음과 같이 $\alpha$를 추가한 경우도 흔히 사용된다.

$$
\begin{align} J\_{\text{EN}}(\mathbf{w})  &= \sum\_{i=1}^n \bigl(y\_i - \mathbf{x}\_i^\top \mathbf{w}\bigr)^2  + \lambda \Bigl(\alpha |\mathbf{w}|\_1  + \tfrac{1-\alpha}{2} |\mathbf{w}|\_2^2\Bigr) \end{align}
$$

여기서 $\alpha\in\[0,1]$는 L1 규제와 L2 규제의 가중을 결정한다. $\alpha=1$이면 Lasso, $\alpha=0$이면 Ridge에 해당한다. 중간값이면 Lasso와 Ridge를 적절히 혼합한 형태가 된다.

#### 정규화 해석: L1 vs L2 vs Elastic Net

Ridge 회귀의 L2 항은 계수 벡터의 크기를 균등하게 줄이는 경향이 있고, 특정 계수가 0이 되기보다는 전체 계수가 고르게 줄어든다. 반면 Lasso 회귀의 L1 항은 어떤 계수는 0으로, 어떤 계수는 상대적으로 크게 유지하는 방식으로 희소(sparsity)를 유도한다. Elastic Net은 Lasso의 희소성 효과와 Ridge의 안정성을 한꺼번에 활용하여 변수 선택과 다중공선성 완화 능력을 모두 기대할 수 있다.

#### 고급 주제: Group Lasso

Lasso가 변수 선택을 수행할 때, 각 변수별로 개별적으로 0이 될지 말지를 결정한다. 하지만 특정 그룹으로 묶인 변수들이 함께 선택 혹은 배제되길 원하는 경우가 있다. 예를 들어, 하나의 물리적 특성(feature)을 여러 방향이나 시간 단위로 측정하여 서로 밀접한 상관관계를 가지는 경우, 이들을 그룹 단위로 해석하고자 한다면 Group Lasso가 유용하다.

Group Lasso에서는 변수들을 여러 그룹으로 나누어, 그룹별 L2 노름에 대한 L1 페널티를 준다. 예를 들어, 각 그룹 $g$의 변수 벡터를 $\mathbf{w}\_g$라 하고, 전체 그룹 집합을 $G$라 하면 비용함수는

$$
\begin{align} J\_{\text{GroupLasso}}(\mathbf{w})  &= \sum\_{i=1}^n \bigl(y\_i - \mathbf{x}*i^\top \mathbf{w}\bigr)^2  + \lambda \sum*{g \in G} \sqrt{\dim(\mathbf{w}\_g)}, |\mathbf{w}\_g|\_2 \end{align}
$$

와 같은 형태를 갖는다. 여기에 $\dim(\mathbf{w}\_g)$는 해당 그룹의 변수 개수다. 이 페널티는 그룹별 계수 벡터의 L2 노름을 0으로 수축시킴으로써, 특정 그룹 전체가 0이 되도록 한다. 결과적으로 그룹 단위 변수 선택이 이루어진다.

#### 고급 주제: Fused Lasso

Fused Lasso는 L1 규제 항에 추가로 인접 계수들 간의 차이에 대한 L1 항을 부과하는 기법이다. 시계열 자료나 이미지 분석처럼 계수 간 순서 구조가 있는 상황에서 인접 계수들 사이의 불필요한 급격한 변화가 줄어들도록 유도한다. 예를 들어, 1차원 시계열의 경우 계수 $w\_j$와 $w\_{j+1}$ 사이에

$$
|\mathbf{w}|*{\text{fused}}  = \sum*{j=1}^{d} |w\_j|  + \gamma \sum\_{j=1}^{d-1} |w\_{j+1} - w\_j|
$$

와 같은 항을 추가한다. $|w\_{j+1}-w\_j|$ 항이 작아지므로, 인접 계수들이 유사해지도록 유도되어 지표(변수)가 순차적으로 부드럽게 변화한다.

#### 해법: 좌표강하법(Coordinate Descent)

Lasso나 Elastic Net, Group Lasso 등 L1 계열 정규화는 절댓값이 포함되어 있어 폐합볼록(closed convex)이지만 매끄러운(smooth) 함수는 아니므로, 단순한 미분으로는 닫힌 해(closed-form)를 얻기 어렵다. 이때 자주 사용되는 해법 중 하나가 좌표강하법이다.

좌표강하법에서는 모든 계수를 한꺼번에 갱신하지 않고, 한 번에 하나씩 혹은 한 그룹씩 고정한 채로 목적함수를 최소화하는 방식으로 순차적 갱신을 반복한다. Lasso의 경우, 현재 계수 $\mathbf{w}$에서 $j$번째 계수 $w\_j$를 제외한 나머지는 고정시키고, $w\_j$에 대해서만 목적함수를 최소화하는 식을 구한 뒤, 그 식에 따라 최적의 $w\_j$를 업데이트한다. 이 작업을 $j=1,\dots,d$에 대해 순회하면서 반복하면, 특정 조건하에서 전역 최적해에 수렴함이 알려져 있다.

Lasso에서 좌표강하법으로 $w\_j$를 갱신할 때, 유도 과정에서 소프트 임계값화(soft thresholding) 연산이 등장한다. Elastic Net과 Group Lasso에서도 비슷한 원리가 적용되어, Group Lasso의 경우에는 그룹 단위로 벡터를 갱신하기 때문에 그룹별 소프트 임계값화 연산이 행해진다.

#### 해법: 서브그라디언트(Subgradient)와 확장

L1 노름 절댓값 영역이나, 비선형적인 제약이 있는 경우, 합성함수 형태를 다룰 수 있는 서브그라디언트(subgradient) 기법이 쓰인다. 목적함수의 볼록성(convexity)이 보장되면 서브그라디언트 활용을 통해 전역적 해를 탐색할 수 있다. 다만 서브그라디언트 기반 방법은 때로는 수렴 속도가 느릴 수 있어, 실무에서는 좌표강하법이나 Proximal Gradient Method 같은 기법을 더 선호하기도 한다.

#### Proximal Gradient Method

Proximal Gradient Method는 비매끄러운(nonsmooth) 항과 매끄러운(smooth) 항이 합쳐진 목적함수를 효율적으로 푸는 방법이다.

$$
f(\mathbf{w}) + g(\mathbf{w})
$$

형태로 함수가 분리될 수 있을 때, $f(\mathbf{w})$는 미분 가능한 항, $g(\mathbf{w})$는 L1 노름처럼 미분 불가능하지만 볼록(proximal operator를 적용할 수 있는)한 항으로 간주한다. 반복 과정에서 $f(\mathbf{w})$에 대한 경사하강을 수행하고, $g(\mathbf{w})$에 대해서는 proximal 연산(예: 소프트 임계값화)을 적용한다. Elastic Net, Group Lasso, Fused Lasso 등에서도 이러한 방식의 해석 및 알고리즘 적용이 가능하다.

#### 모델 선택과 교차검증

Ridge, Lasso, Elastic Net 등의 정규화 회귀에서는 $\lambda$, $\alpha$ 같은 하이퍼파라미터가 결정적이다. 이를 어떻게 선택하느냐가 모델의 일반화 성능에 지대한 영향을 미친다. 보편적으로는 교차검증(cross validation)을 통해 최적 하이퍼파라미터를 탐색한다. 예컨대 $k$-겹 교차검증을 수행하여 각 하이퍼파라미터 후보에 대해 평균 검증오차(validation error)를 비교하고, 가장 작은 하이퍼파라미터를 선택한다.

#### 시각적 예시

Lasso와 Ridge, 그리고 그 혼합형인 Elastic Net의 정규화 영역을 2차원으로 볼 때, L1 노름(마름모)과 L2 노름(원)의 결합 형태가 된다. 이를 간단히 도시하면 다음과 같은 다이어그램을 mermaid로 표현할 수 있다.

{% @mermaid/diagram content="flowchart LR
A((L1: 마름모)) --> B((교점))
B((교점)) --> C((L2: 원))
style A fill:#ffdddd,stroke:#ff5555,stroke-width:2px
style C fill:#ddddff,stroke:#5555ff,stroke-width:2px
style B fill:#ffffff,stroke:#000000,stroke-width:2px" %}

각 정규화 항의 등고선(contour)이 서로 다른 기하학적 형태를 가지므로, 최소제곱 잔차 오차의 타원 등고선과 만나는 지점이 달라진다. 그 지점의 결정 방식이 계수 값에 중요한 영향을 미친다.

#### Bayesian 관점에서의 정규화

Ridge 회귀와 Lasso 회귀 등 정규화 항을 추가하는 방식은, 확률론적 해석에서 사전분포(prior distribution)를 도입하는 Bayesian 회귀분석과 자연스럽게 연결된다. 예를 들어, Ridge 회귀에서 L2 항을 추가하는 것은 $\mathbf{w}$에 대해 정규분포(prior)를 가정하는 것과 동등하며, Lasso 회귀에서 L1 항을 추가하는 것은 $\mathbf{w}$에 대해 라플라스(Laplace) 분포를 사전분포로 가정하는 것에 해당한다.

고전적 선형회귀를 최소제곱 오류함수와 정규(가우시안) 오차항 가정으로부터 유도할 수 있듯이, Ridge와 Lasso도 다음과 같은 Bayesian 해석이 가능하다.

* Ridge 회귀: 사후분포(posterior)가 정규 사전분포와 정규 오차모형의 곱으로 표현되며, 결과적으로 $\mathbf{w}$에 대한 MAP(Maximum A Posteriori) 해가 L2 페널티를 갖는 형태가 된다.
* Lasso 회귀: 사후분포(posterior)에 라플라스 사전분포와 정규 오차모형이 주어지면, MAP 해가 L1 페널티를 가진 형태로 나타난다.

따라서 정규화 정도 $\lambda$를 제어하는 것은 Bayesian 관점에서 사전분포의 척도(scale) 매개변수에 대응한다. Bayesian 회귀는 사전분포뿐 아니라 사후분포 전체를 추론하여 불확실성을 반영할 수 있는 장점이 있으나, 대규모 데이터나 복잡한 사전분포의 경우 해석 및 계산 비용이 커질 수 있다.

#### 다중작업 회귀(Multi-task Learning)

Multi-task Learning(다중작업학습)은 여러 관련된 작업을 동시에 학습하면서 각 작업 간 유용한 정보를 공유하는 접근이다. 회귀 문제에서도 다중작업 버전의 Lasso(Group Lasso의 확장)나 Elastic Net을 활용할 수 있다. 예를 들어, $K$개의 서로 다른(하지만 연관 있는) 회귀 작업에서, 각 작업의 계수 벡터를 $\mathbf{w}^{(1)}, \mathbf{w}^{(2)}, \dots, \mathbf{w}^{(K)}$라 하자. 이때 다음과 같은 비용함수를 구성해, 모든 작업의 계수 벡터가 공유하는 구조적 희소성(sparsity)을 유도할 수 있다.

$$
\begin{align} J\_{\text{multi}}(\mathbf{w}^{(1)}, \dots, \mathbf{w}^{(K)})  &= \sum\_{k=1}^K \sum\_{i=1}^{n\_k} \bigl(y\_i^{(k)} - (\mathbf{x}*i^{(k)})^\top \mathbf{w}^{(k)} \bigr)^2  + \lambda \sum*{j=1}^d |\bigl(w\_j^{(1)}, \dots, w\_j^{(K)}\bigr)|\_2 \end{align}
$$

이는 $\lambda \sum\_j \sqrt{ \bigl(w\_j^{(1)}\bigr)^2 + \dots + \bigl(w\_j^{(K)}\bigr)^2 }$ 형태로, 서로 다른 작업에서 동일 특징(feature) 위치 $j$가 공유되는 구조를 가진다. 그 결과, 같은 특징이 여러 작업에서 동시에 0이 되거나 동시에 살아남도록(희소성) 유도한다.

#### 로버스트 회귀(Robust Regression)

최소제곱 관점에서는 이상치(outlier)에 민감하다. 정규분포 오차모형을 가정하기 때문에, 이상치가 있으면 계수가 크게 왜곡될 가능성이 있다. 이를 완화하기 위해서는 오차항의 분포를 좀 더 완만하게 설정하거나, Huber 손실 등 M-추정(M-estimator) 기법을 활용하기도 한다. 예를 들어, Huber 손실은 오차가 작은 구간에서는 제곱오차로, 오차가 큰 구간에서는 절댓값 오차로 처리하여 이상치에 대한 민감도를 줄인다. L1, L2 정규화와 결합하여 로버스트 성능을 확보할 수 있다.

#### Python 예제 코드: Ridge, Lasso, Elastic Net

아래는 Python(scikit-learn)에서 Ridge, Lasso, Elastic Net 모델을 간단히 비교하는 예시 코드다.

```python
# 랜덤 시드 고정
np.random.seed(0)

# 가상 데이터 생성
N = 100
X = np.random.randn(N, 5)
w_true = np.array([2.0, 0.0, -1.0, 0.0, 1.5])
y = X @ w_true + 0.5 * np.random.randn(N)

# 학습/검증용 데이터 분할
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.3)

# Ridge, Lasso, Elastic Net 정의
ridge = Ridge(alpha=1.0)
lasso = Lasso(alpha=0.1)
enet = ElasticNet(alpha=0.1, l1_ratio=0.5)

# 학습
ridge.fit(X_train, y_train)
lasso.fit(X_train, y_train)
enet.fit(X_train, y_train)

# 예측
y_pred_ridge = ridge.predict(X_val)
y_pred_lasso = lasso.predict(X_val)
y_pred_enet = enet.predict(X_val)

# 결과 비교
print("True coefficients:", w_true)
print("Ridge Coeffs:", ridge.coef_)
print("Lasso Coeffs:", lasso.coef_)
print("ElasticNet Coeffs:", enet.coef_)
print("Ridge MSE:", mean_squared_error(y_val, y_pred_ridge))
print("Lasso MSE:", mean_squared_error(y_val, y_pred_lasso))
print("ElasticNet MSE:", mean_squared_error(y_val, y_pred_enet))


```

위 예제는 간단한 회귀 데이터를 이용해 Ridge, Lasso, Elastic Net을 모두 학습하고, 예측 성능(평균제곱오차)과 계수 추정값을 비교한다. Ridge는 모든 계수가 완전히 0이 되지는 않는 특징이 있고, Lasso는 일부 계수를 0으로 만들어 희소해진다. Elastic Net은 L1과 L2 효과를 혼합하여 Ridge와 Lasso의 중간 양상을 보인다.

#### 현대적 응용

딥러닝이나 고차원 데이터 분석에서도 Ridge, Lasso 같은 정규화 개념은 널리 활용된다. 특히 신경망 가중치를 L2로 정규화(Ridge)하는 기법은 weight decay로 알려져 있으며, 드롭아웃(dropout)과 함께 모델의 과적합을 방지하는 주요 요소로 사용된다. L1 노름 기반의 sparse coding, autoencoder 등은 변수 선택 또는 희소 가중치 학습의 관점으로 확장된다. Elastic Net, Group Lasso, Fused Lasso는 생물정보학, 경제학, 이미지 처리, 시계열분석 등 다양한 응용 분야에서 구조적 희소성, 계수 스무딩 등을 목적으로 광범위하게 적용된다.
