[파이썬 머신러닝 가이드] 분류 - XGBoost

XGBoost

GBM의 단점인 느린 수행시간 및 과적합 규제 부재 등의 문제를 해결해서 매우 각광 받는중.

-뛰어난 예측 성능, GBM에 비해 빠른 수행시간(병렬수행), 과적합 규제, tree pruning(나무 가지치기)-긍정 이득 없는 분할을 가지치기 해서 분할 수 더 줄임, 자체 내장된 교차 검증(+최적화 되면 반복 중간에 멈출 수 있는 조기중단기능), 결손값 자체 처리, 피처 중요도 시각화(plot_importace)

 

  • 주요 부스터 파라미터(하이퍼 파라미터)
  • 학습 태스크 파라미터

- eval_metric : 검증에 사용되는 함수. 기본값은 회귀인 경우 rmse, 분류일 경우 error

- logloss = negative log likelihood,

- objective : 최솟값을 가져야 할 손실 함수.

→ 데이터가 0 또는 1 이진 분류면 목적함수는 이진 로지스틱(binary:logistic)

 

  • 과적합 문제가 심각한 경우?

- eta 값을 낮춤. eta 값을 낮출 경우 num_round(또는 n_estimators)는 반대로 높여줘야함.

- max_depth 값을 낮춤

- min_child_weight 값을 높임

- gamma 값을 높임

- subsample, colsample_bytree 조정하면 너무 복잡하게 생성되는거 막을 수 있음.

 

  • 조기 중단 기능

n_estimators에 지정한 부스팅 반복 횟수에 도달하지 않더라도 예측 오류가 더 이상 개선되지 않으면 반복을 끝까지 수행하지 않고 중지해 수행 시간 개선 가능

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

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

 

-주로 별도의 검증 데이터 세트를 이용함.

반드시! 평가용 데이터 세트 지정과 eval_metric을 함께 설정해야함(params안에 포함되어 있어도 되는듯), 분류일 경우 주로 error(분류 오류), logloss를 적용

학습 데이터 셋은 train, 또는 평가 데이터 셋은 eval로 명기함

ex) eval_list = [(dtr, ‘train’), (dval, ‘eval’)] / eval_list = [(dval, ‘eval’)] ← 평가용 데이터 셋만 명기.

 

- 조기 중단값 너무 줄이면 아직 성능이 향상될 여지 있음에도 적게 반복하는 동안 성능 평가지표 향상되지 않으면 반복 멈춰 버려서 충분한 학습이 되지 않아 예측 성능이 나빠질 수 있음.

 

  • 파이썬 래퍼 XGB

학습용, 검증, 테스트용 데이터 세트를 모두 전용의 데이터 객체인 DMatrix로 생성하여 모델에 입력해줘야함.

DMatrix(data, label) → data는 피처 데이터 세트(X), label은 분류의 경우엔 레이블 데이터 셋, 회귀의 경우는 숫자형인 종속값 데이터 셋.(y)

 

-xgboost의 predict()는 예측 결괏값이 아닌 예측 결과를 추정할 수 있는 확률 값을 반환함.

→ 예측 확률이 0.5보다 크면 1, 그렇지 않으면 0으로 예측값 결정하여 preds에 저장함.

데이터 세트의 개수가 워낙 작으면, 검증 데이터 분리하거나 교차 검증 등을 적용할 때 성능 수치 불안정함.