출처: 코리 웨이드.(2022). XGBoost와 사이킷런을 활용한 그레이디언트 부스팅. 서울:한빛미디어
LightGBM
- MicroSoft에서 만든 그레디언트 부스팅 library
- leaf-wise 트리 성장 방식을 사용
- 히스토그램 기반 그레디언트 부스팅 사용
- 특성 값을 구간(bin)으로 나누어 노드를 분할
- 속도가 빠름
- 메모리 사용량도 적음
- XGBoost도 0.7 version부터 사용 가능
- tree_method('hist'), grow_policy('Lossguide')로 설정하면됨
- 'category' type 설정 시, 범주형 특성을 자동으로 인식하여 처리함
- categorical_features에 특성의 column index or column name을 전달해도 가능
- XGBoost의 경우, 1.5 version에서 tree_method('gpu_hist')로 지정하면 사용 가능
- Hyper parameter
- num_leaves: 리프 노드의 최대 개수 지정 (모델 복잡도 결정, default 31)
- min_child_samples: 리프 노드의 최소 샘플 개수 지정 (과대적합 방지)
- max_depth: 트리 최대 깊이 (default -1)
- n_estimators: 부스팅 횟수 (default 100)
- learning_rate: 학습률 (default 0.1)
- subsample: 트리 생성 시, 랜덤하게 추출할 샘플 비율 (default 1)
- subsample_freq: 부스팅 횟수 몇 번마다 subsampling할지 지정
- Feature importance: plot_importance 함수 사용
- Tree Graph: plot_tree 함수 사용
- 부스팅 각 단계에서 추가된 트리 시각화
- show_info: 노드 안에 포함될 정보 지정
- internal_count: 노드에 포함되는 샘플 수
- leaf_count: 리프 수
- split_again: 노드 분할로 얻는 이익
- orientation: 그래프 방향 ('vertical': 루트 노드가 맨 위에서 시작)
CatBoost
- 범주형 특성을 잘 처리함
- depth-wise 트리 성장 방식을 사용 (XGBoost와 유사)
- 대칭적인 구조를 가짐
- 깊이가 같은 노드는 모두 동일한 특성을 사용하여 분할
- 속도를 높이고 과대적합을 방지함
- Missing Value
- 수치형 특성의 경우 특성의 최솟값으로 대체
- 범주형 변수는 처리 못함 -> 별도의 작업 필요
- Hyper paramter
- cat_features: 범주형 특성 -> 특성의 인덱스로 전달해야함
- n_estimators: 부스팅 횟수
- max_depth: 트리 최대 깊이
- learning_rate: 학습률
- min_child_samples: 리프 노드의 샘플 개수 지정
- grow_policy: 트리 성장 방식 지정
- Depthwise(깊이별), Lossguid(리프별), SymmetricTree(대칭트리)
Reference