본문 바로가기
통계/머신러닝

21. XGBoost에 대해서 알아보자

by 부자 꽁냥이 2022. 6. 26.

이번 포스팅에서는 부스팅 계열에 떠오르는 샛별 XGBoost에 대해서 알아보려고 한다. 여기에서는 XGBoost의 개념, 알고리즘 동작 원리를 예제와 함께 알아보고자 한다.

 

- 목차 -

1. XGBoost란 무엇인가?

2. XGBoost 알고리즘

3. 장단점 및 고려 사항

 

XGBoost는 Gradient Boosting 알고리즘을 알아야 이해하기 쉽다. 아래 포스팅에 Gradient Boosting에 대한 설명을 해놓았으니 먼저 읽고 오기 바란다.

 

20. Gradient Boosting 알고리즘에 대해서 알아보자 with Python

 

20. Gradient Boosting 알고리즘에 대해서 알아보자 with Python

이번 포스팅에서는 Gradient Boosting의 개념과 알고리즘을 소개하며 이를 응용한 Gradient Tree Boosting의 개념과 알고리즘도 소개한다. 그리고 Gradient Tree Boosting 알고리즘을 파이썬으로 직접 구현하는

zephyrus1111.tistory.com


   1. XGBoost란 무엇인가?

XGBoost는 Extreme Gradient Boost의 준말이며 그 정의는 다음과 같다.

 

XGBoost는 기존 Gradient Tree Boosting 알고리즘에 과적합 방지를 위한 기법이 추가된 지도 학습 알고리즘이다.

 

정의를 자세히 살펴보자.

a. XGBoost는 Gradient Tree Boosting이다.

XGBoost는 기본 학습기(Base Learner)를 의사결정나무로 하며 Gradient Boosting과 같이 Gradient(잔차)를 이용하여 이전 모형의 약점을 보완하는 방식으로 학습한다. 

b. XGBoost는 과적합 방지를 위한 기법이 추가된 알고리즘이다.

XGBoost는 Gradient Tree Boosting에 과적합 방지를 위한 파라미터($\lambda, \gamma$)가 추가된 알고리즘이다. 아래에서 이 파라미터들의 작동 방식을 예제를 통해 알아본다.


   2. XGBoost 알고리즘

1) 알고리즘

먼저 데이터 $(x_i, y_i), i=1, \ldots, n$이 있다. 이때 $x_i$는 $p$차원 입력 변수 벡터, $y_i$는 실수 또는 범주를 나타내는 정수일 수도 있다. 그리고 2차 미분 가능한 손실 함수 $L$이 있다고 하자. 개별 모형의 최대 개수를 $M$, 학습률 $l$ 그리고 파라미터 $\gamma, \lambda$를 설정한다.

 

XGBoost 알고리즘은 다음과 같다.


XGBoost Algorithm

1. 초기 모형은 상수로 설정하며 다음과 같이 찾는다.

$$\DeclareMathOperator*{\argminA}{arg\,min} F_0(x) = \argminA_{c}\sum_{i=1}^nL(y_i, c)$$

 

2. $m=1, \ldots, M$에 대하여 다음을 반복한다.

(a) Gradient $g_i$과 Hessian $h_i$을 계산한다.

$$g_i = \left [ \frac{\partial L(y_i, F(x_i))}{\partial F(x_i)} \right ]_{F(x) = F_{m-1}(x)} \\ h_i = \left [ \frac{\partial^2 L(y_i, F(x_i))}{\partial F(x_i)^2}  \right ]_{F(x) = F_{m-1}(x)}$$

(b) 회귀 나무 $\phi_m$을 다음과 같이 적합한다.

$$\DeclareMathOperator*{\argminA}{arg\,min} \phi_m = \argminA_{\phi}\sum_{i=1}^n \frac{1}{2} h_i \left [ -\frac{g_i}{h_i} - \phi(x_i) \right ]^2 +\gamma T + \frac{1}{2} \lambda \| \phi \|^2 $$

여기서 $T$는 $\phi$의 끝마디 개수, $\| \phi \|^2 = \sum_{j=1}^Tw_j^2$이며 $w_j$는 $j$번째 끝마디에서의 출력값이다.

(c) 다음과 같이 업데이트한다.

$$F_m(x) = F_{m-1}(x)+l\cdot \phi_m(x)$$

 

3. 최종 모형은 다음과 같다.

$$F_M(x) = \sum_{m=0}^MF_m(x)$$



