224~349p

2023. 12. 16. 12:46책/머신러닝 완벽가이드

XGBoost(extreme gradient boosting)

트리 기반의 앙상블 학습에서 가장 각광받고 있는 기법

  • GBM의 단점인 느린 수행시간, 과적합 규제 부재 등의 문제를 해결

xgboost의 대표적인 장점

  • 분류와 회귀에서의 뛰어난 예측 성능
  • GBM대비 빠른 수행 시간
  • 과적합 규제
  • tree pruning
  • 자체 내장된 교차검증-교차검증을 통해 평가데이터셋의 평가값이 최적화되면 반복을 중간에 멈출 수 있는 early stopping 기능 존재
  • 결손값 자체 처리

파이썬 래퍼 xgboost 모듈 & 사이킷런 래퍼 xgboost 모듈

파이썬 래퍼 xgboost 모듈 : 초기의 독자적인 xgboost 프레임워크 기반의 xgboost 사이킷런 래퍼 xgboost 모듈 : 사이킷런과 연동되는 모듈

파이썬 래퍼 xgboost 하이퍼 파라미터

  • GBM과 유사한 하이퍼 파라미터를 가지고 있으며, 여기에 조기 중단, 과적합을 규제하기 위한 하이퍼 파라미터 등이 추가됨

일반 파라미터 : 스레드의 개수나 silent 모드 등의 선택을 위한 파라미터 부스터 파라미터 : 트리 최적화, 부스팅, regularization 등과 관련 파라미터 등을 지칭 학습 태스크 파라미터 : 학습 수행 시의 객체 함수, 평가를 위한 지표 등을 설정

2023년 12월 5일 229~231p

파이썬래퍼를 사용할 경우 train, test data를 위해 별도의 DMatrix를 생성해야 함

*DMatrix : 넘파이 입력 파라미터를 받아서 만들어지는 XGBoost만의 데이터셋

주요 부스터 파라미터 (파이썬 /사이킷런래퍼 비교)

파이썬래퍼 사이킷런래퍼 설명

eta learning_rate 부스팅 스텝을 반복적으로 수행할 때 업데이트되는 학습률 값
num_boost_around n_estimators 사용할 약한 학습자의 개수(GBM-estimators와 같은 파라미터)
min_child_weight min_child_weight 과적합 조절 용도
gamma min_split_loss 값이 클수록 과적합 감소
max_depth max_depth 트리 깊이
sub_sample subsample 데이터 샘플링 비율 지정
colsample_bytree colsample_bytree 트리 생성에 필요한 피처(컬럼)를 임의로 샘플링하는데 사용
lambda reg_lambda L2규제(릿지) 가중치 - 클수록 과적합 감소
alpha reg_alpah L1규제(라쏘) 가중치 - 클수록 과적합 감소
scale_pos_weight scale_pos_weight 불균형 데이터셋의 균형 유지를 위해 사용

학습 태스크 파라미터

objective : 최솟값을 가져야 할 손실 함수 정의

binary:logistict : 이진분류에 적용

multi:softmax : 다중분류에 적용

multi:softprob : multi:softmax와 유사하나 개별 레이블 클래스의 해당되는 예측 확률 반환

eval_metric

  • rmse (root mse)
  • mae (mean absolute error)
  • logloss (negative log-likelihood)
  • error (binary classfication error rate - 0.5 threshold)
  • merror (multiclass classfication error rate)
  • mlogloss (multiclass logloss)
  • auc (area under ther curve)

과적합 문제 해결하는 방법

  • eta 낮추기 (반대로 num_boost_round/n_estimators는 높여주기)
  • max_depth 낮추기
  • min_child_weight 높이기
  • gamma 높이기
  • subs_ample, colsample_bytree 낮추기 (트리가 너무 복잡해지는 것을 막아 과적합 문제 해결)

★early stopping(조기 중단) 기능

  • GBM의 경우 n_estimators에 지정된 횟수만큼 학습을 끝까지 수행하지만, XGB의 경우 오류가 더 이상 개선되지 않으면 수행을 중지

ex)

