목차
lightGBM
1. 장점
Light GBM은 말 그대로 “Light” 가벼운 것인데요, 왜냐면 속도가 빠르기 때문입니다. Light GBM은 큰 사이즈의 데이터를 다룰 수 있고 실행시킬 때 적은 메모리를 차지합니다. Light GBM이 인기있는 또 다른 이유는 바로 결과의 정확도에 초점을 맞추기 때문입니다. LGBM은 또한 GPU 학습을 지원하기 때문에 데이터 사이언티스트가 데이터 분석 어플리케이션을 개발할 때 LGBM을 폭넓게 사용하고 있습니다.
2. 권장 데이터 수
LGBM을 작은 데이터 세트에 사용하는 것은 추천되지 않습니다. Light GBM은 overfitting (과적합)에 민감하고 작은 데이터에 대해서 과적합하기 쉽습니다. row (행) 수에 대한 제한은 없지만 제 경험상 10,000 이상의 row (행) 을 가진 데이터에 사용하는 것을 권유해드립니다.
3. 알고리즘 설명
3.1. leaf-wise
Light GBM은 Tree가 수직적으로 확장되는 반면에 다른 알고리즘은 Tree가 수평적으로 확장됩니다. 즉 Light GBM은 leaf-wise입니다.
최대 손실 값(Max data loss)을 가지는 리프 노트를 지속적으로 분할하면서 트리의 깊이가 깊어지고 비대칭적인 트리가 생성됩니다. 그런데 최대 손실값을 가지는 리프 노드를 반복할수록 결국은 균형 트리의 분할 방식보다 예측 오류 손실을 최소화 할 수 있습니다.
3.2. Gradient Boosting Machine(GBM) 부스팅
Light GBM은 Gradient Boosting 프레워크로 Tree 기반 학습 알고리즘이다. GBM은 틀린부분에 가중치를 더하면서 진행하는 알고리즘
부스팅은 여러개의 트리(혹은 다른 모델)를 만들되, 랜덤포레스트나 배깅과 같은 기법과는 다른게 기존에 있는 예측기를 조금씩 발전시켜서 이를 합한다는 개념이다.
부스팅은 보통 두가지 방향이 있는데,
- adaboost와 같이 중요한 데이터에 대해 weight를 주는 방식 (중요한 데이터를 순간적으로 weight만큼 뻥튀기시킨다고 보면 됨) 이 하나
- GBDT와 같이 딥러닝의 loss function 마냥 정답지와 오답지간의 차이를 훈련에 다시 투입하여 gradient를 적극 이용해서 모델을 개선하는 방식. XGboost나 lightGBM이 여기에 속한다.
3.3. Gradient Boosting Decision Tree (GBDT)
- decision tree를 만들때 Gradient Boosting을 활용
- 손실함수를 가장 큰 폭으로 줄일 수 있는 부분에서 leaf를 나눈다.
- 이전 단계에서 잘 학습하지 못했던 데이터를 집중적으로 학습
3.4. GOSS Gradient-based One-Sided Sampling
- AdaBoost에서 Sample Weight는 데이터 개체의 중요도를 알려주는 역할을 수행하였다. GBDT에서는 기울기(Gradient)가 이 역할을 수행한다. 각 데이터 개체의 기울기가 작으면 훈련 오차가 작다는 것을 의미하므로, 이는 학습이 잘 되었다는 뜻이다.
- 큰 Gradient(훈련이 잘 안된)를 갖는 데이터 개체들은 모두 남겨두고, 작은 Gradient를 갖는 데이터 개체들에서는 무작위 샘플링을 진행하는 것. 작은 gradient만 drop하므로 one-side sampling 이라고 부른다.
- 하지만 만약 gradient가 적다고 해서 버려버리면, 데이터 분포자체가 왜곡되기 때문에 이 상태에서 훈련하면 정확도가 낮아지게 되는데 따라서 낮은 gradient의 값들은 가져와서 버린 샘플만큼 뻥튀기한다. 1 – a / b 를 곱해서 수를 맞춰준다. (a는 탑n개의 비율, b는 샘플링n비율)
- 일단 제일 큰 gradient를 가지는 (절대값으로) 놈부터 랭크를 시킨다. 그리고 큰 gradient를 가지는 애들은 100%를 취하고, 작은 gradient 애들은 작은 비율만 선택한다. 논문에서 샘플링 비율인 a와 b를 찾는것은 추후의 과제로 남겨져 있으니, 이 숫자는 임의로 선택하기로 한다.
- 그리고 분기를 계산할때는 보통은 분산을 계산하게 되는데 아무래도 gradient가 적은 데이터는 샘플링이 되었으므로 적어진 비율만큼 다시 1 – a / b 를 반영해주어 분산을 계산한 후, 정보이득이 제일 큰 쪽으로 분기를 한다.
- 아래는 information goin (variance gain) 을 구하는 방식이다.
- 요약
- 모델로 일단 예측한다.
- 실제값과의 error로 loss를 계산한다.
- loss대로 정렬한후, 상위 N개를 뽑아 topSet에 저장. 전체데이터셋을 100으로 봤을때 30개를 뽑았다면 a는 0.3
- 나머지는 70개 중 10개만 랜덤샘플링 한다. (b는 0.1)
- 데이터는 전체데이터 대비 30%의 고 그라디언트 + 전체 데이터 대비 10%의 스몰그라디언트로 다시 샘플링 된다
- 마지막으로, 줄어든 스몰 그라디언트에 대해 weight를 (1-a/b) 적용
- 사용되는 줄어든 데이터를 대상으로 전체 데이터셋 + LOSS + WEIGHT 를 모두 고려한 데이터셋으로 약한 예측기를 만들어 전체 예측기셋에 추가한다.
4. Exclusive Feature Bundling (EFB)
4.1. 설명
- 특징
- Feature의 수를 최소한의로 줄이는 방법.
- 요약
-
- 원핫 인코딩을 한 경우, 0이 많은 경우가 있다. 이런경우 통합이 가능
- correaltion이 높은 경우 합치면 계산량이 줄어드는 데에 도움이 됨
-
5.사용 예제
from lightgbm import LGBMClassifier
lgbm = LGBMClassifier(n_estimators=200)
lgbm = LGBMClassifier(n_estimators=1000, num_leaves=50, subsample=0.8,
min_child_samples=60, max_depth=20)
evals = [(X_test, Y_test)]
lgbm.fit(X_train, Y_train, early_stopping_rounds=100, eval_metric='auc',
eval_set=evals, verbose=True)
score = roc_auc_score(Y_test, grid.predict_proba(X_test)[:, 1], average='macro')
print("ROC AUC: {0:.4f}".format(score))
'Machine Learning' 카테고리의 다른 글
데이터 스케일링 (Data Scaling) (0) | 2023.06.07 |
---|---|
[Logistic Regression] 설명과 실습 (1) | 2021.05.12 |