꺼내먹는지식 준

머신러닝 정리 4.5(5) - XGBoost 본문

카테고리 없음

머신러닝 정리 4.5(5) - XGBoost

알 수 없는 사용자 2023. 3. 1. 14:00

XGBoost

* 영상 출처: https://www.youtube.com/watch?v=OtD8wVaFm6E

 

XGBoost 는 EXTREME Gradient Boost의 약자이다.

즉, Gradient Boost와 굉장히 유사하다.

 

관련 내용이 상당히 많으나, Regression 관련 어떻게 동작하는지만 간단하게 살펴보자. 

 

(02:44)

초기값은 아주 간단하게 0.5로 보통 설정한다.

초기값을 average로 설정했던 Gradient Boost와 다르다.

(03:40)

또다른 다른 점으로, Gradient Boost는 MSE Regression Tree를 사용하여 RSS(예측과 실제의 오차의 제곱합) 기반으로 분기점을 선택한 반면 XGBoost는 Similarity Score 이라는 것을 사용한다.

Similarity Score

(04:19)

Similiarity Score은 square of sum of residuals 이 아니라 sum of residual의 sqaure 값이다. 그리고 lambda 는 regularization term이다.

일단 initial guess 가 0.5 이므로, -10.5, ..., -7.5 총 4개의 similiarity score은 4이다.

(05:29)

(04:47)

유의할점은 만약 데이터가 대칭의 위치에 있다면 서로 값을 cancel out 한다.

즉, similarity score은 높을 수록 cancel out 되는 일이 없다는 것을 뜻한다.

데이터를 분류하기 위한 트리는 regression 트리와 유사하나 다르다.

(06:26)

데이터 샘플 2개의 평균값을 나누는 기준으로 설정한 후, 여러 기준 중 가장 적절한 것을 선택하는 것은 동일하나, RSS 로 선택하는 것이 아니라 Similarity Score을 이용한다.

(07:42)

먼저 각 값에 대한 similarity score을 구한 후 (regularization term lambda는 0으로 한 상태이다.)

(08:51)

Left Similiarity + Right Similarity - Root Similarity를 수행하여 Gain 값을 구한다.

(09:36)

(10:24)

다른 값을 root node 로 할 때의 Gain 도 구해보았다. 각각 4, 56.33를 얻었다.

비교 결과 <15 일 때 Gain 값이 가장 높아 tree로 사용하기 좋다.

(11:56)

이 후, Dosage < 22.5 로 구분한다.

이 때 Dosage < 22.5 의 Gain 은 28.17이다.

(12:21)

(12:26)

Dosage> 30 으로 하면 Gain이 140.17이다.

이에 따라 Dosage<30 을 tree로 선정한다.

Gradient Boost와 달리 XGBoost 는 tree 자체를 Prune 하는 기능이 있다. 이를 통해 성능 나쁜 Tree는 버려버리는 것이다. 굉장히 타당한 생각이다.

여기서 gamma 라는 term이 등장한다. 지정한 gamma 값으로 Gain - gamma 를 하여 값이 negative가 되면 해당 tree를 prune 한다. (실제로는 XGBoost가 module 내에서 자동으로 값을 iterate하며 cross validation 을 수행하고, 그 중 가장 좋은 값으로 선택한다.)

(14:10)

여기서 유의할 점은 만약 자식 노드의 Gain - Gamma 가 양수라면 부모노드 - Gamma 가 음수여도 Tree를 prune하지 않는다.

(15:29)

아까 잠시 나왔던 lambda 값이 0이 아닌 값이 주어진다면 어떻게 될까?

(15:44)

(15:55)

(16:05)

leaf에 있는 Sample 개수에 따라 값이 조정 정도가 다르다. 작을 수록 조정 되는 정도가 크다.

(16:50)

당연히 이로인한 Gain 값도 크게 작아진다.

정리하자면 regularization term을 통해 Gain 값을 조정하고 결국 트리가 prune 되도록 할 수 있다. 이 또한 사용자가 manual 하게 주거나, cross validation 과정을 통해 자동으로 XGBoost가 선택할 수 있다.

(19:43)

Output Value 를 구하는 방법은 Similarity 와 거의 유사하나, square을 하지 않는다.

(22:03)

이 후, Output * learning Rate + initial Guess 로 guess을 업데이트 한다.

(22:53)

이 후, 반복해서 트리를 만든다.

(23:40)

끝.

Comments