2) 알고리즘 고찰

이번 섹션에서는 XGBoost 알고리즘에 대해서 깊게 파헤쳐보자.


주의!! 수식만 보면 토가 나오는 사람들은 넘어가도 좋다.


a. 초기값?

 

StatQuest에서는 초기값(초기 예측)은 아무거나 잡아도 된다고 한다. XGBoost 알고리즘에 의해 이전 모형의 약점이 금방 보완되어 초기값을 아무렇게나 잡아도 되나 보다. 이에 0.5를 초기값으로 설정한다고 한다. 하지만 이러한 내용을 뒷받침할만한 자료를 찾지는 못했다.

 

초기값을 아무렇게나 잡아도 된다고는 하지만 최적화 관점에서 일관성을 주기 위해 아래와 같이 잡는 것이 바람직해 보인다.

$$\DeclareMathOperator*{\argminA}{arg\,min} F_0(x) = \argminA_{c}\sum_{i=1}^nL(y_i, c)$$

 

b. 왜 Gradient와 Hessian이 필요한가?

이 부분이 XGBoost 알고리즘의 특징이다. 이는 손실 함수를 2차 근사 시키기 때문에 Gradient와 Hessian이 필요한 것이다. 자세히 살펴보자. 먼저 $m$번째 스텝에서 XGBoost는 다음의 손실 함수를 최소화하는 회귀 나무 $\phi$을 찾게 된다.

$$l = \sum_{i=1}^nL(y_i, F_{m-1}(x_i)+\phi(x_i))+\gamma T+\frac{1}{2}\lambda \|\phi\|^2$$

하지만 이를 직접 최소화하는 것이 어려워 앞부분을 2차 근사하게 된다.

$$l \approx \sum_{i=1}^n\left [ L(y_i, F_{m-1}(x_i))+g_i\phi(x_i)+\frac{1}{2}h_i\phi(x_i)^2 \right ]+\gamma T+\frac{1}{2}\lambda \|\phi\|^2 = \tilde{l} \tag{1}$$

여기서 $g_i, h_i$는 앞에서 정의한 것과 동일하다. 우리는 $l$을 최소화하는 것이 아닌 $\tilde{l}$을 최소화하게 되는 것이다. 이제 Gradient와 Hessian이 필요한 이유를 알았을 것이다.

 

c. 근데 식 (1)과 알고리즘 (b) 단계에서의 식 모양이 다른데요?

아니다.

모양은 다르지만 해결하고자 하는 문제는 똑같다.

 

왜 그런지 살펴보자. 먼저 식 (1)의 첫 번째 항에서 $\phi$와 관계없는 부분을 빼고 $\tilde{l}$을 다시 정리해보자.

$$\begin{align} \sum_{i=1}^n\left[ g_i \phi(x_i) +\frac{1}{2}h_i\phi(x_i)^2 \right] &= \sum_{i=1}^n\frac{1}{2}h_i\left [ -\frac{g_i}{h_i} -\phi(x_i) \right ]^2 + \text{const.} \end{align} \tag{2}$$

 

식 (2)를 이용하면 $\tilde{l}$을 최소화하는 것은 결국 다음을 최소화하는 것과 같아진다.

$$\sum_{i=1}^n\frac{1}{2}h_i\left [ -\frac{g_i}{h_i} -\phi(x_i) \right ]^2+\gamma T+\frac{1}{2}\lambda \|\phi\|^2 \tag{3}$$

 

d. 회귀 나무는 $\phi$는 어떻게 적합할까?

이를 설명하기 위해 우리가 최소화할 함수를 다시 적어보자. 이때에는 식 (2)의 왼쪽식을 이용하면 우리가 최소화해야 할 목적함수는 다음과 같다(어떤 분은 목적함수를 너무 왔다 갔다 하는 거 아니냐고 할 수 있으나 식 (3)은 벌점항이 포함된 가중 최소 제곱법과 비슷한 형태라 알고리즘을 소개할 때에는 식 (3)이 더 적절하지만 회귀 나무를 적합하는 과정은 식 (2)의 왼쪽을 이용하는 것이 더 쉽다. 아 물론 내 개인적인 생각이다). 