n_estimators를 200으로 설정하고, 조기 중단 파라미터 값을 50으로 설정하면, 1부터 200회까지 부스팅을 반복하다가 50회를 반복하는 동안 학습오류가 감소하지 않으면 더 이상 부스팅을 진행하지 않고 종료함

(가령 100회에서 학습오류 값이 0.8인데 101~150회 반복하는 동안 예측 오류가 0.8보다 작은 값이 하나도 없으면 부스팅을 종료)

244~246p 2023년 12월 9일

LightGBM

LightGBM은 XGBoost와 함께 부스팅 계열 알고리즘에서 가장 각곽 받고 있음

XGBoost는 GBM 보다는 빠르지만 여전히 학습 시간이 오래 걸린다는 단점이 있음

LightGBM은 이러한 학습 시간을 개선한 알고리즘이고 메모리 사용량도 적음

LightGBM 장점

  • 더 빠른 학습과 예측 수행 시간
  • 메모리 사용량 적음
  • XGBoost와 예측 성능에서 큰 차이가 없음
  • 카테고리형 피처의 자동 변환과 최적 분할(원-핫 인코딩을 사용하지 않고도 카테고리형 피처를 최적으로 변환)

LightGBM 단점

  • 적은 데이터셋에 적용할 경우 과적합 발생 쉬움(공식 문서에 따르면 약 1만건 이하의 데이터셋)

일반적인 GBM 계열의 트리 분할 방법은 트리의 깊이를 효과적으로 줄이기 위해 ‘균형 트리 분할 방식(level wise)’을 사용 (오버피팅에 더 강한 구조이기 때문)

  • 반대로 이러한 방식은 균형을 맞추기 위한 시간이 필요하다는 상대적인 담점이 존재

LightGBM은 ‘균형 트리 분할 방식’이 아닌 ‘리프 중심 트리 분할 방식’(leaf wise)을 사용

  • 최대 손실 값을 가지는 리프 노드를 지속적으로 분할하면서 트리의 깊이가 깊어지고 비대칭적인 규칙 트리가 생성되는 것이 특징
  • 결국 학습을 반복할수록 균형 트리 분할 방식보다 예측 오류 손실을 최소화할 수 있다는 것이 LightGBM의 구현 사상

~250p 2023년 12월 9일

주요파라미터

  • num_iterations [default=100]
    • 반복 수행하려는 트리의 개수를 지정
  • learning_rate [default=0.1]
    • 0에서 1사이의 값을 지정하며 부스팅 스텝을 반복적으로 수행할 때 업데이트되는 학습률 값
  • max_depth [default=-1]
    • 트리 기반 알고리즘의 max_depth와 같음
  • min_data_in_leaf [default=20]
    • 결정 트리의 min_samples_leaf와 같은 파라미터
  • num_leaves [default=31]:
    • 하나의 트리가 가질 수 있는 최대 리프 개수
  • boosting [default=gbdt]
    • 부스팅의 트리를 생성하는 알고리즘을 기술
      • • gbdt : 일반적인 그래디언트 부스팅 결정 트리
      • • rf : 랜덤 포레스트
  • bagging_fraction [default=1.0]
    • 트리가 커져서 과적합되는 것을 제어하기 위해서 데이터를 샘플링하는 비율을 지정
  • feature_fraction [default=1.0]
    • 개별 트리를 학습할 때마다 무작위로 선택하는 feature의 비율
  • lambda_l2 [default=0.0]
    • L2 regulation 제어를 위한 값
  • lambda l1 [default=0.0]
    • L1 regulation 제어를 위한 값

Learning Task 파라미터

  • objective
    • 최솟값을 가져야 할 손실함수를 정의

하이퍼 파라미터 튜닝 방안

num_leaves의 개수를 중심으로 min_child_samples(min_data_in_leaf), max_depth를 함께 조정하면서 모델의 복잡도를 줄이는 것

  • num_leaves는 개별 트리가 가질 수 있는 최대 리프의 개수이고 LightGBM 모델의 복잡도를 제어하는 주요 파라미터
  • min_data_in_leaf는 과적합을 개선하기 위한 중요한 파라미터
  • max_depth는 명시적으로 깊이의 크기를 제한

