Machine Learning/ 선형 회귀

주의) 이 페이지에서는 공식의 유도 과정 같은 것은 정리하지 않는다. 공식의 유도 과정은 <코세라 강의> 참조.

선형 회귀 (Linear Regression)

https://en.wikipedia.org/wiki/Linear_regression

  • 연속적인 속성의 값을 예측하기 위한 방법.
    • 집의 크기가 얼마이고 위치가 어디일 때 집값을 얼마일 것인가에 대한 예측한다.
  • 분포된 데이터의 결과값을 표현하는 선을 긋고 –위 이미지의 빨간색 선– 그 선을 통해 새로운 데이터가 입력 되었을 때 그 결과값을 예측한다.

선형 회귀의 가설 함수

https://www.coursera.org/learn/machine-learning/

  • 가설 함수는 데이터의 분류에 해당하는 feature와 그 feature의 파라미터로 이루어진다.
    • 어떤 집값에 대한 것이라면 feature는 집의 크기, 집의 위치, 집의 층 수, 창문 개수, 마당 여부, 주차장 여부 등이 각 feature가 된다.
  • 통상적으로 feature는 x로 표현되어 각각의 feature는 x1, x2, x3.. 식으로 표기한다.
    • feature는 데이터를 정의하는 사람이 정하면 되기 때문에, x2, x3 같은 형태로도 만들 수 있다.
  • 파라미터는 각 feature에 적용되어 feature의 강도를 조절하는 값으로 통상적으로 세타(θ)로 표기하며, 붙어 있는 feature의 번호에 따라 θ1, θ2, θ3… 으로 표기한다.
    • feature가 없는 세타도 별도로 주는 경우가 있는데 이때 세타는 θ라고 표기한다. –이때의 feature는 x0라고 하고 그 값은 1로 둔다.
  • 이를 바탕으로 하는 선형회귀 가설함수는 다음과 같은 형태가 된다.
    • h_{\theta}(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_3^2 + ...
  • 가설함수가 데이터를 제대로 나타내지 못하는 경우 –위 이미지의 가장 좌측– 과소적합(Underfitting) 이라 하고, 시험용 데이터에만 과도하게 적합한 경우 –위 이미지의 가장 우측– 과적합 (Overfitting)이라고 한다.

선형 회귀의 비용 함수

https://en.wikipedia.org/wiki/Linear_regression

  • 코세라 강의에서는 선형회귀의 비용함수를 모든 데이터에 대하여 가설함수에 대입한 값과 실제 결과값의 차이를 제곱하여 합산한 후 평균을 내는 것으로 사용한다. –정확히는 평균값을 추가로 1/2 한다.
    • J(\theta_0, \theta_1, \theta_2 ... \theta_n) = \frac{1}{2m} \sum_{i=1}^m (h_\theta (x_i) - y_i)^2

선형 회귀의 Gradient Descent

https://www.coursera.org/learn/machine-learning/

  • 가설함수의 각 파라미터(θ) 기준으로 비용함수를 편미분한 후 파라미터 α를 곱해 이전 파라미터 값에서 빼는 식으로 가설함수의 파라미터 값을 조절하면서 가설함수의 비용을 줄이는 방식을 사용한다.
    • \theta_j := \alpha \frac{\partial}{\partial \theta_j} J(\theta_0, \theta_1, \theta_2 ... \theta_n)
  • J(θ0, θ1, θ2 … θn)를 θj 에 대하여 편미분한 식은 \frac{1}{m} \sum_{i=1}^m (h_\theta (x_i) - y_i) x_i 와 같으므로 최종 식은 다음과 같다.
    • \theta_j := \alpha \frac{1}{m} \sum_{i=1}^m (h_\theta (x_i) - y_i) x_i
    • := 는 오른쪽의 값을 왼쪽의 변수에 대입하라는 의미.
    • x0은 1이므로, θj 가 0인 경우, 제일 뒤의 x는 사라진다.
    • α는 Learning Rate라고 불리는 파라미터 값인데, α값을 얼마로 정하느냐에 따라 Gradient Descent의 속도가 달라진다. 가설함수의 비용값이 최저에 가까운 상황에서 α값이 크면 최저점으로 수렴하지 못하는 상황이 발생할 수 있으니 주의.
  • Gradient Descent 알고리즘의 순서는 아래와 간다.
    1. 가설함수 hθ(x)를 만든다.
    2. 가설함수와 실제 y 값의 차이를 제곱하고 평균으로 나눈 비용함수를 만든다.
    3. 가설함수의 각 파라미터별로 비용함수를 편미분한 후 α를 곱해서 파라미터에서 뺀 후 파라미터를 업데이트 한다.
    4. 업데이트된 파라미터를 기존 가설함수에 대입하고 2-4 과정을 반복하며 가설함수의 비용을 최소화 한다.

https://www.coursera.org/learn/machine-learning/

  • 비용함수를 편미분한다는 개념이 중요한데, 편미분한다는 것은 결국 변화량을 계산한다는 것이고 변화량은 기울기를 의미하기 때문에, 위 과정을 반복하여 비용이 점점 줄어들면 기울기가 완만해져서 비용이 더 줄어들지 않는 지점에 도달하게 된다. 그 지점을 최적점이라고 한다.
    • 최적점이 전역 차원에서 최적일 경우 Global Optima 이라고 하고, 지역 차원에서 최적일 경우 Local Optima이라고 한다.
    • 최적점이 1개인 경우를 convex 라고 한다.

선형 회귀의 Feature Scaling

  • 가설함수의 feature들은 특성상 크기에 편차가 크게 마련인데, –방의 갯수를 나타내는 feature와 집의 면적을 나타내는 feature는 크기에 차이가 발생할 수 밖에 없다– feature 별로 크기에 차이가 크면 Gradient Descent 등의 알고리즘을 적용하는데 불편한 부분이 많기 때문에 크기를 일정하게 조정하는데 이를 Feature Scaling이라고 한다.
  • feature를 조절하는 방법은 여러가지가 있지만 코세라 강의에서는 아래와 같은 방법을 이용한다.
    • (xi – 해당 feature의 평균값) / (해당 feature의 max 값 – 해당 feature의 min 값)
    • max – min 값이 아니라 표준편차를 써도 좋다고 한다.

선형 회귀의 Regularization

https://www.coursera.org/learn/machine-learning/

  • 가설함수를 세울 때  Underfitting이나 Overfitting을 피하기 위해 feature를 조절하는 방법도 있지만, 파라미터인 θ를 조절하는 방법도 있다.
  • 가설함수의 비용함수를 구할 때 사용되는 모든 파라미터의 제곱을 합한 후 파라미터를 곱한 값을 더하여 θ를 조절하는 것을 Regularization이라고 한다.
    • J(\theta_0, \theta_1, \theta_2 ... \theta_n) = \frac{1}{2m} [ \sum_{i=1}^m (h_\theta (x_i) - y_i)^2 + \lambda \sum_{j=1}^n \theta_j^2 ]
    • λ는 θ2의 합에 곱해지는 파라미터로 값이 커질수록 Underfitting이 될 가능성이 커지고, 값이 0에 가까울수록 Overfitting이 될 가능성이 커진다.
  • Regularization을 적용한 비용함수로 Gradient Descent를 구하는 경우 식은 다음과 같이 변경 된다.
    • θ0인 경우
      • \theta_0 := \theta_0 - \alpha \frac{1}{m} \sum_{i=1}^m (h_\theta (x_i) - y_i) x_0
    • 그 외 경우
      • \theta_j := \theta_j - \alpha [ \frac{1}{m} \sum_{i=1}^m (h_\theta (x_i) - y_i) x_i + \frac{\lambda}{m} \theta_j ]

선형회귀의 Normal Equation

https://www.coursera.org/learn/machine-learning/

  • Gradient Descent가 다소 기계적인 방법으로 최적값을 찾는 알고리즘인 반면, 해석적인 방법으로 최적값을 찾는 방법이 있는데 그것이 바로 Normal Equation이다.
  • Normal Equation은 실제 데이터들을 행렬에 담은 후에 계산하는 방법을 사용한다.
    • 각 feature를 담은 데이터셋 매트릭스를 X라고 하고, 그 결과 값을 y 벡터로 둔 후, 다음의 연산을 통해 파라미터 θ의 벡터를 구한다.
    • \theta = (X^T X)^{-1} X^T y

https://www.coursera.org/learn/machine-learning/

  • Normal Equation에 Regularization을 적용하는 경우 식은 다음과 같다.
    • \theta = (X^T X + \lambda M)^{-1} X^T y
      • 위 식에서 M은 (n+1) x (n+1) 크기의 행렬로 첫 번째 원소만 제외하고 대각선으로 1이고 나머지는 모두 0인 행렬이다. 위 이미지 참조
  • Normal Equation은 Gradient Descent와 달리 θ를 한 번에 구할 수 있지만 역행렬을 구해야 하므로 파라미터의 수가 많아지면 Gradient Descent 보다 느리다는 단점이 있다.
    • n x n 행렬의 역행렬은 O(n3)의 시간이 걸린다. feature의 개수가 10,000이 넘으면 Gradient Descent를 사용하는 편이 낫다고 한다.
    • Octave 같은 프로그램에서는 pinv(pseudo inverse) 같은 함수를 사용하면 역행렬을 구할 수 있다.

  • 위에서 선형 회귀 문제를 풀 때 Σ를 통한 반복문으로 계산을 하였지만, 행렬과 벡터를 이용하면 –Vectorization– 반복문 없이 한 번에 문제를 풀 수 있고, 식 자체도 Normal Equation처럼 대단히 깔끔해진다.
  • 더불어 행렬과 벡터는 컴퓨터의 병렬처리를 이용하면 훨씬 빠르게 계산할 수 있으므로 머신러닝 문제를 풀 때는 가능한 행렬과 벡터를 이용하는 방법을 추천한다. 행렬과 벡터에 익숙해지자.
[ssba]

The author

지성을 추구하는 디자이너/ suyeongpark@abyne.com

댓글 남기기

This site uses Akismet to reduce spam. Learn how your comment data is processed.