4-5. XGBoost

jwKim·2023년 1월 23일
0

XGBoost

01) XGBoost 개요

XGBoost는 GBM을 기반으로 두고 있지만, GBM의 가장 큰 단점인 학습 속도를 개선한 모델이다. 아래는 XGBoost의 장점이다. (규제, CPU 병렬 학습 지원 등의 방법으로 속도 향상 / 교재에 따르면 매우 각광받고 있는 알고리즘이라고 함)

  • 지도학습에서 뛰어난 예측 성능을 갖는다.
  • GBM 대비 빠른 학습 시간
  • 과적합 규제(Regularization)
  • 데이터 분할 시 무의미한 분할 방지
  • XGBoost 내부에 교차검증이 내장되어있고 최적화가 완료되면 조기 중단 기능 제공
  • XGBoost 내부에 결측값을 자체적으로 처리할 수 있는 기능 제공

    XGBoost는 C언어로 만들어진 라이브러리이다. 하지만 python에서도 해당 라이브러리를 사용할 수 있는 패키지가 있으며 패키지 이름은 xgboost 이다.

    XGBoost는 별도의 설치가 필요하다. '관리자 권한으로 실행' 환경으로 command 창을 띄우고 아래 명령어를 입력한다.

        conda install -c anaconda py-xgboost

    ※ 위 방법은 Window 10 기준 설치 방법이다.

XGBoost는 xgboost 패키지 안에 XGBClassifier()XGBRegression() 클래스를 통해 사용할 수 있다.

02) XGBoost 하이퍼파라미터

XGBoost의 하이퍼파라미터는 C로 되어있는 라이브러리를 python 라이브러리로 변경한 버전과, sklearn과의 싱크를 맞춘 버전의 이름이 다르다. 이번 포스팅에서는 전자의 경우를 살펴볼 것이다.

  • booster : 트리 기반(=gbtree) 모델과 회귀 기반(=gblinear) 모델 중 선택이 가능하다.
  • nthread : CPU 병렬처리에 사용될 CPU 개수를 조정한다.(default는 CPU 전체 사용)
  • eta(=learning rate) : 앞서 살펴본 GBM의 learning rate와 동일한 역할을 한다
  • num_boost_rounds(=n_estimators) : 앞서 살펴본 GBM의 n_estimatores 와 동일한 역할을 한다.
  • min_child_weight : 트리에서 다음 노드로 분할할지 결정하기 위한 weight 들의 총합을 기준으로 제공한다. 해당 하이퍼파라미터 값이 클수록 분할이 덜 된다.
  • gamma : 노드 분할 기준으로 최소 오차 감소 값을 제공한다. 지정된 값보다 오차 감소 폭이 커야 노드를 분할한다.
  • max_depth
  • sub_sample : GBM의 subsample과 동일한 역할을 한다.
  • colsample : GBM의 max_features와 유사한 역할을 한다.
  • lambda / alpha : L2 규제 / L1 규제를 위한 파라미터이다.
  • scalce_pos_weight : imbalance 한 데이터의 균형 유지를 위한 파라미터이다.
  • objective : 손실 함수를 지정한다. 주로 모델이 분류하는 클래스가 이진 분류인지, 다중 분류인지에 따라 달라진다.
    • 'binary', 'multi:softmax', 'multi:softprob'이 해당 파라미터로 들어올 수 있다.
  • eval_metric : 검증에 사용되는 함수를 지정한다. default는 회귀일 경우 rmse, 분류일 경우 error이다.

XGBoost도 트리 기반의 모델이기 때문에 트리의 크기가 과도하게 커지는 것을 방지하는 파라미터가 다수 있는 것을 확인할 수 있다.(물론 booster를 'gblinear'로 변경하면 회귀 기반 모델이 되지만, 과적합에 대응하려는 장치들을 마련해 두었다는 것)


0개의 댓글