XGBoost
- 가장 먼저 개발된 부스팅 알고리즘
- 손실 함수뿐만 아니라 모형 복잡도까지 고려함
- 캐글 컴피티션 우승자가 많이 사용하는 성능이 검증된 부스팅 모델
- 종속변수가 연속형 데이터인 경우든 범주형 데이터인 경우든 모두 사용 가능
- 이미지나 자연어가 아닌 표로 정리된 데이터의 경우, 거의 모든 상황에 활용할 수 있음
장점 | 단점 |
예측 속도가 상당히 빠르며, 예측력 또한 좋음 | 복잡한 모델인 만큼, 해석이 어려움 |
변수 종류가 많고 데이터가 클수록 상대적으로 뛰어난 성능을 보여줌 | 더 나은 성능을 위한 하이퍼파라미터 튜닝이 까다로움 |
부스팅: 순차적으로 트리를 만들어 이전 트리로부터 더 나은 트리를 만들어내는 알고리즘
- 트리 모델을 기반으로 한 최신 알고리즘 중 하나
- XGBoost, LightGBM, CatBoost 등
코드
import xgboost as xgb
model = xgb.XGBClassifier(n_estimators=500, max_depth=5, random_state=100)
model.fit(X_train, y_train)
pred = model.predict(X_test)
model.feature_importances_ # 변수 중요도 확인
하이퍼파라미터
- learning_rate: 경사하강법에서 매개변수를 얼마큼씩 이동해 가면서 최소 오차를 찾을지 그 보폭을 결정
- max_depth: 각 트리의 깊이
- subsample: 모델을 학습시킬 때 사용할 데이터의 비율(0.5이면 데이터의 절반 사용)
- n_estimators: 전체 나무의 개수
모델 이해
트리 모델의 진화 과정
- 결정 트리: 가장 기본적인 트리 모델
- 배깅: 부트스트랩 훈련 셋을 사용하는 트리 모델
- 랜덤 포레스트: 데이터와 변수의 일부를 사용하여 여러 트리를 만드는 모델
- 부스팅: 이전 트리의 학습 내용을 다음 틜에 반영하려 여러 트리를 만드는 방법
- 경사 부스팅: 부스팅에 경사 하강법을 적용한 모델
- XG 부스팅: 경사 부스팅에서 계산속도와 알고리즘 효율을 개선한 모델
1. 배깅
부트스트랩(bootstrap) 훈련 셋을 사용하는 트리 모델
- 부트스트랩: 데이터의 일부분을 무작위로 반복 추출하는 방법
2. 부스팅과 에이다부스트
부스팅(Boosting): 랜덤 포레스트에서 한 단계 더 발전한 방법으로 역시 여러 트리를 만드는 모델
- 랜덤 포레스트에서 각 트리는 독립적이나, 부스팅에서는 그렇지 않음
- 부스팅은 각 트리를 순차적으로 만들면서 이전 트리의 정보를 이용함
- 부분집합을 이용해 첫 트리를 만들고 난 후, 해당 트리의 예측 결과를 반영하여 두 번재 트리를 만들어서 첫 번재 트리와의 시너지 효과를 키움
- 트리를 계속하여 만들 때마다 이런 식으로 이전 트리의 정보를 이용한다는 점이 랜덤포레스트와 다음
에이다부스트(AdaBoost): 단계적으로 트리를 만들 때 이전 단계에서의 분류 결과에 따라 각 데이터에 가중치를 부여/수정함
- 이전 트리에서 가중치가 덜 부여되고 잘못 분류된 데이터들에 더 높은 가중치를 부여하고
- 후속 트리에서는 가중치가 높은 데이터를 분류하는데 우선순위를 둠
- 이런 방식으로 트리 여러 개를 만들면 분류가 복잡한 데이터셋도 세부적으로 나눌 수 있는 모델이 만들어짐
3. 경사 부스팅과 XGBoost
경사 부스팅(Gradient boosting): 경사하강법을 이용하여, 이전 모델의 에러를 기반으로 다음 트리를 만들어감
- XGBoost, LightGBM, Catboost
XGBoost(Extreme Gradient Boosting): 계산 성능 최적화와 알고리즘 개선을 함께 이룸
- 순차적으로 트리를 만들지만, 병렬화, 분산 컴퓨팅, 캐시 최적화 등을 활용해 계산 속도가 이전 부스팅 모델보다 훨씬 빠름
- 2차 도함수를 활용해 더 적절한 이동 방향과 이동 크기를 찾아내어 더 빠른 시간에 전역 최솟값에 도달함
- 정규화 하이퍼 파라미터 Lasso, Ridge 지원
참고: 데싸노트의 실전에서 통하는 머신러닝
반응형