<좋은 강의 영상>
<간단한 예를 들어 설명>
맨 처음 녹색의 점 샘플들에 적절한 회귀를 하고 싶다면,
1. 실제값 y에 대해 OLS(Ordinary Least Squre)값을 줄이는 node 분기를 가지는 Tree를 만든다.
(위의 그림에서 tree 1에 해당한다.)
< OLS를 구하는 방법 >
-> leaf node에 존재하는 샘플들의 평균값은 그 leaf node속에 있는 샘플들의 예측값이 된다.
(같은 leaf node에 들어있는 샘플들은 같은 예측값을 가지므로, 위에 예측값 그래프가 계단식을 띤다.)
-> 실제값 과 예측값의 차이로 만든 OLS는 Tree의 손실함수가 된다 (값이 작을수록 성능이 높은 Tree)
n개의 샘플들에 대해 실제값 y와 그 예측값 f(x)의 차이의 제곱이 손실함수가 된다.
2. 이때, GBM은 새로운 Tree를 만드는데 , 맨처음 실제값에 해당하는 샘플들에 대해서가 아니라
실제값과 예측값의 차이(잔차 : residual)를 y값으로 갖는 샘플들에 대해서 새로운 Tree를 만드는 것이다.
(위의 그림에서 tree 2에 해당한다.)
=> 이 때문에 Tree1의 샘플들과 Tree2의 샘플들이 서로 다른값을 가지는 것이다.
Tree2의 샘플들은 (Tree1의 샘플들의 값 - 예측값)을 실제값 y로 가지는 샘플들이다.
3. 우리가 원하는 횟수만큼(적절하게) 2.를 반복해서 새로운 Tree들을 만들어 낸다.
(주의해야 할 점은 새로운 Tree를 만들기 위해 사용되는 샘플은,
이전 Tree에서 사용된 샘플에서 각 샘플에 해당하는 예측값이 차감된 값으로 이루어진 샘플이다. )
=> 실제값과 예측값의 차이 : 잔차에 해당한다.
+ 이해해야 할 점은 (Tree 를 만들어 낸다는 것 => 새로운 node들을 얻는다는 것 )
4. 최종적으로 모든 Tree들의 node들을 모두 모아서 하나의 Tree를 만든다.
=> 성능이 좋다. => 원래 맨처음의 샘플들(녹색점)을 잘 분류한다.
성능이 좋아지는 이유에 대해서 직관적인 설명을 해보겠다.
만약 맨 처음 샘플들의 데이터인 y1이라는 실제값에 대해
OLS를 줄이는 적절한 node 분기(x=a)를 통해 생긴 leaf node들의 평균인 예측값들과의
차이(잔차)를 구한다.
=> 이 차이의 값을 실제값 y2으로 가지는 샘플들에 대해서 Tree를 만들 것이다.(=분기를 위한 node 생성)
이때, 새로운 Tree의 node는 어디에 생기게 될 것인지에 대해 생각해보자
=> 만약 잔차가 큰 샘플들에 대해서는 실제값 y2가 y2=0으로부터 멀리 떨어질 것이고(양이든 음이든),
잔차가 작은 샘플들에 대해서는 실제값 y2가 y2=0과 비슷한 값들을 가질 것이다.
=> 예측값과 실제값을 줄이기 위해서는
1. 잔차가 큰 샘플들과 잔차가 작은 샘플들 사이에 node를 위치하거나,
2. 잔차가 양의방향으로 크거나, 음의방향으로 큰 샘플들의 사이에 node를 위치하거나
해야한다.
<시각화>
이 노드들(x=b,x=c)이 원래의 샘플을 분류하기 위한 node로써 사용된다면,
다음과 같이 실제값과 예측값의 차이를 잘 줄이는 예측값을 만들어 내는 node가 되어서 분류를 잘 하는 것을 보여준다.
=> 즉, 잔차가 큰 부분은 적절히 분류되지 않은 부분이라고 생각할 수 있고,
잔차에 대해서 Tree를 만듬으로써 얻은 node들은 잔차가 큰 부분 주위에 위치하게 되며
=> 이는 적절하게 분류되지 않은 부분 주변에 새로운 node가 생겨서 분류 성능이 향상된다는 것을 알 수 있다.
=> 만약 Tree를 많이 만들어 낼수록, node가 위와 같은 규칙에 의해 만들어 질 것이고,
분류 성능이 향상된다.
=> 물론, 너무 많으면 과적합이 일어나게 된다.
<Gradient라는 이름이 붙은 이유?>
마지막으로 Gradient 라는 이름이 붙은 이유는,
잔차에 해당하는 값을 우리는 계속해서 예측하고, 줄여나가서, Optimal한 분류를 위한 node들을 찾을 것인데
n개의 샘플들에 대해 실제값 y와 그 예측값 f(x)의 차이의 제곱이 손실함수가 된다.
이 잔차라는 것이 알고보니 손실함수에 대한 예측값의 역방향(negative) gradient였던 것이다.
1. 이 gradient(=잔차)는 학습함에 따라 점점 줄어나가고,
2. 0에 가까운 값(GD에서도 최솟값(optimal 값)에 다가갈수록 gradient가 0에 가까워진다)에 점점 다가갈수록
학습이 완성된다는 점에서 gradient라는 이름이 붙었다.
'머신러닝(기계학습)' 카테고리의 다른 글
논문을 통해 XGBOOST 완전히 이해하기(Bagging과 Boosting) (0) | 2022.10.10 |
---|---|
Decision Tree(의사결정나무) (0) | 2022.10.10 |