1. 회귀 (Regression)
- 연속적인 값을 예측하는 데 사용되는 지도학습(Supervised Learning) 방법 중 하나
- 입력 데이터(독립 변수)를 바탕으로 출력 데이터(종속 변수)의 연속적인 값을 추정하거나 예측함
2. 회귀의 주요 유형
2-1. 선형 회귀 (Linear Regression)
- 독립 변수와 종속 변수 간의 선형 관계를 모델링
- 예시: y=β0+β1x+ϵ
- 독립변수가 여러 개 존재하는 경우, 다중 선형회귀 문제애 해당
2-2. 다항 회귀 (Polynomial Regression)
- 선형 회귀의 확장으로, 독립 변수의 거듭제곱 항을 추가하여 비선형 관계를 모델링
- 예시: y=β0+β1x+β2x2+ϵ
2-3. 릿지 회귀 (Ridge Regression)
- 선형 회귀에 L2 정규화를 추가하여 과적합을 방지한 모델
- Loss=∣∣y−Xβ∣∣2+λ∣∣β∣∣2
2-4. 라쏘 회귀 (Lasso Regression)
- 선형 회귀에 L1 정규화를 추가하여 불필요한 변수의 가중치를 0으로 만들 수 있는 모델
- Loss=∣∣y−Xβ∣∣2+λ∣∣β∣∣1
2-5. Elastic Net
- 릿지와 라쏘의 결합 형태로, L1과 L2 정규화를 동시에 적용한 모델
2-6. 로지스틱 회귀 (Logistic Regression)
- 출력이 연속형이 아닌 범주형인 경우 사용되며, 본질적으로 회귀보다는 분류 모델에 해당됨
- 확률 값을 출력한 뒤, 이를 기준으로 클래스를 결정하는 원리에 기반
3. 최소자승법 (Ordinary Least Squares; OLS)
3-1. 기본 개념
- 회귀 분석에서 가장 기본적으로 사용되는 방법으로, 회귀모델의 모수를 추정하여 가장 잘 설명하는 회귀식을 찾는 방법
- 즉, 회귀식 y=β0+β1x+ϵ 이 존재할 때, 잔차(Residual, y−y^)를 최소화하는 절편과 회귀계수를 찾는 방법
- 단순선형 회귀의 경우, 다음 절차로 계산 가능
- 기울기 (β1) 계산: β1=Var(x)Cov(x,y)=∑i=1n(xi−xˉ)2∑i=1n(xi−xˉ)(yi−yˉ)
- 절편 (β0)계산: β0=yˉ−β1xˉ
- 단순선형 회귀의 경우, 벡터 계산 시행
- β=(XTX)−1XTy, β는 회귀계수 벡터에 해당
3-2. 단순 선형회귀 예시
-
다음과 같은 데이터가 있다고 가정
| x (독립 변수) | y (종속 변수) |
|---|
| 1 | 2 |
| 2 | 3 |
| 3 | 5 |
| 4 | 7 |
| 5 | 11 |
-
평균 계산
xˉ=n∑xi=51+2+3+4+5=3
yˉ=n∑yi=52+3+5+7+11=5.6
-
기울기(β1) 계산: β1=∑(xi−xˉ)2∑(xi−xˉ)(yi−yˉ)=1022=2.2
-
분자:(xi−xˉ)(yi−yˉ)의 합
| xi | yi | xi−xˉ | yi−yˉ | (xi−xˉ)(yi−yˉ) |
|---|
| 1 | 2 | 1−3=−2 | 2−5.6=−3.6 | (−2)(−3.6)=7.2 |
| 2 | 3 | 2−3=−1 | 3−5.6=−2.6 | (−1)(−2.6)=2.6 |
| 3 | 5 | 3−3=0 | 5−5.6=−0.6 | (0)(−0.6)=0 |
| 4 | 7 | 4−3=1 | 7−5.6=1.4 | (1)(1.4)=1.4 |
| 5 | 11 | 5−3=2 | 11−5.6=5.4 | (2)(5.4)=10.8 |
∑(xi−xˉ)(yi−yˉ)=7.2+2.6+0+1.4+10.8=22
-
분모: (xi−xˉ)2의 합
| xi−xˉ | (xi−xˉ)2 |
|---|
| −2 | 4 |
| −1 | 1 |
| 0 | 0 |
| 1 | 1 |
| 2 | 4 |
∑(xi−xˉ)2=4+1+0+1+4=10
-
절편(β0) 계산: β0=yˉ−β1xˉ=5.6−(2.2)(3)=5.6−6.6=−1
-
최종 회귀식 도출: y=β0+β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.
*이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.