learning_rate를 작게 하면서 n_estimators를 크게 하는 것은 부스팅 계열 튜닝에서 가장 기본적인 튜닝 방안이므로 이를 적용하는 것도 좋지만 n_estimators를 너무 크게 하는 것은 과적합으로 오히려 성능이 저하될 수 있음

파이썬 래퍼 LightGBM과 사이킷런 래퍼 XGBoost, LightGBM 하이퍼 파라미터 비교

파이썬 래퍼 LightGBM 사이킷런 래퍼 LightGBM 사이킷런 래퍼 XGBoost

num_iterations n_estimators n_estimators
learning_rate leaning_rate learning_rate
max_depth max_depth max_depth
min_data_in_leaf min_child_samples N/A
bagging_fraction subsample subsample
feature_fraction colsample_bytree colsample_bytree
lambda_l2 reg_lambda reg_lambda
lambda_l1 reg_alpha reg_alpha
early_stopping_round early_stopping_rounds early_stopping_rounds
num_leaves num_leaves N/A
min_sum_hessian_in_leaf min_child_weight min_child_weight
  • 빨간색은 동일한 형태

2023년 12월 15일 ~351

베이지안 최적화 기반 하이퍼 파라미터 튜닝

지금까지는 하이퍼 파라미터 튜닝을 위해서 Grid search 방식을 적용했음

Grid Search 방식의 한 가지 주요한 단점은 튜닝해야 할 하이퍼 파라미터 개수가 많을 경우 최적화 수행 시간이 오래 걸린다는 것임

물론 Xgboost나 LightGBM은 뛰어난 알고리즘이어서 정교화된 하이퍼 파라미터 튜닝 없어도 높은 모델 성능을 보장하지만, 모델의 성능을 향상시켜야 하는 경우 캐글이나 경진대회에서 grid search 기반의 최적화는 아쉬운 상황이 될 수 있음

베이지안 최적화 개요

  • 목적 함수의 식을 제대로 알 수 없는 함수에서, 최대 또는 최소의 함수 반환 값을 만드는 최적 입력값을 가능한 적은 시도를 통해 빠르고 효과적으로 찾아주는 방식
  • 베이지안 확률에 기반을 두고 있는 최적화 기법
    • 베이지안 확률이 새로운 데이터를 기반으로 사후 확률을 개선해 나가듯이, 베이지안 최적화는 새로운 데이터를 입력받았을 때, 최적 함수를 예측하는 사후 모델을 개선해 나가며 최적 함수 모델을 만들어냄
  • 베이지안 최적화의 주요 요소
    • 대체 모델
    • 획득 함수

대체 모델은 획득 함수로부터 최적 함수를 예측할 수 있는 입력값을 추천받고 이를 기반으로 최적 함수 모델 개선, 획득 함수는 개선된 대체 모델을 기반으로 최적 입력값을 계산하는 프로세스

이때, 입력값은 하이퍼 파라미터에 해당함.

즉, 대체 모델은 획득 함수로부터 하이퍼 파라미터를 추천받아 모델 개선 수행, 획득 함수는 개선된 모델을 바탕으로 더 정확한 하이퍼 파라미터를 계산

베이지안 최적화 프로세스

  1. 랜덤하게 하이퍼 파라미터를 샘플링하고 성능 결과 관측
  2. 관측된 값을 기반으로 대체 모델은 최적 함수 측정
  3. 추정된 최적 함수를 기반으로 획득 함수는 다음으로 관측할 하이퍼 파라미터 값을 계산 - 획득 함수는 이전의 최적 관측값보다 더 큰 최댓값을 가질 가능성이 높은 지점을 찾아서 다음에 관측할 하이퍼 파라미터를 대체 모델에 전달함
  4. 획득 함수로부터 전달된 하이퍼 파라미터를 수행하여 관측된 값을 기반으로 대체 모델은 갱신되어 다시 최적 함수를 예측 추정

