Basic Concept
앙상블
: 여러 모델들의 집합을 통해 예측 결과를 만들어 내는 것
부스팅
: 모델들을 앙상블 형태로 만드는 일반적인 기법
: 연속된 라운드마다 잔차가 큰 레코드들에 가중치를 높여 일련의 모델들을 생성
배깅
: 샘플을 여러 번 뽑아(Bootstrap) 각 모델을 학습시켜 결과물을 집계(Aggregration)
부스팅은 이전 모델이 갖는 오차를 줄이는 방향으로다음 모델을 연속적으로 생성한다.
배깅은 상대적으로 튜닝이 거의 필요없지만, 부스팅은 적용하고자 하는 문제에 따라 주의 필요
XGBoost
GBM은 residaul을 줄이는 방향으로 weak learner를 결합해 강력한 성능을 자랑하지만, 해당 train data에 residual을 계속 줄여 overfitting 되기 쉽다는 문제점이 있다.
이를 해결하기 위해 XGBoost는 GBM에 regularization term을 추가한 알고리즘이다.
또한 다양한 loss function을 지원해 task에 따른 유연한 튜닝이 가능하다는 장점이 있다.
XGBoost = GBM + Regularization + 다양한 Loss function 지원
수식으로 보면 아래와 같이 정의할 수 있다. 빨간색 부분이 regularization term이다.
regularization term은 다음과 같이 정의된다.
- T : 우리가 weak learner로 쓰는 tree의 최종 node의 개수
- w : 최종 node의 score인데 loss function에 의해 학습되는 값이다.
따라서, XGboost의 regularization term은 tree 복잡도가 증가할수록 loss에 페널티를 주는 방식으로 overfitting을 막고 있음을 알 수 있다.
위에서 언급한 바와 같이, XGBoost는 다양한 loss function을 제공한다. 공식문서에서 사용 가능한 loss function에 대해 확인 가능하다.
오버피팅
ex) 부스팅 모델 학습 후 학습 데이터에 대한 오차율이 13%
테스트 데이터에 대한 오차율이 35%
- 오버피팅의 결과
- 해당 부스팅 모델이 테스트 데이터에는 잘 맞지 않음을 의미한다.
정규화로 오버피팅을 방지할 수 있다.
- 정규화하기 위한 두 파라미터 alpha, lamda 사용
- 해당 파라미터 값을 크게 하면, 모델이 복잡해질수록 더 많은 패널티를 주어 결과적으로 얻는 트리의 크기가 작아진다.
예를 들어, 기본 모형에서 lamda=1,000의 값을 패널티로 추가 후 비교하면 다음과 같다.
기본 모형은 정확도가 학습데이터에서는 꾸준히 좋아지지만, 테스트 데이터에선 나빠진다.
패널티를 추가한 모형은 그렇지 않다.
기존의 xgboost와 정규화를 적용한 xgboost의 오차율
결정이 쉽지 않은 하이퍼파라미터를 다루는 법
- K 폴드 교차검증
- K개의 서로 다른 폴드로 랜덤하게 나눈 후, 각 폴드마다 해당 폴드에 속한 데이터를 제외한 나머지 데이터를 가지고 모델을 학습
- 이는 표본 밖 데이터에 대한 모델의 성능을 보여준다.
- 설정한 하이퍼 파라미터 조합마다 폴드에 대한 오차의 평균을 계산해서, 전체적으로 가장 낮은 평균오차를 갖는 최적의 하이퍼파라미터 조합을 찾는다.