AI & Data/Machine Learning

[머신러닝] 회귀 (Regression)

테드리 2024. 6. 3. 12:13

회귀란?

회귀라는 뜻은 어떤 지점으로 돌아간다는 뜻이다. 수많은 데이터들을 수집해보면 어떤 점, 즉 평균으로 돌아가게 되는데, 그 점들을 이어보면 하나의 직선을 이루게 되고 이것을 회귀 직선이라고 한다. 그리고 이 회귀 직선을 식으로 나타낸 것을 회귀식이라고 한다.

 

$$y = w_0 + w_1x_1 + w_2x_2 + \cdots + w_nx_n + \epsilon$$

 

  • $y$: 독립변수의 영향을 받아 값이 변화하는 수로, 종속변수라 하고 주로 분석하고자 하는 대상이 된다.
  • $x_i$: 다른 변수에 영향을 받지 않고 독립적으로 변화하는 수로, 독립변수라고 한다.
  • $w_i$: 독립변수가 1 변할 때, 종속변수가 얼마나 변하는지 나타내는 수로, 회귀계수라고 부른다.
  • $\epsilon$: 실제값과 회귀값의 차이에 따른 오류값, 즉 잔차

따라서 회귀의 목적은 데이터들을 가장 잘 설명할 수 있는 하나의 회귀선, 즉 회귀식을 찾는 것이라고 할 수 있다. 

 

회귀의 종류

 

회귀 모델의 종류는 여러가지가 있는데, 설명 변수의 개수에 따라, 또 선형인지 아닌지에 따라 종류가 나뉘게 된다. 그중에서 모델의 형태가 선형인 것을 선형회귀라고 한다. 그렇다면 어떤 경우에 선형회귀라고 부르는 것일까? 

 

선형모형은 모형식이 모수(파라미터)들의 선형함수로 주어지는 모형을 뜻한다. 회귀모형에서 모수는 회귀계수 $w_i$들을 의미하므로 회귀모형식이 $w_i$들의 선형함수, 즉 1차 결합이면 선형회귀모형이라고 한다.

$$y = w_0 + w_1x_1 + w_2x_2 + \cdots + w_nx_n + \epsilon$$

과 같은 다중회귀 식이 있다고 가정할 때,

$$y = f(x, w) + \epsilon$$ 과 같이 설명변수들을 회귀계수들의 벡터로 생각했을 때, 회귀식 $f(x, w)$의 $w_i$에 대한 편미분 $∂f/∂w_i$가 어느 회귀 계수도 포함하지 않으면 회귀식 $f(x,w)$를 모수 $w_i$에 대해 선형이라 한다. 즉,  모형식의 모든 회귀 계수 각각에 대해 편미분한 결과가 다른 회귀계수를 포함하지 않으면 선형모형이라고 한다.

 

그럼 이제 본격적으로 회귀 모델들에 대해 알아보도록 하겠다.

 

1. 선형 회귀 (Linear Regression)

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

최소제곱법(OLS)

$$\text{OLS} = \sum_{i =1}^{n} (y_{i} - \hat{y}_i)^2$$

 

이 값이 최소가 되는 $w_i$들을 찾는 것이다.

 

단순 선형회귀에서는 다음과 같이 회귀 계수를 추정할 수 있다.

$$w_0 = \hat{y} - w_1\bar{x}$$

$$w_1 = \frac{\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^{n} (x_i - \bar{x})^2}$$

 

다중 선형회귀에서는 다음과 같이 회기 계수 행렬을 추정할 수 있다.

$$W = (X^TX)^{-1}X^TY$$

 

1.1 Linear Regression의 평가

1) MAE (Mean Absolute Error)

  • 실제 값과 예측 값의 오차의 절댓값의 평균을 계산

$$\text{MAE} = \frac{1}{n}\sum_{i = 1}^{n} |y_i - \hat{y}_i|$$

MAE의 경우 다른 평가지표들(MSE, RMSE)에 비해 outlier에 상대적으로 둔감할 수 있다. 

 

2) MSE (Mean Squared Error) 

  • 실제 값과 예측 값의 오차의 제곱의 평균을 계산

$$\text{MSE} = \frac{1}{n}\sum_{i=1}^{n} (y_i - \hat{y_i})^2$$

오차에 제곱을 하기 때문에, 큰 오차에 더 큰 가중치가 주어져서, 오차에 비교적 민감한 평가지표이다.

 

3) RMSE(Root Mean Squared Error)

  • MSE 값의 제곱근