3~4번 단계를 특정 횟수만큼 반복하게 되면 대체 모델의 불확실성이 개선되고 점차 정확한 최적 함수 추정이 가능해짐

대체 모델은 최적 함수를 추정 시 일반적으로 가우시안 프로세스를 적용

하지만 hyperopt는 가우시안 프로세스가 아닌 트리 파르젠 estimator를 사용

HyperOpt 사용하기

프로세스

  1. 검색 공간 설정
  2. 목적 함수 설정
  3. fmin() 함수를 통해 베이지안 최적화 기법에 기반한 최적의 입력 값 찾기

hyperopt의 hp모듈 : 입력값의 검색 공간을 다양하게 설정할 수 있도록 여러 가지 함수를 제공함

  • hp.quniform(label, low, high, q) q는 간격을 의미
  • hp.uniform(label, low, high) 정규 분포 형태의 검색 공간 설정
  • hp.randint(label, upper)
  • hp.longuniform(label, low, high)
  • hp.choice(label, options)

목적 함수 설정 : 목적 함수는 반드시 변숫값과 검색 공간을 가지는 딕셔너리를 인자로 받고, 특정 값을 반환하는 구조로 반들어야함

입략값의 검색 공간과 목적 함수를 설정했으면 목적 함수의 반환값이 최소가 될 수 있는 최적의 입력값을 베이지안 최적화 기법에 기반하여 찾아 줘야 함

이런 기능을 수행하기 위함 fmin 함수

<fmin 함수 주요 인자>

space

algo : 베이지안 최적화 적용 알고리즘

max_evals : 최적 입력값을 찾기 위한 입력값 시도 횟수

trials : 최적 입력값을 찾기 위해 시도한 입력값 및 해당 입력값의 목적 함수 반환값 결과를 저장하는 데 사용

rstate : fmin()을 수행할 때마다 동일한 결괏값을 가질 수 있도록 설정한는 랜덤 시드 값

HyperOpt를 이용한 XGBoost 하이퍼 파라미터 최적화

주의사항

  • HyperOPt는 입력 값과 반환 값이 모두 실수형이기 때문에 정수형 하이퍼 파라미터 입력 시 정수형으로 형변환 필요
  • HyperOpt는 목적 함수의 최솟값을 반환할 수 있도록 최적화하는 것이기 때문에 성능 값이 클수록 좋은 성능 지표일 경우 -1을 곱해줘야 함 ( 뒤에서 배울 회귀의 MAE, RMSE와 같은 성능 지표는 작을수록 좋기 때문에 반환 시 -1을 곱할 필요 없음

캐글 신용카드 사기 검출

언더 샘플링과 오버 샘프링의 이해

레이블이 불균형한 분포를 가진 데이터셋을 학습시킬 때 예측 성능의 문제가 발생할 수 있는데, 이는 레이블을 가지는 데이터 건수가 정상 레이블을 가진 데이터 건수에 비해 너무 적기 때문에 발생함

따라서 지도학습에서 극도로 불균형한 레이블 값 분포로 인한 문제점을 해결하기 위해 적절한 학습 데이터를 확보하는 방안이 필요한데, 대표적으로 오버 샘플링과 언더 샘플링 방법이 있으며, 오버 샘플링이 예측 성능상 더 유리한 경우가 많음

  • 언더 샘플링은 많은 데이터셋을 적은 데이터셋 수준을 감소시키는 방식
  • 오버 샘플링은 이상 데이터와 같이 적은 데이터셋을 증식하여 학습을 위한 충분한 데이터셋을 확보하는 방법임
    • 동일한 데이터를 단순히 증식하는 방법은 과적합이 되기 때문에 의미가 없으므로 원본 데이터의 feature 값들을 아주 약간만 변경하여 증식함
    • 대표적인 방법으로 SMOTE가 있음
      • synthetic minority over-sampling technique(SMOTE)방식은 적은 데이터셋에 있는 개별 데이터들의 K 최근접 이웃을 찾아서 이 데이터와 K개 이웃들의 처리를 일정 값으로 만들어서 기존 데이터와 약간 차이가 나는 새로운 데이터를 생성하는 방식

스태킹 앙상블

  • 스태킹은 개별적인 여러 알고리즘을 서로 결합해 예측 결과를 도출한다는 점에서 배깅 및 부스팅과 공통점을 가짐
  • 하지만 가장 큰 차이점은 개별 알고리즘으로 예측한 데이터를 기반으로 다시 예측을 수행한다는 점임. 즉, 개별 알고리즘의 예측 결과 데이터셋을 최종적인 메타 데이터셋으로 만들어 별도 ML 알고리즘으로 최종 학습을 수행하고 테스트 데이터를 기반으로 다시 최종 예측을 수행하는 방식
  • 개별 모델의 예측된 데이터셋을 기반으로 학습하고 예측하는 방식을 메타 모델이라고 함
  • 스태킹에는 개별적인 기반 모델과 최종 메타 모델이 필요하며 핵심은 여러 개별 모델의 예측 데이터를 각각 스태킹 형태로 결합해 최종 메타 모델의 학습용 feature 데이터셋과 테스트 feature 데이터셋을 만드는 것

<스태킹 앙상블 프로세스>

하나의 데이터셋 → 학습 → n개의 ml 알고리즘 모델이 예측 수행 → 하나의 데이터셋에서 n개의 레이블 결괏값 도출 → n개의 결괏값을 다시 함침 → 합친 데이터 세트에 모델을 적용 후 최종 예측 실행

Linear Regression

  • 회귀에서 RSS는 비용(Cost), 비용 함수, 손실 함수(loss function)라고 함
  • 머신러닝 회귀 알고리즘은 데이터를 계속 학습하면서 이 비용 함수가 반환하는 값을 지속해서 감소시키고 최종적으로는 더 이상 갑소하지 않는 최소의 오류 값을 구하는 것임

1)단순 선형 회귀(simple linear regression) : 한개의 독립 변수로 타겟 변수 예측

