[개발자를 위한 실전 선형대수학] 11.2 다항식 회귀

[chapter11] 최소제곱법 응용 : 실제 데이터를 활용한 최소제곱법

1. 다항식 회귀

다항식 회귀(polynomial regression)는 일반 회귀와 비슷하지만 독립변수인 x축 값을 더 높은 차수로 끌어올린 것이다.

즉 설계 행렬의 각 열 i는 $x^i$로 정의되며, 여기서 x는 일반적으로 시간 또는 공간이지만 인구와 같은 다른 변수일 수도 있다.

수학적 모델은 아래와 같다.

$$ y = \beta_0x^0 + \beta_1x^1 + \cdots + \beta_nx^n $$

 여기서 $x^0 = 1$은 모델의 절편이 되는데, 이러한 경우를 제외하고는 예측 데이터와 관측 데이터 간의 제곱 차이를 최소화 하는 $\beta$ 값을 찾는 것이 목표인 일반 회귀 분석이다.

n차 다항식에는 절편을 포함해 n+1개의 회귀변수가 있으며, 다항식 함수는 관측 데이터를 모델링하기 위한 기저벡터이다.

특수한 설계 행렬을 제외하고 다항식 회귀는 다른 회귀와 완전히 동일하다.

왼쪽 역을 사용하여 회귀변수의 가중치 조합이 관측 데이터와 가장 잘 일치하도록 하는 계수 집합을 구한다.

ChatGPT와 다시 한 번 이해해보기 😅

다항식 회귀는 선형 회귀와 같은데, 입력값을 제곱, 세제곱 해서 사용하는 것이다.

앞에서 봤던 선형회귀는 아래와 같은 모습이다.

$$ y = \beta_0 + \beta_1x $$

그래프로 그리면 직선 형태이고, x가 커질수록 일정한 비율로 y가 변한다.

이 때 데이터가 곡선의 형태일때 다항식 회귀를 사용한다.

$$ y = \beta_0x^0 + \beta_1x^1 + \cdots + \beta_nx^n $$

요건 비선형 회귀라고 생각할 수 있는데, x에 대해선 곡선이나 $\beta$에 대해서는 선형이다.

설계행렬 관점으로 보면 X는 아래와 같다.

$$ X = \begin{bmatrix}
1 & x_1 & x^2_1 \\
1 & x_2 & x^2_2 \\
\vdots  & \vdots  & \vdots  \\
\end{bmatrix} , \beta = \begin{bmatrix}
\beta_0 \\
\beta_1 \\
\beta_2
\end{bmatrix} $$

그래서 결국 $ y = X\beta + \epsilon$의 형태가 된다.

즉, 다항식 회귀는 $x, x^2, x^3$을 새로운 변수처럼 추가해 사용하는 형태가 된다.

실제 데이터를 적용해보면 아래와 같다.

# 설계 행렬
X = np.zeros((N,4))
# 열 4개(다항식 차수 3까지)
for i in range(4): 
  X[:,i] = np.array(year)**i
  
# np.linalg.lstsq = 최소제곱법
# doubleTime = 실제관측값
beta = np.linalg.lstsq(X,doubleTime, rcond=None)
# beta[0]이 계수임
yHat = X@beta[0]

 

실행하면 아래와 같이 나온다.

여기서 y1은 실제 데이터고, y2는 예측값이다.

 

곡선을 적합시키는데에 다항식 회귀는 일반적으로 많이 사용되며, Numpy에는 이러한 모델을 만들고 적합시키는 전용 함수가 있다.

beta = np.polyfit(year, doubleTime, 3) # 3차다항식
yHat = np.polyval(beta, year)

2. 그리드 서치로 모델 매개변수 찾기

최소제곱법은 정확하고 빠르지만, 선형 모델 적합에만 작동한다.

모델 매개변수 식별에는 또 다른 최적화 방법인 그리드 서치(격자 검색)가 있다.

그리드 서치는 매개변수 공간을 샘플링하고 각 매개변숫값으로 데이터에 대한 모델 적합도를 계산한 다음 최고의 모델 적합도를 가지는 매개변숫값을 선택한다.

예를 들어 $y = x^2$ 함수의 최솟값을 찾는다고 하면, 그리드 서치 기법에서는 시험에 사용할 미리 정의된 x값 집합으로 시작한다.

(-2, -1, 0, 1, 2) 집합을 정해두고, 이를 그리드(격자)라 한다.

그 다음 각 격잣값에 대한 함수를 계산하여 y = (4,1,0,1,4)를 얻는다. 그러면 x=0일 때 y가 최소가 된다는 것을 알 수 있다.

그러나 그리드 서치가 항상 최적의 해를 구한다고 보장할 수는 없다. 

값 범위를 잘못 선택해 그리드를 (-1000, -990, -980, -970)이라고 가정한다면 x = -970일 때 최소화된다는 결론을 내릴 수 있다.

이처럼 그리드 서치에서는 범위와 해상도(격자 점 사이의 간격)가 모두 중요하다.

그리드 서치를 시각적으로 나타내면 아래 그림과 같다.

책 244p

최소제곱법으로 해결된다면 굳이 그리드 서치를 사용할 필요가 없지만, 그리드 서치는 비선형 모델에서 매개변수를 찾는 데 유용한 기법이다.

그리드 서치는 딥러닝의 대규모 모델의 경우 시간이 많이 소요될 수 있지만 병렬화를 통해 더 효율적으로 수행할 수 있다.

결론적으로 그리드 서치는 선형 방법을 적용할 수 없을 때 데이터에 모델을 맞추기 위한 비선형 방법이다.