$$ \text{RMSE} = \sqrt{MSE}$$

RMSE는 MSE에 비해 상대적으로 오차에 덜 민감하지만, 스케일이 큰 데이터에 대해 오차의 크기를 줄여줌으로써 오차가 너무 커지는 것을 방지해주는 효과가 있다.

 

4) $R^2$

  • 회귀 분석에서 의존 변수의 분산 중 모델로 설명할 수 있는 부분의 비율을 나타내는 통계적 측정치로, 0과 1 사이의 값을 가지며, 모델의 적합도를 평가하는 데 사용된다.

$$R^2 = 1 - \frac{SSE}{SST} = 1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y_i})^2}{\sum_{i=1}^{n} (y_i - \bar{y})^2}
$$

 

$R^2$ 값이 1이면 모델이 데이터를 완벽하게 설명한다는 뜻이고, 0이면 모델이 데이터를 전혀 설명하지 못한다는 뜻이다.

 

2. Ridge Regression (릿지 회귀)

OLS 선형회귀의 과적합을 방지하게 위해 고안된 선형회귀 기법이다. 

 

$$ \sum_{i=1}^{n} (y_i - \hat{y_i})^2 + \alpha\sum_{i =1}^{n} w_i^2$$

를 최소화하는 $w$ 집합들을 구하게 되는데, 회귀 계수들에 페널티 가중치 $\alpha$를 줌으로써, 회귀 계수가 너무 커지는 것을 방지한다.

 

Ridge 회귀는 모델을 안정화시킴으로써 예측에 대한 일반성을 잃지 않도록 도와주는데,  $\alpha$값이 커질 수록 더 일반화를 많이 시킨다고 할 수 있다.

 

3. Lasso Regression (라쏘 회귀)

$$\sum_{i=1}^{n} (y_i - \hat{y_i})^2 + \alpha \sum_{j=1}^{p} |w_j|$$

 

릿지 회귀와 유사한 방식으로 학습을 시키지만, 릿지 회귀와의 차이점은 라쏘 회귀는 특정 회귀계수들을 0으로 보낼 수 있다는 점이다. 즉, 릿지 회귀는 독립변수를 제거하지 못하지만, 라쏘 회귀는 분석에 필요 없는 독립변수를 제거할 수 있다.

 

4. Elasticnet Regression 

Ridge와 Lasso를 합한 회귀 방식

 

$$ \sum_{i=1}^{n} (y_i - \hat{y_i})^2 + \alpha\sum_{i =1}^{n} |w_i| + \alpha\sum_{i =1}^{n} w_i^2$$

 

다중공선성 문제를 해결할 수 있고, 변수 선택 능력이 릿지나 라쏘를 하나만 쓰는 경우보다 탁월하다.

 

 

5. Multi Collinearity (다중공선성)

독립변수들 간의 선형적인 상관관계를 나타내는 척도로, 만약 두 변수 간의 다중공선성이 높다면, 둘 중에 하나는 분석에 필요가 없다는 것을 의미한다.

5.1. 분산 팽창 지수 (VIF)

$$ \text{VIF_j}=\frac{1}{1R_j^2​}$$

 

여기서 $R_j^2$는 $번째 설명 변수가 모델의 다른 모든 설명 변수에 대해 수행한 회귀 분석의 결정 계수이다.

  • VIF = 1: 설명 변수 간에 아무런 상관 관계가 없음을 나타낸다.
  • 1 < VIF < 5: 일반적으로 낮은 공선성을 나타낸다.
  • VIF ≥ 5: 높은 공선성을 나타내며, 이 변수는 다른 변수와 높은 상관관계가 있음을 의미한다. 일부 학자들은 VIF가 10 이상일 때 심각한 다중 공선성이 있다고 본다. 

회귀 모델을 구축할 때, 높은 VIF 값을 가진 변수는 모델의 예측 성능과 해석을 방해할 수 있으므로, 이러한 변수를 모델에서 제거하거나, 변형하여 다시 분석하는 것을 고려할 수 있다.

 

 

 

<Python 실습>

Regression" target="_blank" rel="noopener" data-mce-href="http://Regression">http://Regression

 

GitHub - taekyounglee1224/Bitamin_ML: 빅데이터 연합동아리 Bitamin에서 진행한 실습 및 프로젝트

빅데이터 연합동아리 Bitamin에서 진행한 실습 및 프로젝트. Contribute to taekyounglee1224/Bitamin_ML development by creating an account on GitHub.

github.com