Computer Science/Artificial Intelligence

[Machine Learning] Linear Regression Model | 선형 회귀 모델

lww7438 2022. 8. 22. 23:30

Linear Regression Model

 

선형 회귀 모델

 

- 입력 데이터에 대한 선형 함수를 만들어 예측을 수행하는 머신러닝 모델이다.

- 하나 혹은 그 이상의 Feature(특성)들이 Label에 미치는 영향을 추정하는 통계 기법을 기반으로 한다.

 

- 회귀가 통계학에서 갖는 의의는 아래 포스트를 참조하자.

 

* Regression (회귀) (URL)

 

[Statistics] Regression | 회귀

Regression 회귀 - 하나 혹은 그 이상의 독립변수(Feature)들이 종속변수(Label)에 미치는 영향을 추정하는 통계 기법이다. Types of Regression (회귀의 종류) - 회귀의 종류는 기준에 따라 아래와 같이 분류

dad-rock.tistory.com

 


Linear Regression (선형 회귀)

 

- \((X_1, X_2, \cdots, X_n)\)을 \(n\)차원의 확률 변수로 하여
  조건부 기댓값 \(X_1 = m_1(X_2, \cdots, X_n) = E(x_1 | X_2 = x_2, \cdots, X_n = x_n)\) 이 존재할 때,
  이를 "\(X_1\)의 \((X_2, \cdots, X_N)\)으로의 회귀 함수(회귀 곡선)" 이라 한다.

 

- 특히, \(m_1(x_2, \cdots, x_n) = \alpha + \beta_2x_2 + \cdots + \beta_nx_n\) 이면,
  "\(X_1\)의 \((X_2, \cdots, X_n)\) 으로의 회귀는 선형"이라고 한다.

 

- 즉, 두 변수 사이의 관계가 직교 좌표 상에서 직선으로 표시되는 관계를 '선형 회귀'라 한다.

 

- 선형 회귀는 일반적으로 모델의 예측과 정답 사이의 오차를 최소화하는
  학습 파라미터(계수) \(w\)를 도출해내는 것을 목표로 한다.

 

- 선형회귀에서의 계수를 찾기 위한 방법은 아래와 같다:

 

  • Ordinary Least Squares (OLS; 최소 제곱법)
     
  • Gradient Descent (경사 하강법)

 

 

 

Ordinary Least Squares (OLS; 최소 제곱법)

def OLS(x, y):
    w = np.sum((x-x.mean()) * (y-y.mean())) / np.sum((x-x.mean())**2)
    b = y.mean() - w * x.mean()
    return w, b

- Residual Error(잔차; \(|y - \widehat{y}|\))의 제곱의 합이 최소가 되는 Weight(기울기; \(w\))와 Bias(편향; \(b\))를 구하는 방법이다.

- 잔차 제곱의 합(\(\sum (y - \widehat{y})^2\))이 최소가 되는 w와 b는 편미분을 통해 도출해낸다.
  (각각의 편미분 값이 0인 w와 b에 대한 식을 연립방정식을 세워 계산한다.)

- 식 유도 과정이 간단하다.

- 데이터의 양이 방대해지면 계산량이 기하급수적으로 증가한다.

- 데이터에 Outlier가 있는 경우, 성능이 하락한다.

 

 

 

Gradient Descent (경사 하강법)

 

\(\large{H(x) = Wx + b}\)

(\(H\): Hypothesis)

 

\(\large{Cost(W, b) = {1 \over m} \sum\limits_{i=1}^{m} (H(x^{(i)}) - y^{(i)})^2)}\)

(\(Cost\) 함수로 MSE를 이용)

 

- Hypothesis에 의한 Cost가 최소화되는 직선을 구하는 방법이다.

- 비용을 구하기 위한 Cost 함수로는 일반적으로 MSE가 사용된다. (본 포스트 하단 참조)

- 경사 하강법은 선형회귀 함수 이외에도 Loss 함수를 최소화시키는 계수를 찾는데도 사용된다.

- Cost 함수를 미분하여 Cost가 낮아지는 방향으로 w 값을 변경해 나간다.

- 모든 학습 데이터에 대해 반복적으로 Cost 함수를 최소화하기 위한 값을 업데이트하기 때문에 수행이 오래걸린다.

 

Implementation of Gradient Descent (경사하강법 구현 및 시각화 예시)

X = np.arange(50)
Y = (2 * X) + 10 * np.random.randn(50) # 'Y = 2X + noise'
plt.plot(X, Y, 'b.')  				   # Visualization for 'Y = 2X + noise'

w_range = np.arange(0.1, 4.1, 0.1)
costs = []

for w in w_range:
    h = w * X
    cost = 1 / 50 * np.sum( (h-Y) ** 2 )
    costs.append(cost)
    
plt.plot(w_range, costs, 'r.')  # Visualization for cost change with w

for w, cost in zip(w_range, costs):
    h = w * X
    gradient = 2 / 50 * np.sum( (h-Y) * X )
    plt.plot(w_range, gradient * (w_range - w) + cost)
    plt.axis([0, 4, 0, 3000])
plt.show()

for w, cost in zip(w_range, costs):
	plt.plot(w_range, costs, 'r.')
    h = w * X
    gradient = 2 / 50 * np.sum( (h-Y) * X )
    plt.plot(w_range, gradient * (w_range - w) + cost)
    plt.axis([0, 4, 0, 3000])
    plt.show()

 


Measurement Metrics of Linear Regression Model (선형 회귀 모델의 성능 측정 지표)

 

