머신러닝 - 회귀

dumbbelldore·2024년 12월 29일
0

zero-base 33기

목록 보기
49/97

1. 회귀 (Regression)

  • 연속적인 값을 예측하는 데 사용되는 지도학습(Supervised Learning) 방법 중 하나
  • 입력 데이터(독립 변수)를 바탕으로 출력 데이터(종속 변수)의 연속적인 값을 추정하거나 예측함

2. 회귀의 주요 유형

2-1. 선형 회귀 (Linear Regression)

  • 독립 변수와 종속 변수 간의 선형 관계를 모델링
  • 예시: y=β0+β1x+ϵy = \beta_0 + \beta_1x + \epsilon
  • 독립변수가 여러 개 존재하는 경우, 다중 선형회귀 문제애 해당

2-2. 다항 회귀 (Polynomial Regression)

  • 선형 회귀의 확장으로, 독립 변수의 거듭제곱 항을 추가하여 비선형 관계를 모델링
  • 예시: y=β0+β1x+β2x2+ϵy = \beta_0 + \beta_1x + \beta_2x^2 + \epsilon

2-3. 릿지 회귀 (Ridge Regression)

  • 선형 회귀에 L2 정규화를 추가하여 과적합을 방지한 모델
  • Loss=yXβ2+λβ2\text{Loss} = ||y - X\beta||^2 + \lambda||\beta||^2

2-4. 라쏘 회귀 (Lasso Regression)

  • 선형 회귀에 L1 정규화를 추가하여 불필요한 변수의 가중치를 0으로 만들 수 있는 모델
  • Loss=yXβ2+λβ1\text{Loss} = ||y - X\beta||^2 + \lambda||\beta||_1

2-5. Elastic Net

  • 릿지와 라쏘의 결합 형태로, L1과 L2 정규화를 동시에 적용한 모델

2-6. 로지스틱 회귀 (Logistic Regression)

  • 출력이 연속형이 아닌 범주형인 경우 사용되며, 본질적으로 회귀보다는 분류 모델에 해당됨
  • 확률 값을 출력한 뒤, 이를 기준으로 클래스를 결정하는 원리에 기반

3. 최소자승법 (Ordinary Least Squares; OLS)

