혼공머신 교재를 참고하여 공부중인데 어떻게 해도 그라디언트 부스팅(GB)과 히스토그램 그라디언트 부스팅(HGB)이 감이 안 잡힌다.
스스로 맞게 이해했는지도 확신할 수가 없다...
그라디언트 부스팅
최대한 작은 잔차(residual)를 구해 평균값과 합연산
테이블 형태의 정보가 있다 가정하자.
특성끼리의 관계를 고려하여 특성 A의 보편적 값을 구하고자 한다.
- 일단은 특성 A 값들의 단순 평균값을 준비한다.
- 그리고 얕은 트리를 내린다. GB는 합리적 판단을 통해 노드를 분할한다.
- 잔차 = (leaf의 값 - 특성 A의 평균값)을 구한다. 만약 leaf에 값이 여러 개 있다면 해당 잔차들의 평균을 구한다.
- 미리 정해둔 학습률(하이퍼파라미터)과 leaf의 값(잔차)을 곱한 뒤 A의 평균값에 더한다. 이제 이게 A의 새로운 평균값이다. 잔차는 음수로도 나오기 때문에 줄어들 수 있다.
- 새로운 얕은 트리를 내린다. (2~4 반복)
- 적당히(iter 횟수 제한, 최소 변동률 제한 등) 학습했다면 지금까지 만든 모든 트리를 이용해 다른 특성값도 예측할 수 있다.
히스토그램 기반 그라디언트 부스팅
분산된 값들을 모아 일정량으로 압축하여 빠른 속도를 보장
- 특성값들을 기준으로 샘플 전부에 대해 임의의 정수(3~256)개의 구간으로 분할한다. 각 구간 당 소속된 샘플 개수는 비슷하게 맞춘다. 수많은 샘플이 300개 미만으로 압축되는 것이다.
1-1. 그 중 하나는 빼 둔다. 누락값이 있으면 여기서 빼서 채워넣는다.
- 이제 특성 A 값들의 단순 평균값을 준비한다.
- 그리고 얕은 트리를 내린다. 이하는 GB와 같다.
HGB에서 입력 특성을 256개로 나눈다는 게 대체 무슨 의미인지 이해가 되지 않아 고생을 했다... 특성값을 기준으로 샘플 데이터를 256등분 하여 빠르게 처리하겠다는 뜻인 것 같다.
근데 그러면 특성이 여러 개면? 어라?
머신러닝이란 뭘까?
이 글은 깨달음을 얻을 때마다 수정된다...
애초에 HGB에 이렇게까지 집착할 필요가 있는가? 어차피 HGB도 그저 GB의 종류 중 하나일 뿐인데