$$\begin{align} \tilde{l} &= \sum_{i=1}^n\left[ g_i \phi(x_i) +\frac{1}{2}h_i\phi(x_i)^2 \right] +\gamma T +\frac{1}{2}\lambda\sum_{j=1}^T w_j^2 \\ &= \sum_{j=1}^T\left [ \left ( \sum_{x_i\in R_j}g_i \right )w_j + \frac{1}{2} \left ( \sum_{x_i\in R_j}h_i + \lambda \right )w_j^2 + \gamma \right ] \tag{4}  \end{align} $$

여기서 $R_j$는 $j$번째 끝마디에 포함된 입력 변수 벡터들의 집합이다. 그리고 $w_j$라는 것은 입력 변수가 $R_j$에 포함될 경우 $\phi$의 출력값임을 상기하자. 그렇다면 우리가 찾고자 하는 $\phi$는 모든 끝마디 $j=1, \ldots, T$에 대하여 $w_j$를 (4)가 최소화되도록 선택해주면 된다는 것이다. 

 

이때 $j$번째 끝마디에 대한 최적 예측값 $w_j^*$는 다음과 같다.

$$w_j^* = -\frac{\sum_{x_i \in R_j}g_i}{\sum_{x_i \in R_j}h_i + \lambda}\tag{5}$$

이제 (5)를 식 (4)에 대입하면 다음과 같다.

$$ \sum_{j=1}^T \left [ -\frac{1}{2}\cdot \frac{\left ( \sum_{x_i\in R_j }g_i \right )^2 }{\sum_{x_i \in R_j}h_i+\lambda } +\gamma\right ] \tag{6}$$

 

식 (6)에서 알 수 있는 것은 Summation 안쪽에 있는

$$-\frac{1}{2}\cdot \frac{\left ( \sum_{x_i\in R_j }g_i \right )^2 }{\sum_{x_i \in R_j}h_i+\lambda } +\gamma \tag{7}$$

을 최대한 작게 만드는 나무를 찾아야 한다는 것이다.

 

여기서 중요한 점은 모든 회귀 나무를 고려할 수 없다는 것이다. 왜냐하면 모든 변수와 각 변수의 모든 분리 기준 그리고 깊이까지 고려한다면 경우의 수가 너무 많아지기 때문이다. 따라서 순차적으로 회귀 나무를 성장시키는 방법을 고려한다. 먼저 하나의 부모 마디(Root Node)에서 시작해서 가지를 뻗어나간다. 가지를 뻗는다는 것은 마디를 분리한다는 것이며 이것을 회귀 나무를 적합한다고 하는 것이다.

 

그렇다면 분리는 어떻게 할까?

방금 앞에서 이야기했다 (7)을 최대한 작게 만드는 변수와 그에 대응하는 분리 기준을 찾으면 된다.

 

현재 마디 영역을 $R_P$ 이를 분리했을 때 왼쪽, 오른쪽 자식 마디 영역을 각각 $R_L, R_R$이라 했을 때 (7)의 감소분은 다음과 같다.

$$\frac{1}{2} \left [ \frac{\left ( \sum_{x_i\in R_L }g_i \right )^2 }{\sum_{x_i \in R_L}h_i+\lambda } +\frac{\left ( \sum_{x_i\in R_R }g_i \right )^2 }{\sum_{x_i \in R_R}h_i+\lambda } - \frac{\left ( \sum_{x_i\in R_P}g_i \right )^2 }{\sum_{x_i \in R_P}h_i+\lambda } \right ] -\gamma \tag{8}$$

 

따라서 (8)을 최대화하는 다시 말해 손실 감소분을 최대로 하는 변수와 그에 대응하는 분리 기준을 바탕으로 마디를 분리한다.

 

e. 업데이트!!

$m$번째 스텝에서 회귀 나무 $\phi_m$을 찾았다면 다음과 같이 축소 모수 $l$을 곱하여 기존 모형에 더해주는 것이다.

$$F_m(x) = F_{m-1}(x)+l\cdot \phi_m(x)$$


3) 예제

여기서는 샘플 데이터를 이용하여 알고리즘의 동작 원리를 회귀 문제와 분류 문제를 나누어 알아보고자 한다.

a. 회귀 문제

연간 독서량, 하루 컴퓨터 사용시간 이 2개의 설명 변수로 수학 점수를 예측하는 문제가 있다고 해보자. 데이터는 아래와 같다.

 

회귀 문제에서 손실함수는 제곱손실함수를 사용한다.

$$L(y, F(x)) = \frac{1}{2}(y-F(x))^2$$

 

이제 XGBoost 알고리즘을 돌려보자.

 

