릿지와 라소

안녕하세요.
어제는 선형 회귀의 대표적인 모델인 보통 최소 제곱법(OLS)에 대해 말했다.
이번에는 Ridge 회귀와 Lasso 회귀에 대해 쓰려고합니다.

준비



선형 모델에 의한 회귀란 말 그대로 선형 함수를 이용하여 목적 변수를 예측하는 것입니다.
그리고 목적 변수는 이하의 식으로 나타낼 수 있었다.
y' = w_1x_1 + w_2x_2 + \dots + w_mx_m (x_1, x_2, \dots, x_m:説明変数, y': 予測値, w_1,w_2, \dots, w_m : 回帰係数)

절편도 추가한 형태로 쓰면,
y' = w_0x_0 + w_1x_1 + w_2x_2 + \dots + w_mx_m (w_0, 切片: x_0 = 1)

벡터로 쓰면,
y' = {\bf x^T}{\bf w}

x의 벡터(설명 변수)는 하나만 시간이 아닐 수 있으므로 x는 행렬의 형태가 됩니다.
즉,
\left(
    \begin{array}{cccc}
      y_{1} \\
      y_{2} \\
      y_{3} \\
      \vdots \\
      y_{n}

    \end{array}
  \right)

= \left(
    \begin{array}{cccc}
      1 & x_{11} & x_{21} & \ldots & x_{m1} \\
      1 & x_{12} & x_{22} & \ldots & x_{m2} \\
      \vdots & \vdots & \vdots & \ddots & \vdots \\
      1 & x_{1n} & x_{2n} & \ldots & x_{mn}
    \end{array}
  \right)
\left(
    \begin{array}{cccc}
      w_{1} \\
      w_{2} \\
      w_{3} \\
      \vdots \\
      w_{m}

    \end{array}
  \right)
\\
y = {\bf Xw} \dots (1)

최소 제곱법


L = \sum_{i=1}^{n}(y_i - y'_i)^2 

이 손실 (오차) 함수 L을 최소화하도록 파라미터를 결정한다.
상세한 설명은 생략하지만, 이 식을 변형과 (1)의 식을 사용하면
L = (y - {\bf Xw})^{T}(y - {\bf Xw})

라고 쓸 수 있다.

이것이 최소 제곱법입니다.
그러나 이 식이라면, w의 파라미터가 커지는 것으로, 과학습을 일으키기 쉬워집니다.

이 L에 정규화항을 더한 것이 아래에서 설명하는 Ridge와 Lasso 회귀입니다.

식으로 쓰면
L = (y - {\bf Xw})^{T}(y - {\bf Xw}) + a \times (L_pノルム) 

a는 고 파라미터라고 불리며, 정규화의 강도를 제어하는 ​​스칼라입니다.
즉, 클수록 정규화를 강하게 할 수 있습니다. 그러나 너무 강하면 적합 부족을 일으키므로 주의는 필요합니다.

여기에서
L1 규범의 경우 Lasso 회귀
L2 규범의 경우 Ridge 회귀입니다.
글쎄, 재미있어.

L1 및 L2 규범에 대해서는 여기에서

간단히 말하면
L1 놈은 맨해튼 거리라고 불리며, 벡터 성분끼리의 차이의 절대값의 합이 된다.
L2 놈은 유클리드 거리라고 불리며, 벡터 성분끼리의 차이의 제곱합의 제곱근이 된다.

리지 (릿지) 회귀



릿지 회귀는 선형 모델에 의한 회귀 중 하나입니다.
리지 회귀는 전술 한 바와 같이, 정규화가 제곱근이기 때문에, 파라미터 w의 각 성분을 전체적으로 매끄럽게 할 수있다.
이유는
루트 중에서는 큰 숫자를 0에 가깝게하는 것이 최소화되기 쉽기 때문이다.

수식으로 쓰면,
L = (y - {\bf Xw})^{T}(y - {\bf Xw}) + a ||{\bf w}||_2^2

Lasso(라소) 회귀



라소 회귀도 선형 모델에 의한 회귀 중 하나.
라소 회귀의 정규화 항의 부분은 단순한 절대치의 합이기 때문에, 일부 변수는 0이 되는 경우가 많다.
수식으로 쓰면,
L = \frac{1}{2}(y - {\bf Xw})^{T}(y - {\bf Xw}) + a ||{\bf w}||_1

요약



수학은 정말 어렵습니다. 저도 곳곳이 있습니다.
하지만 제일 전하고 싶은 곳은,
라소 회귀와 리지 회귀의 차이는 L1 놈과 L2 놈의 차이인 것입니다.
L1 놈과 L2 놈을 누르면 각각의 회귀의 특징이 보인다고 생각합니다.
아직도 공부 부족입니다만, 노력합니다・・・.

추가 (샘플 코드)



from sklearn.linear_model import Ridge
from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split

import mglearn
import numpy as np
import matplotlib.pyplot as plt


X, y = mglearn.datasets.make_wave(n_samples=40)
x_for_graph = np.linspace(-3, 3, 100)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

ridge = Ridge().fit(X_train, y_train)
lasso = Lasso().fit(X_train, y_train)

fig, ax = plt.subplots()

ax.scatter(X_train, y_train, marker='o')

ax.plot(x_for_graph, ridge.coef_ * x_for_graph + ridge.intercept_, label='Ridge')
ax.plot(x_for_graph, lasso.coef_ * x_for_graph + lasso.intercept_, label='Lasso')

ax.legend(loc='best')

print("Training set score for Ridge: {:.2f}".format(ridge.score(X_train, y_train)))
print("test set score: {:.2f}".format(ridge.score(X_test, y_test)))

print("Training set score for Lasso: {:.2f}".format(lasso.score(X_train, y_train)))
print("test set score: {:.2f}".format(lasso.score(X_test, y_test)))
plt.show()

결과

Training set score for Ridge: 0.69
test set score: 0.64
Training set score for Lasso: 0.40
test set score: 0.55

데이터 변수가 너무 적습니다. . . 웃음

좋은 웹페이지 즐겨찾기