[머신러닝] Lecture 04 Linear Regression with multiple variables

이재호·2025년 2월 28일

머신러닝

목록 보기
4/18

https://www.youtube.com/watch?v=ViTUqw8kXPQ&list=PLiPvV5TNogxIS4bHQVW4pMkj4CHA8COdX&index=4

이전에는 single variable에 대한 linear regression에 대해서만 알아보았다. 그렇다면 muti-variable에 대해서는 어떻게 적용할 수 있을까.
아래 그림과 같이 총 4개의 feature 종류와 하나의 y값을 갖는 데이터셋을 생각해보자.

  • mm : 데이터셋의 총 개수. (위 예시에서는 47개)
  • nn : feature의 종류. (위 예시에서는 4개)
  • xix^{i} : ii번째 feature 벡터.
  • xjix_j^{i} : ii번째 feature 벡터 중 jj번째 feature.

위 예시에서는 feature가 4개이므로 가설 함수 역시 그에 맞춰서 작성해야 한다.
즉, h(x)=θ0+θ1x1+θ2x2+θ3x3+θ4x4h(x) = \theta_0 + \theta_1x_1 + \theta_2x_2 + \theta_3x_3 + \theta_4x_4 처럼 표시해야 한다.

  • parameter의 종류 수를 feature의 종류 수와 맞춰 주었다.

그리고 θ0\theta_0에 대해서는 왜 feature를 부여하지 않는지에 의문점이 들 수 있는데,
편의를 위해서 x0=1x_0=1이라고 정의하기 때문이다.
아래 그림처럼 feature 벡터 xx와 parameter 벡터 θ\theta를 정의하여 multi-variable에 대한 linear regression을 진행할 수 있다.

  • feature 벡터 xx : x=[x0x1x2..xn]Rn+1x=\begin{bmatrix}x_0\\x_1\\x_2\\.\\.\\x_n\end{bmatrix} \in \mathbb{R}^{n+1} (벡터 xxn+1n+1 차원)
    여기서 차원이 n+1n + 1인 이유는 feature들의 개수 nnx0x_0에 대한 처리로 +1이 된 것이다.
  • parameter 벡터 θ\theta : θ=[θ0θ1θ2..θn]Rn+1\theta=\begin{bmatrix}\theta_0\\\theta_1\\\theta_2\\.\\.\\\theta_n\end{bmatrix} \in \mathbb{R}^{n+1} (벡터 θ\thetan+1n+1 차원)
  • 그리고 h(x)=θ0+θ1x1+θ2x2+...+θnxnh(x) = \theta_0 + \theta_1x_1 + \theta_2x_2 + ... + \theta_nx_{n}에 대해서 벡터로 간단하게 표시하여,
    h(x)=θTxh(x) = \theta^Tx 처럼 나타낼 수 있다.
    여기서 θ\theta에 대해 Transpose를 적용하여야 수식을 행렬로 표현할 수가 있다.

그렇다면 multipe-features의 cost function에 대한 gradient descent는 어떻게 할 수 있을까?
다음 그림을 살펴보자.

  • 이전에 봤던 single-feature cost function과 크게 다를 게 없다. 차이가 있다면 벡터로 표현이 된다는 점이다.
  • 마찬가지로 cost function을 J(θ0,θ1,...,θn)J(\theta_0, \theta_1, ..., \theta_n)보다는 편하게 J(θ)J(\theta)로 작성한다.
  • 그리고 모든 parameter θj\theta_j에 대해 동시에 gradient descent를 적용한다.

구체적으로 살펴보면 아래 그림과 같다.

  • 좌측 그림은 이전에 했던 single-feature에 대한 gradient descent 예시이다.
  • 우측 그림은 multiple-features에 대한 gradient descent 예시이다.
  • 크게 차이점은 없다. 다만, multiple-features에서는 θj\theta_j의 종류가 많다는 차이만 존재한다.
  • 그림의 우측 아래 부분은 ii번째 학습 데이터셋에서, 모든 parameter θj\theta_j에 대해 gradient descent를 적용하는 과정을 하나씩 나열한 것이다.

