<LightGBM>
- XGBoost 와 함께 부스팅 계열 알고리즘에서 가장 각광 받고 있는 중.
- XGBoost 보다 학습에 걸리는 시간이 훨씬 적음. 메모리 사용량도 적음.
- 예측 성능은 크게 다를바가 없음. (하지만 기능상의 다양헝은 얘가 약간 더 많음)
▷ XGBoost의 보완하는 방식으로 개발됐기 때문에
- 단점 : 적은 데이터 세트에 적용할 경우 과적합이 쉬움 ( 일반적으로 10,000건 이하라고 함)
- 리프 중심 트리 분할 (Leaf Wise) 방식을 사용.
▷ 대부분 트리의 깊이를 효과적으로 줄이기 위해 균형 트리 분할(Level Wise) 사용
: 최대한 균형 잡힌 트리를 유지하면서 분할하기 때문.
▷ 균형 잡힌 트리는 오버피팅에 보다 강한 구조를 가질 수 있다고 함.
▶ but, 이거는 균형을 맞추지 않고 최대 손실값(max delta loss)을 가지는 리프 중심 트리 분할.
- 균형보다는 깊이가 깊어지고 비대칭적인 트리가 생성됨.
▶그래서 학습을 반복할수록 예측 오류 손실을 최소화할 수 있다는 것이 구현 사상임.
: 하지만 오버피팅에는 약하지
- 카테고리형 피처의 자동 변환과 최적 분할(원-핫 인코딩 등 카테고리형 피처를 최적으로 변환함)
- 얘는 GPU도 지원함
tmi : 물론 할당을 해줘야함, 딥러닝 가면 더더욱 중요한 문제.
GPU없는 노트북에서는 학습이 50분 걸리는 데 GPU로 하니 7분걸리더라,,ㅎㅎ... 그래서 쥬피터 유료를 많이들 씀.
<주요 하이퍼 파라미터>
- 대부분 XGBoost랑 많이 유사함.
하지만 리프노드가 계속 분할되면서 트리의 깊이가 깊어지니까 이 점 유의해야함.
- num_iterations : 반복하려는 트리의 개수 지정. 크게 지정할수록 예측 성능이 높아질 수 있지만 과적합 문제 발생
- learning_rate : GBM, XGBoost랑 같은 파라미터.
-max_depth : 다른 트리기반 알고리즘과 같음. 하지만 Leaf wise 기반이니까 깊이가 더 깊음.
- min_data_in_leaf : 결정트리의 min_samples_leaf와 같은 파라미터. 최소한의 필요한 레코드 수. 과적합 제어
_num_leaves : 하나의 트리가 가질 수 있는 최대 리프 갯수
- boosting : gbdt, 일반적인 gradient boosted decision tree / rf : random forest
- bagging_fraction : 데이터 샘플링하는 비율 지정 (과적합 제어)
- feature_fraction : 개별 트리 학습할 때마다 무작위로 선택하는 피처의 비율.
*** 기본 방안 : num_leaves의 개수를 중심으로 min_child_samples(min_data_in_leaf), max_depth를 함께 조정하면서 모델 복잡도를 줄이는게 기본 튜닝 방안
▶ 트리가 가질 수 있는 최대 리프의 수를 지정 후 그에 맞는 깊이와 필요한 레코드 수를 조정하는 것.
▶ learning_rate와 n_estimators를 조정하면서 함께 진행 (저는 이 비율 조정하는게 제일 어렵다)
*** 참고로 나는 예전에 4.0.0을 설치해놔서 4.2.0으로 업데이틀 해야했다.
업데이트는 pip install 패키지명 --upgrade 이다
<▶ 위스콘신 유방암 데이터 세트를 활용해 사용법 살펴보기>
- 종양의 크기, 모양 등 다양한 속상값을 기반으로 악성/양성 분류한 데이터
- 양성 : benign / 음성 : malignant
▼ 데이터 불러오고 분할하고 학습하고 예측.

- 책에는 fit의 parameter로 early_stopping_rounds=50이 적혀있었는데
내가 사용하는 최신버전에서는 더이상 지원안함.
: 참고, https://stackoverflow.com/questions/77131656/early-stopping-rounds-in-lightgbm
▼ 예측 성능 평가 (앞에서 사용한 함수 이용)

앞서 했던 XGBoost와 비교했을 때 성능이 1%정도 차이가 났다.
이처럼 XGBoost와 LightGBM의 예측 성능은 큰 차이가 없지만
시간의 차이가 나는데, 여기서는 데이터 수가 적기 때문에 크게 느끼지 못했다.
사실 플젝에서 XGBoost, LightGBM 둘다 사용했었는데
그때의 성능을 봐도 크게 차이가 없었는데

데이터 세트가
9120 rows x 15 columns
였기 때문에 아무래도 체감 시간도 많이 차이가 났다.
그리고 lightgbm에는 피처 중요도를 시각화할 수 있는 API를 제공하기 때문에
시각화를 통해 확인해볼 수 있다.


'머신러닝 > 개념익히기' 카테고리의 다른 글
| ML XGBoost(eXtra Gradient Boost) w.위스콘신 유방암 데이터 (0) | 2023.12.21 |
|---|---|
| ML AdaBoost, GBM(Gradient Boosting Machine) (5) | 2023.12.20 |
| ML 결정 트리 과적합 Overfitting (2) | 2023.11.29 |
| ML feature의 중요한 역할 지표 (결정 트리 알고리즘) (2) | 2023.11.28 |
| ML 결정 트리 모델 시각화 Graphviz (2) | 2023.11.28 |