AIchemist

[5주차] 회귀 (선형 회귀/과적합/과소적합/릿지/라쏘/엘라스틱넷/로지스틱/회귀트리)

양윤서_Ewha 2024. 10. 7. 17:00

01 회귀

회귀

  • 데이터 값이 평균으로 돌아가려는 경향 이용
  • 여러 개의 독립 변수와 한 개의 종속 변수간의 상관관계를 모델링하는 기법
  • 독립 변수 : 예측값에 영향을 미치는 조건들, 피처
  • 종속 변수 : 예측값
  • 회귀 계수 : 각 독립변수의 종속 변수에 대한 영향력을 나타내는 계수

 

회귀 분석

h() : 회귀 모델 / y: 데이터 / x_i : 데이터에 영향을 미치는 조건들 / b_i : 각 조건들의 영향력 / e: 오차항

  • 회귀 모델 h()는 어떠한 조건이 주어지면 각 조건의 영향력을 고려하여 해당 조건에서의 평균값을 계산해주는 것
  • 이때 오차항은 현실적인 한계로 인해 발생하는 불확실성을 나타냄. (잡음)
  • 조건을 선택하고 조건의 영향력을 조정해가면서 최적의 h()를 찾아내는 과정
  • h()를 최적화하는 방법 : 오차값의 최소화 / 과(대)적합, 과소적합 고려 -> 규제

 

회귀 유형

독립 변수 회귀 계수의 결합
1개: 단일 회귀 선형: 선형 회귀
여러개: 다중 회귀 비선형: 비선형 회귀

-회귀 모델의 선형성을 따지는 기준이 독립변수나 종속변수의 관계가 아니라 회귀의 결합방식이라는 것을 기억해야 함

 

회귀 vs 분류

공통점 : 지도 학습 (정답이 있는 데이터를 활용해 모델을 학습시키는 방법)

회귀 분류
예측하고자 하는 값이 실수인 경우
예측 결과 : 연속값
ex) 손해액, 매출량, 거래량 등
예측하고자 하는 값이 범주형 변수인 경우
예측 결과 : 이산값
ex) 이진 분류, 다중 분류

 

02 단순 선형 회귀

단순 선형 회귀

  • 독립 변수도 1개, 종속 변수도 1개인 선형 회귀
  • 하나의 피처만 고려해서 결괏값 예측
  • 최적의 회귀 모델 : 잔차가 최소가 되는 모델
  • ->RSS 방식 통해 오류 합 계산

 

RSS (Residual Sum of Square)

  • 오류값을 최소화하는 방법
  • 오류값은 + 나 - 가 될 수 있기 때문에 오류합은 각각의 오류값에 제곱을 구해서 더하는 방식을 사용한다
  • 오류합을 최소화하는 회귀 계수를 구하는 방식으로는 경사하강법과 OLS(Ordinary Least Square)가 사용된다
  • RSS를 응용하여 회귀 함수의 성능을 평가할 수 있다

 

경사하강법

  • RSS의 값이 작아지는 방향성으로 W(회귀계수)를 계속 업데이트 하는 방식
  • 반환값이 최솟값을 가지는 지점에서 W 반환
  • RSS식을 회귀 계수에 대해 편미분하면 기울기 함수가 나오고, 기울기의 경사가 완만해지는 방향성이 RSS의 값이 작아지는 방향성이다
  • 경사가 완만해지는 방향을 따라간다면 RSS 함수의 극솟값에 이르게 된다
  • 기울기의 경사가 완만해지는 방향으로 회귀 계수들을 업데이트 하면 된다

학습률(a)

  • 학습률이 너무 크면 한 지점으로 수렴하는 것이 아니라 발산할 가능성 존재 > overshooting
  • 학습률이 너무 작으면 수렴이 느려짐
  • 시작점을 어디로 잡느냐에 따라서도 수렴 지점이 달라짐 

 

경사하강법 실습 순서

  1. 가상 데이터세트 생성 후 시각화
  2. RSS 함수 정의
  3. W값 업데이트 함수
  4. 경사 하강법 예측 오류 계산
  5. 추정 회귀선 시각화

 

확률적 경사하강법

  • 랜덤 샘플링을 통해 추출한 일부 데이터만을 이용해 w 업데이트 값을 계산하는 경사 하강법
  • 경사 하강법보다 연산시간 단축

(미니배치) 확률적 경사하강법

  • 전체 데이터를 batch_size개씩 나누어 배치로 학습

 