그렇다면 feature 종류 간에 값의 범위 차가 매우 크다면 어떨까? 아마 모델이 제대로 학습을 하지 못할 것이다. 왜냐하면 값이 큰 feature의 영향만 크게 받을 것이기 때문이다.
따라서, feature 데이터들의 범위를 정해주어야 한다. 이를 feature scailing이라 한다.
아래 그림은 feature scaling을 나타내는 그림이다.

  • feature x1x_1은 값의 범위가 0~2000 이다. 반면에, feature x2x_2는 값의 범위가 1~5 이다.
  • 따라서 만약 그대로 cost function J(θ)J(\theta)를 적용한다면 왼쪽 그림과 같이 θ1\theta_1θ2\theta_2의 균형이 맞지 않을 것이다.
  • 이를 위해 값의 범위를 0~1로 지정해주자.
  • 오른쪽 그림처럼, 모든 feature 데이터에 대해서 x=xmax(x)x=\frac{x}{max(x)}식을 적용한다.
    이렇게 함으로써 모든 feature 데이터의 값의 범위는 0~1로 지정될 것이다.
  • 따라서 feature scailing을 적용하여 local optima를 찾는 J(θ)J(\theta)를 그래프로 그리면 오른쪽 그림처럼 균형 잡힌 모습을 볼 수 있을 것이다.

그리고 feature scaling은 무조건 0~1의 범위가 갖도록 할 필요가 없다.
아래 그림처럼 "-1 ~ 1", "0 ~ 3", "-2 ~ 0.5" 등으로 해도 문제는 없다.

  • 하지만, 값의 범위가 너무 크거나 너무 작지 않도록 주의해야 한다. 이 경우는 문제가 된다.

feature scaling의 대표적인 방법 중 "mean normalization(평균 정규화)" 방법이 있다.
아래 그림처럼 데이터들의 평균이 0이 되도록 만드는 방법이다.
수식은 아래와 같다.
x=xμsx = \frac{x - \mu}{s}

  • μ\mu : 평균값
  • ss : (maxmin)(max - min) 또는 σ\sigma (Standard Deviation, 표준 편차)

다음으로 Gradient Descent를 구하는 실질적인 방법을 알아보자.
먼저, 아래 그림과 같이 gradient descent 식을 볼 수 있다.
다만 어떻게 grdient descent가 올바르게 작동하는지, 그리고 learning rate α\alpha를 어떻게 잘 선택하는지 방법을 모른다. 따라서 이런 내용을 알아본다.

먼저 gradient descent가 잘 동작하는 예시는 아래 그림과 같다.
cost function J(θ)J(\theta)가 gradient descent 과정이 반복될 수록 값이 0에 가까워지는 것을 볼 수 있다.
그리고 J(θ)J(\theta)의 값이 10310^{-3}보다 작아지면, 즉, J(θ)<103J(\theta) < 10^{-3}을 만족하면 local optima를 찾았다고 정의하여 gradient descent 과정을 그만둔다.
이처럼 10310^{-3}과 같이 기준이 되는 값을 ϵ\epsilon (입실론)이라고 한다.

반면에, 아래 그림은 gradient descent가 잘 동작하지 않는 예시이다.

  • 반복 횟수가 증가할수록 cost function J(θ)J(\theta)의 값이 증가하거나,
  • 반복 횟수가 증가할수록 cost function J(θ)J(\theta)의 값이 수렴하지 못하고 왔다 갔다 하거나,
  • cost function J(θ)J(\theta)의 값이 local optima에서 점점 멀어지는 경우가 있다.

    그리고 이러한 문제를 해결하기 위해서, learning rate인 α\alpha의 값을 낮춰줘야 한다.
    하지만 α\alpha 값을 너무 낮추면 local optima를 찾는 데 매우 많은 시간이 소요되므로 주의할 필요가 있다.

요약하자면 다음과 같다.

  • 만약 learning rate α\alpha가 너무 작다면 local optima로 수렴하는 데 시간이 매우 많이 걸리는 단점이 있고,
  • 만약 learning rate α\alpha가 너무 크면 cost function J(θ)J(\theta)의 값은 반복할 수록 local optima에서 멀어진다는 단점이 있다.

    따라서 강의에서 Andrew Ng 교수님은 α\alpha값을 0.0010.001과 같이 작은 값으로 시작해서 조금씩 조정하는 것을 추천하셨다.

다음은 linear가 아닌 non-linear에 대한 예시이다.
아래 그림과 같이 h(x)h(x)는 집 가격을 예측하는 함수이다.
하지만 x1x_1x2x_2를 하나로 합쳐서 AreaArea라는 새로운 feature로 정의를 내릴 수 있다.
그리고 이렇게 정의를 내리면 h(x)=θ0+θ1xh(x)=\theta_0+\theta_1x와 같은 수식으로 고칠 수 있다.