1. 초기 모형은 상수로 설정하며 다음과 같이 찾는다.

$$\DeclareMathOperator*{\argminA}{arg\,min} F_0(x) = \argminA_{c}\sum_{i=1}^nL(y_i, c)$$

 

제곱손실함수인 경우 위 $F_0(x)$는 결국 $y_i, i=1, \ldots, 5$의 평균이 된다.

$$F_0(x) = \frac{1}{5}\sum_{i=1}^5y_i=78.8$$

2. $m=1, \ldots, M$에 대하여 다음을 반복한다.

(a) Gradient $g_i$과 Hessian $h_i$을 계산한다.

$$g_i = \left [ \frac{\partial L(y_i, F(x_i))}{\partial F(x_i)} \right ]_{F(x) = F_{m-1}(x)} \\ h_i = \left [ \frac{\partial^2 L(y_i, F(x_i))}{\partial F(x_i)^2}  \right ]_{F(x) = F_{m-1}(x)}$$

 

제곱손실함수의 Gradient $g_i$와 Hessian $h_i$는 다음과 같다. 편의상 $m=1$이라 하자.

$$g_i = -(y_i-F_{m-1}(x_i)) = -(y_i-F_0(x_i)), \;\; h_i = 1 $$

$g_i$는 결국 음의 잔차가 된다.

 

 

(b) 회귀 나무 $\phi_m$을 다음과 같이 적합한다.

$$\DeclareMathOperator*{\argminA}{arg\,min} \phi_m = \argminA_{\phi}\sum_{i=1}^n \frac{1}{2} h_i \left [ -\frac{g_i}{h_i} - \phi(x_i) \right ]^2 +\gamma T + \frac{1}{2} \lambda \| \phi \|^2 $$

 

편의상 $\gamma = 0$, $\lambda = 1$이라고 하자.

 

위 식을 최소화하는 것은 식 (4)를 최소화하는 것과 같다고 했다. 그리고 모든 회귀 나무를 고려할 수 없기 때문에 뿌리 마디에서 가지를 분리해나가면서 회귀 나무를 성장시킨다고 했다. 뿌리 마디에는 모든 데이터를 포함하고 있다.

 

먼저 뿌리 마디에 대하여 다음을 계산해야 한다.

$$\frac{\left ( \sum_{x_i\in R}g_i \right )^2 }{\sum_{x_i \in R}h_i+\lambda }$$

이를 Similarity Score라 부르기도 한다. $R$은 뿌리 마디의 데이터 집합이다.

 

이 뿌리 마디를 이제 성장시켜보자. 가지를 분리한다는 것이다. 예를 들어 아래와 같이 연 독서량 변수를 선택하고 분리 기준을 16이라고 해보자. 이때 왼쪽 마디와 오른쪽 마디의 Similarity Score를 계산한다.

 

 

이제 Similarity Score의 증가량(또는 손실 감소분)을 계산하면 다음과 같다.

 

$$\begin{align} & \frac{1}{2} \left [ \frac{\left ( \sum_{x_i\in R_L }g_i \right )^2 }{\sum_{x_i \in R_L}h_i+\lambda } +\frac{\left ( \sum_{x_i\in R_R }g_i \right )^2 }{\sum_{x_i \in R_R}h_i+\lambda } - \frac{\left ( \sum_{x_i\in R}g_i \right )^2 }{\sum_{x_i \in R}h_i+\lambda } \right ]-\gamma \\ &= \frac{1}{2}\left [ 114.49+174.05-0 \right ] - 0 \\ &= 144.27 \end{align}$$

 

위 결과에서 알 수 있는 것은 변수와 그에 대응하는 분리 기준이 정해지면 Similarity Score의 증가량을 계산할 수 있다. 따라서 이를 최대화하는 변수와 그에 대응하는 분리 기준으로 부모 마디(여기서는 뿌리 마디)를 분리하게 된다. 

 

이렇게 만들어진 회귀 나무에 대하여 끝 마디의 예측값은 (5)와 같이 주어진다. 예를 들어 앞에서 적합한 최종 회귀 나무가 다음과 같은 경우 끝마디의 예측값은 그림과 같이 계산된다.

(c) 다음과 같이 업데이트한다.

$$F_m(x) = F_{m-1}(x)+l\cdot \phi_m(x)$$

앞 단계에서 만들어진 회귀 나무를 $\phi_1$이라 하자. $l=0.1$이라 하자. 그렇다면 다음과 같이 업데이트된다.