2)다중 선형 회귀(multiple linear regression) : 다수의 독립변수로 타겟 변수 예측

ex) 아들의 키 예측(y) = 아버지의 키 (x1) + 어머니의 키(x2) ...... 어머니 몸무게 …etc..

경사하강법

  • 점진적으로 반복적인 계산을 통해 w 파라미터를 업데이트하면서 오류 값이 최소가 되는 w 파라미터를 구하는 방식임. 핵심은 오류가 작아지는 방향으로 w 값을 업데이트하는 방법.
  • 목적함수 : 오차의 제곱을 최소화하는 w0, w1 찾기
  • 잔차 제곱의 합을 RSS / SSE(sum of squre error)라고함

비용 함수 RSS(w0,w1)에 경사하강법 적용

→ RSS(w0,w1)=N1∑i=1N(yi−(w0+w1∗xi))^2

식을 미분해서 미분 함수의 최솟값을 구해야 하는데 파라미터가 1개가 아닌 w0과 w1을 가지고 있어 편미분 진행.

  • 편미분의 결과값을 반복적으로 보정하면서 파라미터 값을 업데이트하면 RSS(w0,w1)가 최소가 되는 파라미터를 구할 수 있음.
  • 업데이트는 편미분 결과값에 마이너스(-)를 해준 뒤 원래 파라미터 값에 더해줌.
  • 그리고 편미분 값이 너무 클 수 있기 때문에 보정 계수 η를 곱하는데, 이를 '학습률' 이라고 부름

확률적 경사 하강법

  • 일반적으로 경사 하강법은 모든 학습 데이터에 대해 반복적으로 비용함수 최소화를 위한 값을 업데이트하기 때문에 수행 시간이 매우 오래 걸린다는 단점이 있다. 그래서 실전에서는 대부분 확률적 경사 하강법을 이용함.
  • 확률적 경사 하강법은 전체 데이터에 대해 파라미터를 업데이트하는 것이 아니라 일부 데이터만 이용해 파라미터가 업데이트하기 때문에 경사 하강법에 비해 빠른 속도를 보장함

평가(evaluation)

