05 XGBoost
XGBoost : GBM 을 기반으로, 단점을 보완한 알고리즘. 분류에서 일반적으로 다른 ML보다 뛰어난 예측 성능을 가짐.
XGBoost의 주요 장점
- 분류, 회귀 영역에서 뛰어난 예측 성능
- GBM 대비 빠른 수행 시간 - 병렬 수행 및 다양한 기능
- 과적합 규제
- Tree pruning - 더 이상 긍정 이득이 없는 분할을 가지치기 해 분할 수 줄임
- 자체 내장된 교차 검증 - 조기 중단 기능
- 결손값 자체 처리
파이썬 래퍼와 사이킷런 래퍼 : 초기에는 C/C++ 라이브러리 > 파이썬 구동 패키지 > 사이킷런 호환 패키지
| 파이썬 래퍼 XGBoost | 사이킷런 래퍼 XGBoost |
| 사이킷런과 호환되지 않는 초기의 독자적인 XGBoost 전용 패키지 고유의 API와 하이퍼 파라미터 사용 주로 XGBoost의 고급 기능과 하이퍼퍼라미터 튜닝을 수행할 때 사용 |
사이킷런과 연동되어 표준 사이킷런 개발 프로세스 및 유틸리티 사용 가능 XGBClassifier, XGBRegressor |
파이썬 래퍼 XGBoost 하이퍼 파라미터
- 일반 파라미터 : 스레드의 개수나 silent 모드 등 선택, 일반적으로 default 값 유지
- 부스터 파라미터 : 트리 최적화, 부스팅, regularization 관련
- 학습 태스크 파라미터 : 학습에 사용되는 객체 함수, 평가 지표 등 설정
주요 일반 파라미터
- booster : gbtree 트리 기반 모델, 디폴트 /gblinear 선형 모델
- silent : 0(출력 메시지 x 디폴트) /1
- nthread : CPU의 실행 스레드 개수 (디폴트:전체 스레드 사용)
- eta : learning rate
- num_boost_rounds : n_estimator
- min_child_weight : 트리 분할을 결정하는 데이터들의 weight 총합
- gamma : 트리의 리프 노드를 추가적으로 나눌지 결정하는 최소 손실 감소 값
- max_depth
- sub_sample
- colsample_bytree : max_features
주요 부스터 파라미터
- lambda : L2 Regulation 적용 값
- alpha : L1Regulation 적용 값
- scale_pos_weight : 비대칭한 클래스로 구성된 데이터 세트의 균형을 위한 파라미터
주요 학습 태스크 파라미터
- objective : 최솟값을 가져야 할 손실 함수를 정의
- eval_matric : 검증에 사용되는 함수
과적합 제어
eta는 낮추고, num_round는 올린다. max_depth를 낮추고 min_child_weight와 gamma 값은 올린다. subsample, colsample_bytree를 조절한다.
파이썬 래퍼 XGBoost 교차 검증
xgboost.cv(params, dtrain, num_boost_round, nfold, stratified, folds, metrics, obj, feval, maximize, early_stopping_rounds, fpreproc, as_pandas, verbose_eval, show_stdv, seed, call_back, shuffle )

