Note

부스팅(Boosting) - XGBoost ( eXtra Gradient Boost ) 본문

Machine Learning/Classification

부스팅(Boosting) - XGBoost ( eXtra Gradient Boost )

알 수 없는 사용자 2021. 5. 25. 17:02
728x90

1. 장점 

(1) 뛰어난 예측 성능

(2) GBM 대비 수행 시간이 빠르다. ( CPU 병렬 처리, GPU 지원 )

(3) 규제 기능 탑재, Tree Prunning

(4) 조기 중단, 자체 내장된 교차 검증, 결측 값 자체 처리

 

2. 조기 중단 기능 (Early Stopping)

(1) 특정 반복 횟수만큼 더 이상 비용함수가 감소하지 않으면 지정된 반복 횟수를 완료하지 않고 수행 종료 가능.

(2) 학습을 위한 시간 단축. ( 최적화 튜닝 단계에서 사용 가능)

(3) 반복 횟수를 단축할 경우 최적화 문제 발생 가능성 - 최적화가 되지 않은 상태에서 학습이 종료될 수 있다.

 

3. 코딩 - 위스콘신 유방암  데이터 ( 다양한 방법을 똑같은 데이터로 예측 성능을 비교하기 위함)

공통된 라이브러리 로드

XGBoost는 두 가지 방식으로 적용 가능하다.

 

3.1 Python 사용

필요한 라이브러리를 임포트 한다.

내장된 위스콘신 유방암 데이터를 로드한다.

데이터를 8:2 비율로 학습 데이터와 테스트 데이터로 분리한다.

Python Wrapper XGBoost는 학습과 예측 데이터 세트를 DMatrix로 변환이 필요하다.

params에서 학습률, 조기 중단 기능 등을 설정해준다.

학습용 데이터는 ‘train’ , 테스트용 데이터는 ‘eval’로 표시하고, 하이퍼 파라미터와 조기 중단 기능 파라미터를 train( ) 함수의 파라미터로 전달한다.

테스트용 데이터를 predict()를 사용해서 예측 확률값을 15개를 반환한다.

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

get_clf_eval( ) 메서드를 통해 예측 평가하고 결과 값들을 출력한다.

중요한 feature 들을 확인하기 위해 그래프를 F-Score를 기준으로 나열한다.

f13, f21, f1, f28, f15 순으로 나열된 것을 볼 수 있다.

 

3.2 사이킷런 내장 함수 사용

원래 검증에 test 데이터를 사용하면 안 되지만 검증 데이터가 따로 없으므로 사용한다.

클래스를 임포트 하고 객체를 생성하고 학습 횟수는 400, 학습률 0.1로 설정해줬다.

조기 중단 기능 옵션을 100으로 설정해주고 학습 시킨 후 예측하였다.

학습 결과 출력된 모습이다. 학습 속도에서 하이퍼 파라미터 튜닝을 해서 베이스라인을 잡은 다음에
점차 early_stopping_rounds나 n_estimator 수를 늘려나가는 것도 예측 성능을 높이는 데 도움이 된다.

두 가지 모델을 비교하기 위해 feature 중요도를 똑같이 확인한다.

아까와는 달리 f21, f1, f13, f27, f26 순으로 나열된 것을 볼 수 있다.

Comments