본문 바로가기

머신러닝

[머신러닝] 회귀(Regression) 알고리즘

회귀(Regression)은 머신러닝의 지도학습에 유형 중 하나로 예측값이 연속 값인 분류(Classification)와 다르게 예측값이 실수값이다. 머신러닝에서의 회귀는 여러 개의 독립변수와 한 개의 종속변수 간의 상관관계를 모델링 하는 것이 기본적인 개념이며 독립변수에 영향을 미치는 회귀 계수(Regression coefficients)의 최적 값을 찾아 종속변수를 예측해내는 것이다. 

 

단순 선형 회귀(Simple Linear Regression)

회귀는 독립변수의 개수에 따라 1개인 경우는 단일 회귀 여러 개일 경우에는 다중 회귀로 나뉜다. 또 회귀 계수가 선형이냐 비선형이냐에 따라 선형 회귀와 비선형 회귀로 나눌 수 있다. 아래의 사진은 단순 선형 회귀(Simple Linear Regression)로 회귀계수가 선형이며 독립변수를 1개 가지는 회귀이다.

 

위의 그림에서 보면 모델의 계산 식은 아래의 식과 같지만

실제 Y 값은 오류 값인 e 가 더해지거나 빼진 값이라는 것을 볼 수 있다. 오류 값은 실제 값과 모델 간의 차이를 나타내며 잔차라고 부른다. 회귀 모델에서 잔차의 합이 최소가 되는 모델을 만드는 것이 최적의 회귀 모델을 만들어 내는 것을 의미한다. 전체 데이터에서 잔차의 총합을 구하는 방식은 일반적으로 RSS(Residual Sum Of Square) 방식으로 구한다.

 

 

여기서 RSS(Residual Sum Of Square)는 잔차 값을 제곱하여 더하는 방식이다. 실제 값과 모델 값의 차이는 양수와 음수의 값을 전부 가질 수 있는데 이를 그대로 합하면 잔차의 합이 오히려 줄어들 수 있다. 따라서 잔차에 절댓값을 취해 합하거나 RSS처럼 잔차에 제곱을 해서 합을 구해야 한다.

 

RSS는 비용 함수 또는 손실 함수(loss function)이라고 하며 머신러닝에서의 회귀 모델들은 학습을 하며 손실 함수가 반환하는 값을 점점 줄여나가고 최소의 오류 값을 찾아간다.

 

경사 하강법(Gradient Descent)

경사 하강법(Gradient Descent)는 위에서 알아본 손실 함수를 최소화하는 방식이다. 반복적인 계산을 통해 손실 함수가 최소가 되는 회귀 계수(가중치)를 찾는 과정으로 이름처럼 경사를 하강해 내려가는 모습으로 나타낼 수 있다. 

위의 그래프는 손실 함수를 나타내는 2차원 그래프이며 손실(loss) 값이 최소가 되는 지점을 찾는 것이 목표이다. 그렇기 위해선 손실 함수의 미분 값이 최소가 되는 지점을 찾아야 한다. 최초 위치에서부터 미분을 적용하고 미분 값이 감소하는 방향으로 가중치를 재조정한다. 이를 반복하면서 미분 된 값이 0에 가장 가까운 최소의 지점을 찾으면 마치게 된다.

 

다항 회귀(Polynomial Regression)

다항 회귀(Polynomial Regression)은 위에서 봤던 일차 방정식 형태의 단순선형회귀와 달리 독립변수가 여러 개인 다항식 형태의 회귀이다. 직선으로만 표현할 수 있는 단순선형회귀에 비해 2차, 3차 등 다항식의 그래프로 표현하기 때문에 더 좋은 예측 결과를 얻을 수 있다.

하지만 예측 정확도를 높이기 위해 차수(degree)를 계속해서 높이다 보면 학습하기 위한 데이터에만 초점을 맞춰 학습이 이루어지게 된다. 학습한 데이터에서는 높은 예측 정확도를 보일 수 있지만 실제 예측 환경에서는 정확도가 떨어지게 되는데 이를 과적합(Overfitting) 또는 과대적합 이라고 한다. 반대로 차수를 지나치게 줄여 단순화하게 되면 제대로 학습하지 못하는 상황이 발생하는 데 이를 과소적합(Underfitting)이라고 한다.

 

규제(Regularization) 모델

좋은 모델이 되려면 과적합이 되지 않고 과소적합도 되지 않는 균형 있는 모델이 돼야 한다. 균형 있는 모델을 만들기 위해 학습 데이터와 회귀 계수를 제어하는 튜닝 파라미터를 가진 규제(Regularization) 모델들이 존재한다.

 

- 릿지 회귀(Ridege Regression) 

      규제 선형 모델 중 L2 규제를 적용한 회귀이다. 가중치의 제곱에 대해 페널티를 부여해 규제를 하는 방식이다.

 

- 라쏘 회귀(Lasso Regression)

      규제 선형 모델 중 L1 규제를 적용한 회귀이다. 가중치의 절댓값에 대해 페널티를 부여해 규제를 하는 방식이다.

 

- 엘라스틱넷 회귀(Elastic Net Regression)

      엘라스틱넷 회귀는 L2 규제와 L1 규제를 결합한 회귀이다. 랏쏘 회귀에서 중요도가 떨어지는 피처들의 회귀 계수를        0으로 만든 성향을 보완하기 위해 릿지 모델을 결합한 규제 방식이다.

 

 

회귀 트리(Regression Tree)

회귀 트리(Regression Tree)는 결정 트리를 기반으로 하는 회귀 방식이다. 지금까지 봤던 회귀 계수가 선형인 선형 회귀 모델들과 달리 회귀 계수가 비선형일 때의 회귀 모델로 사용된다. 분류에서 사용하는 분류 트리와 크게 다르지 않지만 회귀 트리는 리프 노드의 데이터 평균 값으로 예측을 한다.

 

 

데이터 세트에서 X 값의 균일도를 반영한 지니 계수에 따라 노드를 분할한다. 반복적으로 분할을 진행하다 리프 노드까지 분할이 완료되면 리프 노드에 속한 데이터들의 평균 값을 구해 리프 노드에 담긴다. 예측을 진행하면 리프 노드에 해당하는 값을 결정 값으로 사용하게 된다.

 

 

 

 

 

 

 

 

 

 

 

참조 : 파이썬 머신러닝 완벽 가이드 (위키북스) - 권철민