사이킷런 래퍼 XGBoost 하이퍼 파라미터
파라미터명 차이
| 파이썬 래퍼 | 사이킷런 래퍼 |
| eta | learning_rate |
| sub_sample | subsample |
| lambda | reg_lambda |
| alpha | reg_alpha |
| num_boost_round | n_estimators |
조기 중단 파라미터
- early_stopping_rounds : 평가 지표가 향상될 수 있는 반복 횟수 정의
- eval_metric : 조기 중단을 위한 평가 지표
- eval_set : 성능 평가를 수행할 데이터 세트
06 LightGBM
LightGBM : GBM 기반, XGBoost 장점 계승, 단점 보완한 알고리즘
XGBoost 대비 장점
- 빠른 학습과 예측 수행 시간, 더 작은 메모리 사용량
- XGBoost와 예측 성능은 비슷하지만 기능이 더 다양함
- 카테고리형 피처의 자동 변환과 최적 분할
- 리프 중심 트리 분할 : 일반적인 트리 분할 방식처럼 트리의 균형을 맞추는 대신 리프 노드를 지속적으로 분할하면서 트리의 깊이가 깊어지고 비대칭적인 규칙 트리가 생성
단점
- 과적합 가능성 증가
주요 파라미터
- num_ilerations :반복 수행하려는 트리의 개수
- learning_rate : 부스팅 스텝을 반복적으로 수행할 때 업데이트 되는 학습률
- max_depth
- min_data_in_leaf
- num_leaves
- boosting : 부스팅의 트리를 생성하는 알고리즘
- bagging_fraction : 데이터 샘플링 비율 지정, 과적합 제어
- feature_fraction : 개별 트리를 학습할 때마다 무작위로 선택하는 feature의 비율
- lambda_l2 : L2 regulation 제어, 과적합 제어
- lambda_l1 : L1 regulation 제어, 과적합 제어
학습 태스크 파라미터
- objective : 최솟값 가져야 할 손실 함수 정의. binary:logistic / nulti:softmax / multi:softprob
07 베이지안 최적화 기반의 HyperOpt를 이용한 하이퍼 파라미터 튜닝
기존 단점
- 부스팅 알고리즘 모델은 하이퍼 파라미터가 많아 Grid Search로 튜닝 시, 대용량 데이터으 경우 기하급수적으로 최적화 시간이 증가
하이퍼 파라미터 최적화 방식
- Manual Search : 직관, 노하우 등에 의존하여 최적 하이퍼 파라미터를 직접 탐색하는 방법
- Grid Search : 특정 탐색 구간의 하이퍼 파라미터 값들을 일정 간격으로 선정하여 탐색하는 방법
- Random Search : 특정 탐색 구간의 하이퍼 파라미터 값들을 랜덤 샘플링으로 선정하여 탐색하는 방법
- Bayesian optimization
베이지안 최적화 : 목적 함수 식을 제대로 알 수 없는 블랙 박스 형태의 함수에서 최대 또는 최소 함수 반환 값을 만드는 최적 입력값(최적 함수) 을 효과적으로 찾아주는 방식
베이지안 확률 기반 최적화 기법의 필수 구성 요소
- 대체 모델 : 획득 함수의 입력값 바탕으로, 미지의 목적 함수의 형태에 대해 확률적인 추정을 하는 모델
- 획득 함수 : 대체 모델이 목적 함수에 대해 확률적으로 추정한 결과를 바탕으로, 최적 입력값을 찾는 데 있어 가장 유용할 만한 다음 입력값 추천하는 함수
Step 1

- 최초에는 랜덤하게 하이퍼 파라미터들을 샘플링하고 성능 관찰
- 주황색 실선 : 목표 최적함수
- 검은색 점 : 특정 하이퍼 파라미터 값에 대한 관측된 성능 지표 결괏값
Step 2

- 관측된 값을 기반으로 대체 모델은 최적 함수를 추정
- 파란색 영역 : 예측된 함수의 신뢰 구간 분산
- 최적 관측값은 y축에서 가장 높은 값의 하이퍼 파라미터
Step 3

- 획득 함수는 다음으로 관측할 하이퍼 파라미터 값 계산
- 획득 함수는 이전의 최적 관측값보다 더 큰 최댓값을 가질 가능성이 높은 지점을 찾아서 대체 모델에 전달
Step 4

