머신러닝

Linear Regression(선형 회귀)

난시간과싸워 2023. 3. 23. 22:50
반응형

Linear Regression

Linear Regression 모델은 매우 간단하고, 직관적이여서, 머신러닝하면 가장 대표적으로 생각나는 모델이다. 딥러닝 관련 책들에 항상 1장으로 등장했을만큼, 기초적이고 매우 중요하다.


Linear Regression 이란?

  • Linear Regression은 어떠한 독립 변수들과 종속 변수 간의 관계를 예측할때, 그 사이 관계를 선형 관계(1차 함수)로 가정하고, 모델링하는 지도 학습 알고리즘이다.
  • Linear Regression은 보통, 인자와 결과 간의 대략적인 관계 해석이나, 예측에 활용된다.
  • Linear Regression은 확률 변수를 수학적 함수의 결과인 변수(모델링 결과값)으로 연결해준다는데, 그 의미가 크다.
  • Linear Regression은 변수의 수에 따라, 다음과 같이 구분된다.
    • 변수 1개와 종속 변수 간의 선형 관계 모델링은 단순 선형 회귀 분석이라고 한다.
    • 독립 변수 여러 개와 종속 변수 간의 선형 관계 모델링은 다중 선형 회귀 분석이라고 한다.

→ 단순 선형 회귀 분석은 Visualization이 쉽고(2차원 공간에서 선형 함수로 표현 가능), 변수가 하나여서 이해가 쉽지만, 실생활에서의 문제들은 보통 다중 선형 회귀 문제인 경우가 많다.

Linear Regression 선형 관계식

y: 종속 변수, βk :회귀 계수, Xk:독립 변수, ε: 오차항(모델으로 설명할 수 없는 부분), X1까지만 존재하면, 단순 선형 회귀 분석

Linear Regression의 Residual(잔차)

  • 앞서 말한대로, Linear Regression에서 종속 변수는 관찰의 결과인 확률변수이기 때문에, 오차(error)를 포함한다.
  • 오차를 알기 위해서는, 모델링을 위한 인자와 종속 변수 간의 모든 경우의 수를 학습해야하지만, 현실적으로 불가능하다.
  • 따라서, Linear Regression에서는 오차를 사용하지 않고, 표본집단(학습데이터)으로 학습된 모델의 예측값과 실제 관측값 사이의 차이인 잔차(residual) 개념을 사용한다

  • .Linear Regression은 i.i.d 라는 가정을 따른다.
    • 정규성 가정 : 잔차는 정규 분포를 따른다고 가정한다. 잔차가 정규 분포를 따르지 않고, 특정한 분포를 따른다면, 회귀 모델의 예측값을 신뢰하기 어렵다.
      • 확인 방법 : 잔차 분포도 Visualization 확인, 잔차 정규성 검정
    • 등분산성 가정 : 잔차의 분산은 일정하다.
      • 확인 방법 : 잔차-예측값 산포도 확인,
    • 독립성 가정 : 모든 잔차들은 서로 독립적이다. 만약, 잔차 간의 상관 관계가 있다면, 추정된 회귀식에서 설명하지 못하는 다른 어떠한 관계가 존재할 수 있다.
      • 확인 방법 : 잔차의 자기상관 함수 확인

Linear Regression의 학습

  • Linear Regression의 학습 목적은 종속 변수와 설명 변수 간의 관계를 가장 잘 나타낼 수 있는 선형식을 모델링하는 것이다.
  • Linear Regression의 모델 추정을 위해서, 보통 예측값과 실제관측값인 잔차의 제곱을 최소화하는 최소제곱법(OLS)을 사용한다.

최소 제곱법 식

y_i : i번째 데이터의 실제 종속 변수 값, ŷ_i 데이터의 예측값

 

  • 최소제곱법을 활용하는 이유는 다음과 같다.
    • 잔차의 제곱은 항상 양수이기 때문에
    • 잔차의 제곱은  큰 오차를 더욱 강조가 가능하기 때문에
    • 잔차의 제곱은 미분이 가능하기 때문
  • 단순 선형 회귀 분석에서는 최소제곱법을 이용하여, 회귀계수를 다음과 같이 추정할 수 있다. 

  • 다중 선형 회귀 분석에서는 최소제곱법을 이용하여, 회귀 계수 행렬을 다음과 같이 추정할 수 있다.

다중 선형 회귀 분석

 

Linear Regression의 평가

 

  • Linear Regression을 평가하기 위해서, 결정 계수(coefficient of determination) 개념을 활용한다. 
  • 결정 계수는 회귀 분석에서 모델이 얼마나, 실제 데이터를 잘 예측하는지를 나타내는 지표이다. 
  • 결정 계수를 구하기 위해서, 세가지 값의 의미 알아야한다.
    • SST (Total Sum of Squares): 종속 변수 y와 그 평균값 ȳ 간의 차이를 제곱하여 모두 더한 값
    • SSR (Residual Sum of Squares) : 종속변수 y에서 모델 추정값 간 차이를 제곱하여 모두 더한 . (잔차의 총합)

  • 결정 계수는 SST와 SSR을 통해 아래와 같은 식으로 구한다.

  • 결정 계수는 전체 오류(분산 개념) 중, 모델로 설명 가능한 오류의 범위의 비중을 뺀 비중으로, 1에 가까울수룩 일반적으로 예측력이 좋다고 해석한다. 
  • 결정 계수가 대략적인 모델의 적합성을 파악할 수 있지만, 절대적인 지표는 아니다. 

Linear Regression의 Python 구현

  • Linear Regression은 scikit-learn의 linear_model의 LinearRegression을 통해 쉽게 사용 가능하다.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression


if __name__ == '__main__':
    
    # 테스트용 데이터 생성
    x = np.random.rand(1000)*100
    y = 0.8*x+np.random.randn(1000)*30

    # Linear Regrssion model 생성
    model = LinearRegression() 
    
    # Linear Regression model 학습
    model.fit(x.reshape(-1,1), y) 
    
    # Prediction
    y_new = model.predict(np.array([6]).reshape((-1, 1))) 
    print("Data Prediction: ", y_new)
    
    # Linear Regression model 평가
    r_sq = model.score(x.reshape(-1,1), y)  
    print("결정 계수: ", r_sq)
    
    # Linear Model 식 
    b0,b1 = model.intercept_, model.coef_[0]   
    print("b0",b0)
    print("b1",b1)

    # 시각화
    plt.scatter(x, y, s=5)
    plt.plot(x, model.predict(x.reshape(-1,1)), color='red', linewidth=2)
    plt.annotate('y = '+str(round(b1,2))+'x '+str(round(b0,2)), xy=(100, 100), xytext=(80, 80))
    plt.show()