$$F_1(x) = F_0(x)+0.1\cdot \phi_1(x)$$

 

이제 (a)~(c)를 주어진 반복수 $M$만큼 하면 된다.

 

여기서 잠깐!!

$\gamma$와 $\lambda$의 역할에 대해서 알아보자. 우리가 위에서 알 수 있는 것은 식 (8)의 값이 0보다 클 때 , 즉 자식 마디(왼쪽 마디, 오른쪽 마디)의 Similarity Score 합이 부모 마디의 Similarity Score보다 클 때에만 분리가 일어날 수 있다는 것이다.

 

예제에서는 $\lambda=1$로 설정했으나 이를 더 큰 값으로 한다면 Similarity Score는 작아진다. 따라서 자식 마디의 Similarity Score 합이 부모 마디의 그것보다 오히려 더 작아질 수 있어 이때에는 분리가 일어나지 않을 수 있는 것이다. 따라서 $\lambda$는 필요 이상의 가지를 치지 않도록 막아주는 역할을 한다고 할 수 있으며 이는 곧 과적합을 막아준다는 것을 의미한다.

 

이번엔 $\gamma$에 대해서 생각해보자. 만약 $\gamma$가 커진다면 식 (8)이 음수가 될 수 있다. (8)이 음수가 되는 경우에는 분리가 일어나지 않으므로 $\gamma$ 또한 무분별한 가지를 생성시키지 않도록 한다는 것을 알 수 있다. 따라서 $\gamma$ 또한 과적합을 방지시키는 역할을 하는 것이다.


b. 분류 문제

이제 XGBoost를 분류 문제에 적용시켜보자. 여기서는 2 분류 문제를 다루며 다중 클래스 분류는 2 분류 문제를 확장시킨 방법인 One vs One, One vs Rest(All)을 이용하면 된다.

 

연간 독서량, 하루 컴퓨터 사용시간을 이용하여 안경 착용 여부를 예측한다고 해보자. 안경 여부 칼럼에서 1은 안경 착용, 0은 미착용이다.

 

 

이제 XGBoost 알고리즘을 돌려보자.

 

1. 초기 모형은 상수로 설정하며 다음과 같이 찾는다.

$$\DeclareMathOperator*{\argminA}{arg\,min} F_0(x) = \argminA_{c}\sum_{i=1}^nL(y_i, c)$$

 

분류 문제에서는 음의 로그 우도(Log Likelihood)를 손실 함수로 사용한다.

$$L = -\sum_{i=1}^n[y_i\log(p_i)+(1-y_i)\log(1-p_i)]\tag{10}$$

여기서 $p_i$는 $P(y_i=1|x_i)$이다.

 

$\text{odd}_i = p_i/(1-p_i)$라 하자. 이를 이용하여 (10)을 변형하면 다음과 같다.

$$L = \sum_{i=1}^n[-y_i\log \text{odd}_i+\log (1+e^{\log \text{odd}_i})]$$

 

다음으로 로그 오즈를 이용하여 손실 함수를 다음과 같이 정의한다.

$$L(y_i, c) = -y_ic+\log(1+e^c)$$

 

미분을 이용하면

$$F_0(x) = \argminA_{c}  \sum_{i=1}^nL(y_i, c) = \log \left( \frac{\sum_{i=1}^ny_i}{n}/\left(1-\frac{\sum_{i=1}^ny_i}{n}\right) \right)$$

라는 것을 알 수 있다.

 

 

2. $m=1, \ldots, M$에 대하여 다음을 반복한다.

(a) Gradient $g_i$과 Hessian $h_i$을 계산한다.

$$g_i = \left [ \frac{\partial L(y_i, F(x_i))}{\partial F(x_i)} \right ]_{F(x) = F_{m-1}(x)} \\ h_i = \left [ \frac{\partial^2 L(y_i, F(x_i))}{\partial F(x_i)^2}  \right ]_{F(x) = F_{m-1}(x)}$$

 

미분을 이용하면 $g_i, h_i$는 다음과 같음을 알 수 있다.

$$g_i = -(y_i-p_i), h_i = p_i(1-p_i)$$

 

(b) 회귀 나무 $\phi_m$을 다음과 같이 적합한다.

