본문 바로가기
머신러닝/개념익히기

ML LightGBM w.위스콘신 유방암 데이터

by ADELA_J 2024. 1. 2.

<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를 제공하기 때문에

시각화를 통해 확인해볼 수 있다.