- 획득 함수로부터 전달된 하이퍼 파라미터를 수행하여 관측된 값을 기반으로 대체 모델은 갱신되어 다시 최적 함수 예측
HyperOPT
- 베이지안 최적화를 하이퍼 파라미터 튜닝에 적용할 수 있도록 제공되는 파이썬 패키지 중 하나
- 대체 모델이 최적 함수를 추정할 때 트리 파르젠사용
- 목적 함수 반환값의 최솟값을 가지는 최적 입력값 유추
활용 로직
- 입력 변수명, 입력값의 검색 공간 설정
- 목적 함수 설정
- 목적 함수의 반환값이 최솟값을 가지게 하는 최적 입력값 유추
입력값의 검색 공간 제공 함수
hyperopt의 hp 모듈 : from hyperopt import hp
- hp.quniform : 검색 공간을 범위를 이용해서 설정
- hp.uniform : 검색 공간을 정규 분포 형태로 설정
- hp.randint() : 검색 공간을 일정 범위 내에서 랜덤한 정숫값으로 설정
- hp.loguniform() : 반환값:exp(uniform(low, high)). 반환값의 log 변환된 값이 정규 분포를 띄도록 검색 공간 설정
- hp.choice() : 검색값에 문자열이 포함되어 있을 경우 설정
목적 함수의 최적 입력값 유추 함수 : fmin()
hyperopt의 fmin 모듈: from hyperopt import fmin
fmin(fn, space, algo, max_evals, trials)
- fn : 목적 함수
- space : search_space와 같은 검색 공간 딕셔너리
- algo : 베이지안 최적화 적용 알고리즘 - tpe.suggest (TPE)
- max_evals : 최적 입력값을 찾기 위한 입력값 시도 횟수
- trials : 최적 입력값을 찾기 위해 시도한 입력값 및 해당 입력값의 목적 함수 반환값 저장에 사용
- rstate: fmin()을 수행할 때마다 동일한 결괏값을 가질 수 있도록 설정하는 랜덤 시드
기본 로직
- 입력 변수명, 입력값의 검색 공간 설정
- 목적 함수 생성
- 목적 함수의 반환값이 최솟값을 가지도록 하는 최적 입력값 유추
- Trials 객체 results, vals 속성
08 스태킹 앙상블
스태킹 앙상블 : 개별 알고리즘으로 예측한 데이터 기반으로 다시 예측 수행하는 방식
구성 모델
- 개별 기반 모델 : 많은 개별 모델 필요
- 최종 메타 모델 : 개별 기반 모델의 예측 데이터를 스태킹 형태로 결합해 학습 데이터로 만들어 학습
- 메타 모델 : 개별 모델의 예측된 데이터 세트를 기반으로 학습하고 예측하는 방식
기본 로직
- 모듈 임포트, 데이터 준비
- 개별,최종 모델 Classifier 생성
- 개별 모델 학습 예측 평가
- 최종 메타 모델 학습 데이터 생성
- 최종 메타 모델 학습 예측 평가
CV 세트 기반 스태킹 : 과적합 개선을 위해 개별 모델이 각각 교차 검증으로 메타 모델을 위한 학습용 스태킹 데이터 생성과 예측을 위한 테스트용 스태킹 데이터를 생성해 이를 기반으로 메타 모델이 학습, 예측하는 방식
단계
1. 개별 기반 모델별로 학습 예측 수행
- 학습 데이터를 k개의 fold로 나눔
- k-1개의 fold를 학습 데이터로 하여 base 모델 학습 (k번 반복)
- 검증 fold 1개를 예측한 결과 (K fold) > 최종 메타 모델의 학습 데이터
- 테스트 데이터를 예측한 결과의 평균 > 최종 메타 모델의 테스트 데이터
2. 최종 메타 모델 학습 예측 평가
- 각 base 모델이 생성한 학습용 데이터를 stacking > 최종 meta 모델의 학습용 데이터 세트
- 각 base 모델이 생성한 테스트용 데이터를 stacking > 최종 meta 모델의 테스트용 데이터 세트
- 최종 학습용 데이터 + 원본 학습 레이블 데이터로 학습
- 최종 테스트용 데이터로 예측 > 원본 테스트 레이블 데이터로 평가
CV 세트 기반 스태킹 구현
- 최종 메타 모델 학습/테스트용 데이터 생성 함수 정의
- 개별 모델로 최종 메타 모델 학습/테스트용 데이터 생성
- 스태킹 학습/테스트용 데이터 생성
- 최종 메타 모델 학습예측평가
'AIchemist' 카테고리의 다른 글
| [6주차] Discuss Question (0) | 2024.10.28 |
|---|---|
| [5주차] 회귀 (선형 회귀/과적합/과소적합/릿지/라쏘/엘라스틱넷/로지스틱/회귀트리) (0) | 2024.10.07 |
| [3주차] Discuss Question (0) | 2024.09.23 |
| [3주차] 분류(1) (결정 트리/앙상블 학습/랜덤 포레스트/GBM) (0) | 2024.09.23 |
| [2주차] Discussion Question (0) | 2024.09.08 |