$$\DeclareMathOperator*{\argminA}{arg\,min} \phi_m = \argminA_{\phi}\sum_{i=1}^n \frac{1}{2} h_i \left [ -\frac{g_i}{h_i} - \phi(x_i) \right ]^2 +\gamma T + \frac{1}{2} \lambda \| \phi \|^2 $$

 

편의상 $\gamma = 0$, $\lambda = 1$이라고 하자.

 

먼저 뿌리 마디에서 시작해서 가지를 분리시켜야 한다. 먼저 뿌리 마디에 대한 Similarity Score를 계산해보자.

$$\frac{\left ( \sum_{x_i\in R}g_i \right )^2 }{\sum_{x_i \in R}h_i+\lambda }$$

이 뿌리 마디를 분리한다고 해보자. 예를 들어 아래와 같이 '일 컴퓨터 사용시간' 변수를 선택하고 분리 기준을 3.45라고 해보자. 이때 왼쪽 마디와 오른쪽 마디의 Similarity Score를 계산한다.

 

 

다음으로 자식 마디들의 Similarity Score 합과 부모 마디(뿌리 마디)의 Similarity Score 차이를 계산하면 다음과 같다.

$$0.837+0.973-0 = 1.810$$ 

 

이런 식으로 모든 변수와 이에 대응하는 모든 분리 기준에 대하여 위 값을 계산한다. 계산된 값 중에서 최대로 하는 변수와 분리 기준을 선택하고 이를 기준으로 부모 마디를 분리하여 회귀 나무를 적합하게 된다.

 

이렇게 만들어진 회귀 나무에 대하여 끝 마디의 예측값은 (5)와 같이 주어진다. 예를 들어 앞에서 적합한 최종 회귀 나무가 다음과 같은 경우 끝마디의 예측값은 그림과 같이 계산된다.

(c) 다음과 같이 업데이트한다.

$$F_m(x) = F_{m-1}(x)+l\cdot \phi_m(x)$$

 

앞에서 적합한 회귀 나무를 $\phi_1$이라 하고 $l=0.1$이라 하면 다음과 같이 업데이트한다.

$$F_1(x) = F_{0}(x)+l\cdot \phi_1(x)$$

 

이제 (a)~(c) 과정을 $M$번 반복하면 되는 것이다.

 

여기서 잠깐!!

분류 문제에서 중요한 것은 $F_M(x)$가 확률이 아닌 로그 오즈라는 점이다. 따라서 실제 예측을 할 때에는 다음과 같이 바꿔줘야 한다.

$$\hat{P}(y=1|x) = \frac{e^{F_M(x)}}{1+e^{F_M(x)}}$$


   3. 장단점 및 고려 사항

- 장점 -

a. 과적합 방지가 잘되어 있다.

기존 Gradient Boosting의 약점인 과적합을 방지하기 위해 알고리즘 곳곳에 방지를 위한 장치를 마련해두었다($\gamma, \lambda$).

 

b. 예측 성능이 좋다.

과적합 방지가 잘되어 있어 이에 따라 예측 성능이 좋아졌다.

- 단점 -

a. 작은 데이터(Small Data)에 대하여 과적합 가능성이 있다.

XGBoost가 충분히 좋은 예측 성능을 보이기 위해선 많은 데이터가 필요하다고 한다.

 

b. 해석이 어렵다.

이건 모든 앙상블 계열 알고리즘이 갖고 있는 근원적인 문제이며 XGBoost 또한 각 입력 변수에 대하여 출력 변수가 어떻게 변하는지에 대한 해석이 어렵다.

- 고려 사항 -

XGBoost는 기본 학습기(Base Learner)를 의사결정나무로 사용한다. 이때 의사결정나무의 깊이가 문제가 되는데 교차검증을 통해 계산해볼 수도 있겠지만 보통 6을 사용한다고 한다(StatQuest). 나머지 Hyper Parameter인 $M, l, \gamma, \lambda$는 교차 검증을 통해 정해야 할 것이다.


원래는 파이썬으로 구현까지 해보려고 했으나 하지 못했다. 왜냐하면 이 글을 쓸 당시 꽁냥이는 코로나에 걸렸고 에어컨도 고장이 나서 심적으로 매우 불안한 상태였기 때문이다 ㅜㅜ. 그래도 기분 괜찮아져서 구현할 맘이 생기면 구현해보고 포스팅 수정하겠다.

 

참고자료

StatQuest - XGBoost

XGBoost wiki - https://en.wikipedia.org/wiki/XGBoost

 


댓글


맨 위로