residuals을 줄이는 것이 목표

  • mse의 단점은 도메인의 종류에 따라 값이 천차만별인 것

ex) 키 데이터와 손 길이 데이터가 있을 때 키 데이터의 잔차 크기가 더욱 큼

또 부동산 가격 데이터가 존재하면 잔차 크기는 억단위의 크기를 가질 것임

⇒이러한 단점을 극복하기 위해 결정계수(coefficient of determination)를 사용함

결정계수(coefficient of determination)R^2

  • y값 예측을 위해 분산은 불필요
  • 결정 계수는 0 < R^2 < 1 사이에 존재
  • 1에 가까울수록 좋고 0에 가까울수록 안좋음

<Non-linear regression>

Polynomial regression

  • 장점 : 선형의 단점보완
  • 단점 : 모델 복잡도 증가
  • 코사인, 사인, 제곱, 로그 등으로 tranformation 가능

Overfitting and underfitting

 

단순한 모델은 과소적합 가능성 높음 ↔ 복잡한 모델은 과적합 가능성 높음

과적합 방지 방법

  • 데이터 증가시키기
  • feature selection
  • regularization

bias-variance trade off

  • 편향-분산 트레이드오프(Bias-Variance Trade off)는 머신러닝이 극복해야하는 가장 중요한 이슈 중의 하나
  • 높은 편향 / 낮은 분산에서 과소적합되기 쉬움
  • 낮은 편향 / 높은 분산에서 과적합되기 쉬움

→ 결국, 편향과 분산이 서로 적절히 이뤄지면서 오류 cost 값이 최대로 낮아지는 모델을 구축하는 것이 가장 효율적인 머신러닝 예측 모델을 만드는 방법임

Regularization

  • 𝝀는 하이퍼 파라미터로 regularization을 조정하는 역할
    • 𝝀가 커지면 weight는 작아지고 mse는 높아짐 ↔ 𝝀가 작아지면 weight는 커지고 mse는 작아짐
      • 𝝀=10000, weight=down, mse=up
      • 𝝀=0.001, weight=up, mse=down

ex) 보고서 양에 제한 없음 = 보고서 양 늘어남(내용은 풍부) = 내용 복잡

↔ 보고서 양 제한 = 보고서 양 줄어듬(내용은 적음)=보기 좋은 보고서

train R^2 test R^2

𝝀=1 0.98 0.5 overfitting
𝝀=100 0.3 0.3 underfitting
𝝀=10 0.8 0.8 fit
  • 𝝀를 적절히 조절한느 것이 regularization의 핵심

Ridge Regression

  • 릿지 회귀는 선형 회귀에 L2 규제를 추가한 회귀 모델
  • L2 규제는 상대적으로 큰 회귀 계수 값의 예측 영향도를 감소시키기 위해서 회귀 계수값을 더 작게 만드는 규제 모델

 

LASSO

  • 라쏘 회귀는 선형 회귀에 L1 규제를 적용한 방식
  • L2 규제가 회귀 계수 값의 크기를 줄이는 데 반해, L1 규제는 예측 영향력이 작은 feature의 회귀 계수를 0으로 만들어 회귀 예측 시 feature가 선택되지 않게 하는 것
  • lasso는 변수를 0으로 만들고 유의미하지 않은 0갓은 결국 제거 됨 - 이를 통해 어느 변수가 유의미한 것인지 파악 가능함 ( 따라서 l1규제는 feature 선택 기능으로도 불림
    • 위 그림에서 가장 유의미한 변수는 가장 늦게 0이된 핑크색 변수임

Elastic Net

  • L2, L1 규제를 함께 결합한 모델
  • 주로 feature가 많은 dataset에서 적용되며, L1 규제로 feature의 개수를 줄임과 동시에 L2 규제로 계수 값의 크기를 조정

' > 머신러닝 완벽가이드' 카테고리의 다른 글

분류  (0) 2024.01.05
회귀  (1) 2024.01.05
군집화  (0) 2024.01.05
차원축소  (1) 2023.12.30
XGBoost 개념  (0) 2023.12.05