OLS(Ordinary Least Squares)

  • RSS의 값을 최소화하는 회귀계수를 통계학적으로 구하는 방식
  • OLS 방식의 경우, 다중공선성 문제를 고려해야 함
  • 다중공선성: 피처 간 상관관계가 매우 높은 경우 분산이 매우 커져서 오류에 민감해지는 것 > 피처 제거, 규제 적용, 차원 축소 등으로 해결
  • Linear Regression 클래스로 구현
  • fit()을 이용해 X, y를 입력받으면 coef_ 속성에 회귀 계수가 배열 형태로 저장
입력 파라미터 fit_intercept : 절편 값 계산 여부 결정
normalize : 입력 데이터세트 정규화 여부
속성 coef_ : fit()메서드 수행했을 때 회귀 계수가 배열 형태로 저장되는 속성
intercept_ : 절편 값

 

회귀 평가 지표

  • MAE : 잔차의 절댓값의 평균값
  • MSE : 잔차의 제곱의 평균값
  • RMSE : 잔차의 제곱의 평균에 루트를 씌운 값
  • MSLE: 실제값과 예측값에 로그를 취한 후 평균 제곱 오차를 계산한 값
  • R2: 실제값의 분산 대비 예측값의 분산 비율
  • neg의 의미 : Scoring 함수는 score값이 클수록 좋은 평가 결과 나타남. 회귀 평가 지표는 나쁜 모델일수록 값이 커짐. 회귀 평가 지표에 의한 평가 결과에 -1을 곱해줘서 값이 작을수록 좋은 모델로 평가받을 수 있도록 보정

다중 선형 회귀

  • 독립 변수가 여러개, 종속변수가 1개인 선형 회귀
  • 여러 개의 피처를 고려해서 결괏값 예측

회귀 계수 도출 방법

  • 단순 선형 회귀와 동일하게 오류합을 최소화하는 방향으로 회귀 계수를 도출함
  • 선형대수 행렬 내적 활용

 

회귀 구현

  1. 데이터 로드
  2. 칼럼별 영향도 확인
  3. 회귀 모델 학습 예측 평가
  4. 피처별 회귀 계수 매핑
  5. 교차검증을 통한 MSE, RMSE 계산

 

03 다항 회귀와 과대적합 / 과소적합 이해

다항회귀

  • 회귀가 독립변수의 단항식이 아닌 2차, 3차 방정식과 같은 다항식으로 표현되는 것
  • 회귀 함수가 직선형이 아닌 곡선형으로 나타남
  • 다항 회귀 역시 선형회귀
  • 선형 비선형 회귀를 나누는 기준이 회귀계수가 선형/비선형인지에 따른 것이기 때문

PolynomialFeatures

  • 사이킷런에서 다항식 피처로 변환하는 클래스
  • 입력바든 단항식 피처를 degree에 해당하는 다항식 피처로 변환
  • fit(), transform() 메서드를 통해 변환 작업 수행

 

과소적합 / 과대적합

  • 다항 회귀는 단순 선형 회귀나 다중 회귀보다 더 복잡한 피처 간의 관계를 모델링할 수 있음
  • 다항 회귀의 차수를 높일수록 매우 복잡한 피처 관계까지 표현 가능
  • 하지만 차수가 높아질수록 학습 데이터에만 최적화된 과대적합이 발생
  • 차수가 낮을수록 학습 데이터의 패턴을 반영하지 못하는 과소적합이 발생

편향

  • 예측과 실제 간의 차이
  • 지나치게 단순한 모델로 인한 오류
  • 편향이 높으면 과소적합이 되기 쉬움

분산

  • 예측끼리의 차이
  • 지나치게 복잡한 모델로 인한 오류
  • 분산이 크면 과적합이 되기 쉬움

편향-분산 트레이드오프

  • 모델의 복잡도가 커지면 분산이 상승, 편향은 하강
  • 모델의 복잡도가 줄어들면 편향이 상승, 분산은 하강
  • 편향과 분산이 서로 트레이드오프를 이루면서 오류 값이 최대로 낮아지는 '골디락스 지점'의 모델을 구축해야 함

04 규제 선형 모델

RSS 비용함수와 OLS 방식은 오류합을 최소화하는 방법이었다. 그러나 오류합의 최소화만 따지다 보니 과적합된 복잡한 회귀 함수식이 만들어졌고, 회귀 계수가 과도하게 커지는 문제가 발생했다.

규제는 오류합의 최소화와 회귀계수 크기 제어를 모두 고려하는 방법이다.

