Boosting Tree

김당찬·2022년 4월 17일
0

Boosting Tree

이전에 Regression Tree와 Classification Tree(CART) 모형에 대해 살펴보았는데, Tree에 대해서도 boosting algorithm을 적용할 수 있다. Tree 모델은 기본적으로 partition된 region RmR_m들에 대한 예측값 γm\gamma_m을 부여하는 것인데, 이를 이용해 JJ개의 region을 분리하는 Tree를

T(x:θ)=j=1JγjI(xRj)T(x:\theta) = \sum_{j=1}^J \gamma_j I(x\in R_j)

로 표현할 수 있다. 이때 parmeter θ\theta{Rj,γj}1J\{R_j,\gamma_j\}_1^J 를 의미하고, JJ는 Tree의 깊이를 설정하는 hyperparmeter이다. parameter의 최적화는

θ^=argminθj=1JxiRjL(yi,γj)\hat \theta =\arg\min_\theta\sum_{j=1}^J\sum_{x_i\in R_j} L(y_i,\gamma_j)

으로 이루어진다. 이 과정에서 optimization은 두 개의 문제로 이루어지는데, RjR_j가 주어졌을 때 split point γj\gamma_j를 찾는 것과 RjR_j를 찾는 것이다. 첫 번째 optimization은 비교적 쉬운 방법으로 구현할 수 있다. 주어진 classification loss에 대한 γ^\hat\gamma로 modal class최빈값 을 설정하거나, 평균치를 이용하는 방법을 사용하면 된다. 반면, 두 번째 optimization, 즉 Region을 어떻게 분리할 것인지 찾는 것은 어려운 문제이다. RjR_j를 찾는 것은 곧 γj\gamma_j를 추정하는 것을 수반하며, 이는 주로 top-down 방식으로, 다른 criterion index를(ex. Gini Index) 바탕으로 이루어진다(Tree 게시글 참고).

Boosted Tree model은 이러한 트리들의 합으로 주어진다. 즉,

fM(x)=m=1MT(x:θm)f_M(x)=\sum_{m=1}^M T(x:\theta_m)

와 같은 형태인데, 이는 forward-stagewise additive modeling의 알고리즘으로부터 유도된다. 각 단계 m=1,,Mm=1,\ldots,M에 대해 다음의 최적화 과정

θ^m=argminθmi=1NL(yi,fm1(xi)+T(xi:θm))(1)\hat\theta_m = \arg\min_{\theta_m}\sum_{i=1}^N L(y_i, f_{m-1}(x_i)+T(x_i:\theta_m))\tag{1}

의 해를 구하는 과정으로 θ^m\hat\theta_m의 update가 이루어진다. 식 (1)의 해를 찾는 것은 θm={Rjm,γjm}1Jm\theta_m = \{R_{jm},\gamma_{jm}\}_1^{J_m} , 즉 region과 optimal constant γ\gamma 모두에 대한 추정치를 구하는 것을 의미한다. 하지만 앞서 말했듯 Region을 찾는 것은 어려운 문제이며, 특히 boosting algorithm 과정에서 이를 찾는 것은 개별 트리에 대한 문제보다 더 복잡하다. 그러나, 아래와 같이 몇 가지 경우에 대해 위 식 (1)의 문제는 단순화된다.

  1. Squared-error Loss : 식 (1)의 문제는 Regression Tree를 만드는 것과 동일하다. 즉, region의 경우 current residual yifm1(xi)y_i-f_{m-1}(x_i)를 최적화하는 Region으로 update하고, region의 평균값을 γ^jm\hat\gamma_{jm} 으로 사용하게 된다.

  2. Binary Classification과 Exponential Loss :

    이진 분류와 exponential loss에 대해서 위 식 (1)의 stagewise 알고리즘은 AdaBoost 알고리즘과 동일하며, AdaBoost를 Classification Tree에 적용하는 것으로 치환된다. 이는 이전에 살펴본 AdaBoost - Stagewise Modeling 간의 관계로부터 도출된다. 즉, exponential loss의 경우 임의의 RjmR_{jm}이 주어질 때 optimal constant는

    γ^jm=12logxiRjmwi(m)I(yi=1)xiRjmwi(m)I(yi=1)\hat\gamma_{jm}={1\over 2}\log\frac{\sum_{x_i\in R_{jm}}w_i^{(m)}I(y_i=1)}{\sum_{x_i\in R_{jm}}w_i^{(m)}I(y_i=-1)}

    으로 주어진다(전 게시글 참고).

만일 Loss function이 absolute error, Huber Loss 등 다른 기준으로 주어지면 이는 Boosting tree 알고리즘을 robust이상치에 안정적임하게 만들 것이다. 하지만 robust한 Loss function이 있다 해도 앞선 두 개의 케이스처럼 단순하고 빠른 boosting 알고리즘을 구현할 수 없다. 그렇기에 손실함수 LL 대신 이를 근사할 수 있는 더 간편한 기준 L~\tilde{L} 을 설정하게 되고, 이를 이용해

θ~=argminθi=1NL~(yi,T(xi,θ))\tilde\theta = \arg\min_\theta\sum_{i=1}^N \tilde L(y_i,T(x_i,\theta))

로 optimization을 수행한다.

profile
블로그 이사했습니다 https://ddangchani.github.io

0개의 댓글