3-1. 기본 개념

  • 회귀 분석에서 가장 기본적으로 사용되는 방법으로, 회귀모델의 모수를 추정하여 가장 잘 설명하는 회귀식을 찾는 방법
  • 즉, 회귀식 y=β0+β1x+ϵy = \beta_0 + \beta_1x + \epsilon 이 존재할 때, 잔차(Residual, yy^y - \hat{y})를 최소화하는 절편과 회귀계수를 찾는 방법
  • 단순선형 회귀의 경우, 다음 절차로 계산 가능
    • 기울기 (β1\beta_1) 계산: β1=Cov(x,y)Var(x)=i=1n(xixˉ)(yiyˉ)i=1n(xixˉ)2\beta_1 = \frac{\text{Cov}(x, y)}{\text{Var}(x)} = \frac{\sum_{i=1}^n (x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^n (x_i - \bar{x})^2}
    • 절편 (β0)(\beta_0)계산: β0=yˉβ1xˉ\beta_0 = \bar{y} - \beta_1\bar{x}
  • 단순선형 회귀의 경우, 벡터 계산 시행
    • β=(XTX)1XTy\beta = (X^TX)^{-1}X^Ty, β\beta는 회귀계수 벡터에 해당

3-2. 단순 선형회귀 예시

  • 다음과 같은 데이터가 있다고 가정

    xx (독립 변수)yy (종속 변수)
    12
    23
    35
    47
    511
  • 평균 계산
    xˉ=xin=1+2+3+4+55=3\bar{x} = \frac{\sum x_i}{n} = \frac{1 + 2 + 3 + 4 + 5}{5} = 3
    yˉ=yin=2+3+5+7+115=5.6\bar{y} = \frac{\sum y_i}{n} = \frac{2 + 3 + 5 + 7 + 11}{5} = 5.6

  • 기울기(β1\beta_1) 계산: β1=(xixˉ)(yiyˉ)(xixˉ)2=2210=2.2\beta_1 = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{\sum (x_i - \bar{x})^2} = \frac{22}{10} = 2.2

    • 분자:(xixˉ)(yiyˉ)(x_i - \bar{x})(y_i - \bar{y})의 합

      xix_iyiy_ixixˉx_i - \bar{x}yiyˉy_i - \bar{y}(xixˉ)(yiyˉ)(x_i - \bar{x})(y_i - \bar{y})
      1213=21 - 3 = -225.6=3.62 - 5.6 = -3.6(2)(3.6)=7.2(-2)(-3.6) = 7.2
      2323=12 - 3 = -135.6=2.63 - 5.6 = -2.6(1)(2.6)=2.6(-1)(-2.6) = 2.6
      3533=03 - 3 = 055.6=0.65 - 5.6 = -0.6(0)(0.6)=0(0)(-0.6) = 0
      4743=14 - 3 = 175.6=1.47 - 5.6 = 1.4(1)(1.4)=1.4(1)(1.4) = 1.4
      51153=25 - 3 = 2115.6=5.411 - 5.6 = 5.4(2)(5.4)=10.8(2)(5.4) = 10.8

      (xixˉ)(yiyˉ)=7.2+2.6+0+1.4+10.8=22\sum (x_i - \bar{x})(y_i - \bar{y}) = 7.2 + 2.6 + 0 + 1.4 + 10.8 = 22

    • 분모: (xixˉ)2(x_i - \bar{x})^2의 합

      xixˉx_i - \bar{x}(xixˉ)2(x_i - \bar{x})^2
      2-244
      1-111
      0000
      1111
      2244

      (xixˉ)2=4+1+0+1+4=10\sum (x_i - \bar{x})^2 = 4 + 1 + 0 + 1 + 4 = 10

  • 절편(β0\beta_0) 계산: β0=yˉβ1xˉ=5.6(2.2)(3)=5.66.6=1\beta_0 = \bar{y} - \beta_1\bar{x} = 5.6 - (2.2)(3) = 5.6 - 6.6 = -1

  • 최종 회귀식 도출: y=β0+β1x=1+2.2xy = \beta_0 + \beta_1x = -1 + 2.2x


4. 예시코드

  • 데이터셋 생성
import numpy as np
X = np.array([1, 2, 3, 4, 5])
y = np.array([2, 3, 5, 7, 11])
  • 절편 추가
# 절편 추가
import statsmodels.api as sm
X = sm.add_constant(X)
  • 회귀모델 생성
# 회귀모델 생성
lr_model = sm.OLS(y, X).fit()
print(lr_model.summary())

## 출력 예시
#                             OLS Regression Results                            
# ==============================================================================
# Dep. Variable:                      y   R-squared:                       0.945
# Model:                            OLS   Adj. R-squared:                  0.927
# Method:                 Least Squares   F-statistic:                     51.86
# Date:                Sun, 29 Dec 2024   Prob (F-statistic):            0.00552
# Time:                        21:14:12   Log-Likelihood:                -5.6451
# No. Observations:                   5   AIC:                             15.29
# Df Residuals:                       3   BIC:                             14.51
# Df Model:                           1                                         
# Covariance Type:            nonrobust                                         
# ==============================================================================
#                  coef    std err          t      P>|t|      [0.025      0.975]
# ------------------------------------------------------------------------------
# const         -1.0000      1.013     -0.987      0.396      -4.225       2.225
# x1             2.2000      0.306      7.201      0.006       1.228       3.172
# ==============================================================================
# Omnibus:                          nan   Durbin-Watson:                   1.700
# Prob(Omnibus):                    nan   Jarque-Bera (JB):                0.730
# Skew:                           0.344   Prob(JB):                        0.694
# Kurtosis:                       1.259   Cond. No.                         8.37
# ==============================================================================
# 
# Notes:
# [1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

*이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.

profile
데이터 분석, 데이터 사이언스 학습 저장소

0개의 댓글