[ML] XGBoost - Regression
https://www.youtube.com/watch?v=OtD8wVaFm6E&t=404s
XGBoost는 Extreme Gradient Boosting의 약자이다.
기존 GBㅇ에 추가로 Regularization 텀을 사용하여 과적합을 방지한다.
XGBoost 이름에 드러나 있듯 boosting 모델중 하나이다
XGB의 첫 예측값은 모델이 회귀든 분류모형이든 0.5를 사용한다.그리고 GB와는 달리 다른 방법으로 트리를 생성한다.
similarity score (앞으로 sim) 를 이용하는 방법이다.
similarity score 은 간단하게 말하면 최종 노드들이 얼마나 유사성을 띄는지로 해석할 수 있겠다.
유사성이 작다면 분류를 잘하지 못한것이고 유사성이 크면 분류를 잘한 것이라고 생각할 수 있다.
먼저 첫 예측값 0.5에 대해 잔차를 계산하여 sim값을 구한다. 이 때 먼저 트리를 생성하는 규칙에 대한 이해를 위해
람다는 0이라고 가정하고 설명을 이어나가겠다.
각 노드들의 sim을 구하면 해당 분기점의 gain을 얻을 수 있다. 이제
15가 아닌 다른 경계값에서 계산을하면
dosage < 22.5 -> gain = 4
dosage < 30 -> gain = 56.33
이다 이때 gain이 가장높은 dosage < 15를 첫분기점으로 한다.
Regression tree를 만들 때 한 연속형 feature의 threshold를 설정하기 위해 모든 경계값의 rmse를 계산했던 것과 같다.
하위노드에도 반복하면
위와 같은 트리를 얻을 수 있다.
이제 과적합을 방지하기위해서는 가지치기를 해야한다.
가지치기를 위해서는 gain의 경계값을 설정해야한다. gain 이 특정값(앞으로 gamma)보다 작다면 즉
gain - gamma < 0 일 경우 해당 분기점은 없어진다.
위의 경우 gamma가 130 일시에는 트리가 그대로 유지되지만
gamma가 150 일시에는 모든 분기점이 삭제가되고 최초의 예측값만 남게된다.
이제 미루어두었던 Regularization term 람다에 대해서 설명을 이어나가보자
lamda를 1이라고 가정하고 위의 계산을 이어나가면
위와 같은 sim값을 얻게된다 sim값이 많이 떨어진 것을 확인할 수 있다..
즉 sim이 낮아지기에 가지치기를 하게될 확률이 아주 높아진다고할 수 있다.
다시 말하면 과적합이 방지가된다.
만약 gamma가 0이라도 gain값이 음수라면 당연히 가지치기를 진행한다.
이제 트리를 만들었으니 output value를 계산한다.
output value에도 아까 마주했던 lambda가 있는 것을 확인할 수 있다.
람다가 0이라면 평균갑이 출력될것이고 그것이 아니라면
더 작은값이(더 조심스러운) 값이 출력될 것이다.\
그 이후과정은 다른 GB모델과 같이
learnig rate를 반영하여 값을 업데이트한다.
정리하면
1. 초기예측값으 0.5로 시작하고 오차를 계산한다
2. similarity score(lambda가 추가되어 좀더 규제된)를 계산하여 각 분기점의 gain을 계산하여 gain값이 높은 분기점을 선택하여 트리를만든다.
3. gamma값보다 gain이 크지않다면 가지치기를 진행한다.
4. 가지치기가 완료된 트리의 예측값을 계산한 후(lambda 반영) learning rate를 반영하여 예측값을 업데이트한다.
5. 예측값을 바탕으로 다시 1~4의 과정을 중단규칙이 만족될때까지 반복한다.