- 선형 회귀 모델에서 사용하는 오류 측정 방법은 아래와 같다:

 

  • R-Squared (Coefficient of Determination)
  • MAE (Mean Absoulte Error)
  • MAPE (Mean Absolute Percentage Error)
  • MSE (Mean Squared Error)
  • RMSE (Root Mean Squared Error)
  • MPE (Mean Percentage Error)

 

Legend Description
\(y\) - 실제값
\(\widehat{y}\) - 예측값
\(\bar{y}\) - 평균값
\(n\) - 데이터의 개수

 

 

 

R-Squared (Coefficient of Determination)

 

\(\large{R^2 = 1 - {\sum (y - \widehat{y})^2 \over \sum (y - \bar{y})^2}}\)

 

- 실제 값의 Variance(분산) 대비 예측 값의 Variance(분산)의 비율이다.

- \(R^2\)의 최댓값은 1이며, 최악의 경우 음수가 도출될 수 있다.
  (\(R^2\) 값이 1에 가까울수록 좋은 성능을 의미한다.)

 

 

 

MAE (Mean Absoulte Error)

 

\(\large{MAE = 1 - {1 \over n} \sum\limits_{i=1}^{n} |y_i - \widehat{y}_i|}\)

 

- MAE는 실제 값과 예측 값의 차이에 대한 평균값이다.

- MAE는 Outlier에 대해 Robust한 결과를 보여주어 오차에 덜 민감하다.

- MAE는 MSE, RMSE에 비해 오차값이 Outlier의 영향을 상대적으로 적게 받는다.

- MAE의 값이 작을수록 좋은 성능을 의미하지만, 정도에 따라 Overfitting을 의심해봐야 한다.

 

 

 

MAPE (Mean Absolute Percentage Error)

 

\(\large{MAPE = {1 \over n} \sum\limits_{i=1}^{n} |{y_i - \widehat{y}_i \over y_i}| * 100}\)


- MAPE는 아래와 같은 MPE의 한계점을 보완한다:

  • MPE는 예측오차의 합계를 산출하므로 전체적인 크기를 산정할 수 없다.
  • MPE에서는 오차가 양수, 0, 음수로 존재하여 오차의 합계가 0이 되는 경우가 존재한다.

- MAPE는 실제값과 예측값의 차이를 절댓값으로 반환하므로 Underestimates/Overestimates 여부를 판단할 수 없다.

 

 

 

MSE (Mean Squared Error)

 

\(\large{MSE = {1 \over n} \sum\limits_{i=1}^{n} (y_i - \widehat{y}_i)^2}\)

 

- MSE는 오차의 제곱들에 대한 평균값이다.

  (즉, 예측값과 실제값 차이에 해당하는 면적의 평균값이다.)

- MSE는 오차를 제곱하므로, Outlier에 민감하다.

- 1 미만의 오차는 더 작아지고, 1 이상의 오차는 더 커진다.

- MSE는 오차를 제곱하므로, MSE의 단위와 예측 변수의 단위는 같지 않다.

- MSE는 오차를 제곱하므로, Underestimates/Overestimates 여부를 파악하기 어렵고,
  MAE와 같이 Scale에 의존적이다.

 

 

 

RMSE (Root Mean Squared Error)

 

\(\large{RMSE = \sqrt{MSE} =  \sqrt{{1 \over n} \sum\limits_{i=1}^{n} (y_i - \widehat{y}_i)^2}}\)

 

- RMSE는 MSE의 제곱근을 취한 값이다.

- RMSE는 예측변수와 단위가 같아 직관적이다.

- RMSE는 Scale에 의존적이다.

- RMSE는 오차를 제곱한 후 그에 대한 제곱근을 취하기 때문에 MAE와 같이 실제 값에 대해 

ex) 기온예측 모델에서 RMSE = 5인 경우는 해당 모델은 평균적으로 5 정도 잘못 예측하고 있음을 의미한다.

 

 

 

MPE (Mean Percentage Error)

 

\(\large{MPE = {1 \over n} \sum\limits_{i=1}^{n} {y_i - \widehat{y}_i \over y_i} * 100}\)

 

- MPE는 상대적 예측오차값이다.

- MPE로 Underestimates/Overestimates 여부를 판단할 수 있다.

 

 

 

* Implementation (Python)

def ME(y, t):
    return (y-t).mean(axis=None)

def MAE(y, t):
    return (abs(y - t)).mean(axis=None)

def MSE(y, t):
    return ((y-t)**2).mean(axis=None)
 
def SSE(y, t):
    return 0.5*np.sum((y-t)**2)

def MSLE(y, t):
    return np.log((y-t)**2).mean(axis=None)

def RMSE(y, t):
    return np.sqrt(((y - t) ** 2).mean(axis=None))

def RMSLE(y, t):
    return np.log(np.sqrt(((y - t) ** 2).mean(axis=None)))

def MPE(y, t):
    return (((y-t)/y)*100).mean(axis=None)

def MAPE(y, t):
    return ((abs((y-t)/y))*100).mean(axis=None)
    
def MASE(y, t):
    n = len(y)
    d = np.abs(np.diff(y)).sum() / (n - 1)
    errors = abs(y-t)
    return errors.mean(axis=None)/d

 


Example of Application of Linear Regression: Prediction of Boston House Prices

 

 

 

 


Reference: Introduction to Probability 2nd Edition
(Dimitri P. Bertsekas, John N. Tsitsiklis 저, Massachusetts Institute of Technology, 2008)

 

Reference: "Linear regression"; Wikipedia; 2022년 8월 27일 작성; 2022년 9월 16일 검색, URL.