비용 함수 목표

  • Y = Min ( RSS(W) + ! * ||W|| )
  • a가 0 (또는 매우 작은 값)일 때 비용 함수는 기존의 오차합의 최소화만 고려한 Min(RSS(W))가 된다
  • a가 무한대 (또는 매우 큰 값)일 때 비용 함수에서 RSS(W)의 값을 최대한 작게 만들기 위해 W를 0 (또는 매우 작은 값)으로 설정하게 된다

규제는 a값을 이용해 오차합의 최소화와 회귀 계수 크기 제어를 모두 고려한다

||W||를 회귀 계수의 절댓값으로 설정할지, 제곱으로 설정할지에 따라서 각각 L1 규제와 L2 규제로 나뉜다

 

릿지 회귀

  • 선형회귀에 L2규제를 추가한 회귀 모델
  • L2규제 : W 제곱에 대해 패널티를 부여하여 회귀 계수를 작게 만드는 규제
  • Ridge : 사이킷런에서 릿지 회귀를 구현하는 클래스. 주요 생성 파라미터는 alpha

 

라쏘 회귀

  • 선형 회귀에 L1규제를 추가한 회귀 모델
  • L1규제 : W 절대값에 대해 패널티를 부여하여 회귀 계수를 작게 만드는 규제. 예측 영향력이 작은 피처의 회귀 계수를 0으로 만들어 줌 > 피처 선택 가능
  • Lasso: 사이킷런에서 라쏘 회귀를 구현하는 클래스. 주요 생성 파라미터는 alpha

엘라스틱넷 회귀

  • L2규제와 L1규제를 결합한 회귀

ElasticNet

  • 사이킷런에서 엘라스틱넷 회귀를 구현하는 클래스
  • 엘라스틱넷의 규제 = a*L1 + b*L2 (a는 L1 규제의 alpha값, b는 L2 규제의 alpha값)
  • alpha = a+b
  • l1_rato = a/(a+b)
  • l1_rato가 0이면 a가 0이므로 L2 규제와 동일, 1이면 b가 0이므로 L1규제와 동일

 

선형 회귀 모델을 위한 데이터 변환 방법

선형 회귀 모델의 경우 피처값과 타겟값의 분포가 정규 분포인 형태를 매우 선호함. 왜곡된 형태의 데이터는 성능에 부정적인 영향을 끼칠 확률이 높기 때문에 정규화 작업을 수행하는 것이 좋음.

  1. StandardScaler : 평균이 0, 분산이 1인 표준 정규 분포 형태의 데이터 세트로 변환
  2. MinMaxScaler: 최솟값 0, 최댓값이 1인 값으로 정규화 수행
  3. 스케일링 / 정규화를 수행한 데이터 세트에 다시 다항 특성을 적용하여 반환 > 1, 2번 방법이 성능 향상에 효과가 없을 때 적용하는 방법. 피처가 많으면 과적합과 시간이 오래 걸린다는 문제 발생
  4. 로그 변환을 취해 정규 분포에 가깝게 만들기, 원래 값에 log 함수 적용 > 가장 많이 사용됨. 심하게 왜곡된 데이터에 좋음

05 로지스틱 회귀

로지스틱 회귀

  • 선형 회귀 방식을 분류에 적용한 알고리즘
  • 시그모이드 함수 최적선을 찾고 시그모이드 함수 반환 값을 확률로 간주해 확률에 따라 분류를 결정

시그모이드 함수

  • x값이 +,-로 아무리 커지거나 작아져도 y값은 항상 0과 1 사이 값 변환
  • x값이 커지면 1에 근사하며 작아지면 0에 근사
  • x=0이면 0.5

07 회귀 트리

회귀 트리

  • 회귀를 위한 트리를 생성하고 이를 기반으로 회귀 예측을 하는 알고리즘
  • 결정 트리가 특정 클래스 레이블을 결정하는 것과 달리 회귀 트리는 리프 노드에 속한 데이터 값의 평균값을 구해 회귀 예측 값을 계산함

회귀 트리 동작 원리

  • RSS를 가장 잘 줄일 수 있는 변수를 기준으로 분기(split) 생성
  • split을 기준으로 노드 재귀적으로 분할
  • 리프 노드에 소속된 데이터 값의 평균값을 구해 리프 노드의 결정값으로 할당

CART (classification and regression trees)

  • 분류 뿐만 아니라 회귀도 가능하게 해주는 트리 생성 알고리즘
  • 결정 트리, 랜덤포레스트, GBM, XGBoost, LightGBM등의 모든 트리 기반 알고리즘은 분류 뿐 아니라 회귀도 가능함