MLOps 부트캠프 by 한경+토스뱅크/Machine Learning

회귀 알고리즘

나니니 2024. 7. 29. 09:19

회귀란?

데이터 값이 평균과 같은 일정한 값으로 돌아가려는 경향

회귀 분석은 데이터 값이 평균과 같은 일정한 값으로 돌아가려는 경향을 이용한 통계학 기법 

여러 개의 독립변수(X)한 개의 종속변수(y) 간의 상관관계를 모델링하는 기법(*모델링은 표본)

회귀 eg.

  • 가중치 -> 회귀 계수(Regressino Coefficients)

회귀 유형

회귀 계수

  • 회귀 계수가 직선이면 -> 선형회귀
  • 회귀 계수가 직선이 아니면 -> 비선형
    • 로지스틱 회귀
독립변수 개수 회귀 계수의 결합
1개 단일 회귀 선형 선형 회귀  
N개  다중 회귀 비선형 비선형 회귀 로지스틱 회귀

 

회귀 모델의 목적

: 전체 데이터의 잔차(오류 값) 합이 최소가 되는 모델을 만드는 것 -> 오류 값의 합이 최소가 될 수 있는 최적의 회귀 계수 w을 찾는 것!


일반 선형 회귀(LinearRegression)

: RSS(잔체 제곱 합)을 최소화할 수 있도록 회귀 계수(w, 가중치)를 최적화하며, 규제를 적용하지 않은 모델

회귀 계수(w, 가중치)를 최적화란?
경사 하강법이란?

최적화할 때 수행방법과 개념 공부하기!

릿지(Ridge)

: 선형 회귀에 L2 규제를 추가한 회귀 모델

라쏘(Lasso)

: 선형 회귀에 L1 규제를 적용한 회귀 모델

엘라스틱넷(ElasticNet)

: L2, L1 규제를 함께 결합한 모델

로지스틱 회귀(Logistic Regression)

: 딥러닝 모델에 근간이 됨, 실제로는 '분류'에 사용되는 선형 모델


RSS와 경사하강법

RSS

: 각 데이터 포인트의 오류 값(Errori)의 제곱을 구해서 더하는 방식. 일반적으로 미분 등의 계산을 편리하게 하기 위해서 RSS 방식으로 오류 합을 구한다. 즉, σ Error2 = RSS 이다.

w변수(회귀 계수)가 중심 변수(* 회귀식의 독립변수 X, 종속변수 Y가 중심 변수가 아니라 회귀 계수 𝑤가 중심 변수이므로 학습 데이터로 입력되는 독립변수와 종속변수는 모두 상수로 간주함))

i는 1부터 학습 데이터의 총 건수 N까지

 

회귀에서 RSS는 비용(Cost)이며, w 변수(회귀 계수)로 구성되는 RSS를 비용 함수(=손실 함수, loss function)라고 한다. 

 

머신러닝 회귀 알고리즘은 데이터를 계속 학습하면서 이 비용 함수가 반환하는 값(즉, 오류 값)을 지속해서 감소시키고 최종적으로는 더 이상 감소하지 않는 최소의 오류 값을 구하는 것이다. 

비용 최소화 하기 - 경사 하강법(Gradient Descent)

경사 하강법이란?
w 파라미터가 많은 고차원 방정식에 대한 w 파라미터 값을 반복적인 계산을 통해 '점진적으로' 업데이트 하면서 비용 함수 RSS를 최소화하는 방법(=오류값이 최소가 되는 w 파라미터)를 구하는 방식이다. 

 

 

-> 미분해서 loss값을 낮춤 -> 방향성과 크기를 알 수 있다 -> 이 정보를 이용해 w를 수정 -> 오류 값이 더이상 작아지지 앟으면 이를 '최소 비용'으로 판단하여 이때의 w 파라미터를 최적 파라미터로 반환함

 

 

선형회귀(LinerRegression)

LinerRegression 클래스

sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False)

# fit_inercept: 절편 값을 계산할 것인지 여부 결정. False로 설정 시 intercept가 0으로 지정됨

# normalize: fit_intercept가 Flase인 경우엔 무시됨, True로 설정하면 회귀를 수행하기 전 입력 데이터 세트를 정규화(Standard Scaling)함, 사용 권장하지 않음

fit_intercept (좌) 절편 O / (우) 절편 X

 

 

다중 공선성(multi-collinearity) 문제

다중 공선성이란?
Feature간의 상관관계가 매우 높은 경우 분산이 매우 커져 오류에 매우 민감해지는 현상을 다중공선성이라고 한다. (일반적으로 선형 회귀는 입력 Feature의 독립성에 많은 영향을 받음)
상관관계가 높은 Feature가 많을 경우, 독립적인 중요한 Feature만 남기고 제거하거나 규제를 적용한다. 

만약, 매우 많은 Feature가 다중 공선성 문제를 가지고 있다면 PCA를 통해 차원 축소를 수행해 볼 수 도 있다. 

회귀 평가 지표

: 실제 값과 회귀 예측값의 차이 값을 기반으로 한 지표다.

 

eg. MSE, RMSE, R2 계산

from sklearn.metrics import mean_squared_error, r2_score

mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse) # mse에 루트 씌운 것(보고서용)
# 사이킷런 0.22버전부터 RMSE 계산 함수 제공 -> mean_squrared_error(실제값, 예측값, squared=False)
#	mean_squrared_error() 함수는 squared 파라미터가 기본적으로 True

r2 = r2_score(y_test, y_pred) # 정확도

# RMSE값을 줄이는데 신경을 써야함(*R2값을 올리는데 집중X) -> 어느 정도까지 오차를 줄여야 할까?
print("MSE : {:.3f}".format(mse))
print("RMSE : {:.3f}".format(rmse))
print("R2 : {:.3f}".format(r2))

# 출력
MSE : 24.291
RMSE : 4.929
R2 : 0.669