다음은 다항식에 대한 regression 모습을 보여준다.
h(x)h(x)에서 feature xx의 차수를 어떻게 정의하냐에 따라 그래프 모양이 달라질 수 있다.
또한, 여기서 feature scaling이 중요한 이유도 알 수 있는데, 값의 범위가 1~1000인 feature에 대해서 제곱, 세제곱 등 차수에 대해서 연산을 하다 보면 값의 범위가 기하급수적으로 늘어날 것이다. 따라서 feature scaling이 중요하다.

다항식의 예측 함수 h(x)h(x)를 어떻게 정의하느냐는 매우 다양하다.
아래 그림처럼 제곱 다항식으로 혹은 루트 다항식 등 다양하게 표현할 수 있다. 아래 그림의 경우 루트로 했을 때 데이터를 더 fit하는 그래프를 얻을 수 있을 것이다.

gradient descent는 반복을 통해서 cost function J(θ)J(\theta)의 값을 천천히 줄여나가며 최적의 θ\theta를 찾는 방법이다.
반면에 "Norma equation"(정규 방정식)은 최적의 θ\theta를 분석적인 방법으로 찾는 것을 의미한다.

다음으로 아래 그림은 normal euqation에서 어떻게 최적의 θ\theta를 구하는지를 보여주고 있다.
먼저, 단순하게 θ\theta 벡터가 1차원이라고 가정해보자. 윗부분의 수식처럼 cost function J(θ)J(\theta)을 미분하여 미분값이 0이 되는 θ\theta 값을 찾으면 되겠다.
그렇다면 아래 부분처럼 θ\theta 벡터의 차원이 n+1n + 1차원이라고 가정해보자.
마찬가지로 모든 θj\theta_j에 대해서 cost function J(θ)J(\theta)의 미분값이 0이 되는 θj\theta_j를 찾으면 되겠다.

아래 그림과 같은 예시를 보자.
데이터 셋의 총 개수는 m=4개이며, feature의 종류는 n=4개이다.
그리고 이를 행렬로 표현하면 X=[12104514511416324011534323018522136]X=\begin{bmatrix}1 & 2104 & 5 & 1 & 45 \\ 1 & 1416 & 3 & 2 & 40 \\ 1 & 1534 & 3 & 2 & 30 \\ 1 & 852 & 2 & 1 & 36 \\ \end{bmatrix}, y=[460232315178]y=\begin{bmatrix}460 \\ 232 \\ 315 \\ 178\end{bmatrix}과 같이 나온다.

그리고 맨 아래 수식처럼 θ=(XTX)1XTy\theta = (X^TX)^{-1}X^Ty와 같은 수식으로 최적의 θ\theta값을 찾을 수 있다.

아래 그림을 보자.
m개의 데이터셋과 n개의 features를 가정한다.
그리고 ii번째 데이터셋의 feature 벡터 x(i)x^{(i)}x(i)=[x0(i)x1(i)..xn(i)]x^{(i)}=\begin{bmatrix}x_0^{(i)} \\ x_1^{(i)} \\ . \\ . \\ x_n^{(i)}\end{bmatrix}처럼 나온다.
그리고 벡터 xix^i를 transpose하여 XX 행렬을 만든다.

예시로, 만약 xi=[1x1i]x^{i}=\begin{bmatrix}1 \\ x_1^i\end{bmatrix}라고 해보자. 여기서 1은 x0x_0의 값으로 θ0\theta_0에 대한 계수이다.
그러면 하단 우측 그림처럼 XXyy를 구할 수 있다. XX에서 xm(i)x_m^{(i)}와 같이 표시했는데, 아마 오타인 것 같다.
올바르게 하면 X=[1x1(1)1x1(2)....1x1(m)]X=\begin{bmatrix}1 & x^{(1)}_1 \\ 1 & x^{(2)}_1 \\ . & . \\ . & . \\ 1 & x^{(m)}_1 \end{bmatrix}와 같이 나올 것이다.
그리고 역시 θ=(XTX)1XTy\theta = (X^TX)^{-1}X^Ty 수식으로 최적의 θ\theta를 찾을 수 있다.

gradient descent와 noraml equation을 비교 정리하면 다음과 같다.

  • gradient descent는 learning rate α\alpha를 잘 선택해야 하고, 반복 연산이 필요하다는 단점이 있다.
  • 반면에 noraml equation은 α\alpha 값을 선택할 필요가 없고, 반복 연산이 필요없다는 장점이 있다.
  • 하지만 feature 종류가 많을 때 (n이 매우 클 때) gradient descent는 잘 동작하지만, noraml equation은 n이 매우 클 때 연산 시간이 매우 오래 걸린다는 단점이 있다.
profile
천천히, 그리고 꾸준히.

0개의 댓글