부스팅의 기본적인 컨셉은 분류기를 연달아 직렬적으로 연결해서 기존 층서 잘못 분류한 샘플에 대해서 가중치를 높게 두고 훈련을 하는 형태 → 사람이 실제로 학습할 때 오답노트를 활용하는 것과 비슷한 컨셉 → 편향을 줄여나가는 과정
배깅은 병렬적으로 훈련을 진행하는 것으로 데이터를 여러 셋으로 나누어서 분류기간 상호독립적이고 각 분류기가 판단을 한 후 투표방식으로 최종 집단 의사결정 → 분할정복 형태이기 때문에 분산을 줄여나가는 과정으로 이해할 수 있음
GBDT(Gradient Boosting Decision Tree)
전체 알고리즘을 보면 대략 다음과 같다. 1.baseline model 설정 2.M번 반복하면서 Negative Gadient로 손실함수 계산 후 추가적으로 해당값을 최소로 하는 모델을 만들고 3.이 것을 기존 모델에 연이어 붙이도록 한다. 이 때 Learning Rate를 설정해서 Detail하게 데이터를 훑고 갈 수 있도록 한다.
Negative Gradient 때문에 경사하강법을 떠올리기 쉬운데 경사하강법은 경사를 하강할 때 파라미터를 업데이트하고, GBDT는 새로운 모델을 사용한다.
장점 - 트리를 기반으로 하기 때문에 전처리 작업을 할 필요가 없다. - 분포가 밀집되어 있는 데이터에서 일반화 능력과 표현 능력이 모두 뛰어나다.
단점 - 희소 데이터에서 표현 능력이 다소 아쉽다. - 텍스트에서 퍼포먼스가 떨어질 수 있다. - 직렬적으로 훈련하기 때문에 훈련속도를 높이기 어렵다.
XGBoost
GBDT는 CART를 기초 분류기로 사용하지만, XGBoost는 다양한 기초 분류기를 지원한다. 단 CART 사용시 XGBoost는 정규화 항을 더해서 모델의 복잡도를 조절하고 과적합을 방지하려고 한다.
GBDT는 결측치를 처리하는 전략이 별도로 없으나. XGBoost는 스스로 결측치 처리 전략을 학습한다.
GBDT는 매번 반복할 때마다 모든 데이터를 사용하지만 XGBoost는 데이터 샘플리을 지원한다.
GBDT는 손실함수의 일차 미분 정보만을 사용하지만 XGBoost는 1차,2차 미분 정보를 모두 사용한다.
잡설…
RandomForest과 함께 GBDT까지가 머신러닝으로서 조금만 시간을 준다면 그대로 현업들에게 설명하기 가장 쉬운 알고리즘이었다. 어느정도의 시간은 기다려주면 설명은 해드렸던 것 같다.
LGBM 대비 생각보다 설치가 워낙 잘되다보니 선호하는 편이나 속도가 너무느려서 GBDT의 특성을 고스란히 보여주는 편이다.
그럼에도 캐글에서 딥러닝으로 접근하기 전에 한번쯤은 확인삼아 사용하던 모델이었으나, 뭐랄까 어느새부턴가 정형에서도 딥러닝이 확실히 성능이 우위를 보이면서 이제는 정말 보기 쉽지 않아졌다.
적다보니 데이터분석가 입장에서 생각보다 대회를 제외하고는 오래 걸린다는 이슈로 많이 사용하지는 않은 것 같다.
You might also like...
03
2월
DataFrame은 Pandera로, 모델은 Pydantic으로 데이터를 검증한다.
2 min read
02
2월
Docker 모니터링하면서 죽으면 재시작시키는 스크립트
1 min read
06
1월
Tobit Regression은 Censored Data에 적합한 Regression이다.
5 min read
16
12월
Monotonic Constraint는 Prediction에 영향을 주지 않는 제약조건이다.
Member discussion