[ML] Gradient Boost - Classification
https://www.youtube.com/watch?v=jxuNLH5dXCs&t=130s
1. odds
GB를 분류에 사용할때는 중요한 개념이 사용된다. 로지스틱회귀분석에 사용되는 odds라는 개념이다.
odds = 성공확률 / 실패확률 = (성공건수/전체건수) / (실패건수/전체건수) = 성공건수/ 실패건수
이진분류에서 실패확률 = 1 - 성공확룔이기때문에
p를 성공확률이라고 할때
odds = p/(1-p) 라고 할 수 있다.
간단히 생각하면 오즈가 클수록 성공확률이크다는 것을 의미한다.
위 오즈에 로그를 취한 값을 로그오즈 (logit로짓)이라고 하는데
자세한 오즈에 대한 설명은 로지스틱회귀분석에 대한 포스팅을 진행할 때 살펴보자
2. GB
누군가가 트롤 2를 좋아할 로짓은 log(4/2) = 0.7 이다.
이것이 GB의 첫 예측값이 된다.
로지스틱회귀분석과 같이 GB의 분류문제에서는 로짓을 이용하는 방법은
확률로 변환하는 방법이다.
위와 같이 확률을 계산하면 확률이 나오게된다.
(위값은 설명에 용이하게하기위해 반올림을 한 것임정확히 계산한다면 0.6667이 나올것)
확률이 0.5보다 크게 나왔으니 1이라고 분류할 것이다.
여기서 0과 1로 구분하는 구분점을 threshold라한다. 이것은 바귈수있다. roc aoc
이제 나온 확률을 바탕으로 실제값과의 잔차를 구하여 얼마나 잘 예측했는지를 평가한다.
이제 잔차를 예측하는 트리를 이전과 같이 만든다.
이전의 GB처럼 당연히 리프의 개수는 제한되어있다.
이제 회귀문제보다는 좀 더 복잡한 문제가 발생한다.
0.7이라는 값은 로짓의 추정값이고 리프노드의 값은 확률값이기 때문에 리프노드의 값을 로짓으로 변환할 필요가 있다.
이때 가장 보편적으로 사용되는 변환방법은
위와 같다.
좌측에서 두번째 노드의 예측 로짓은
이 되는 것이다. 이 과정을 모든 리프노드에 반복하면
로짓을 예측하는 트리가 완성이 되는것이다.
이제 예측값을 업데트한다.
learning rate를 0.8이라고 했을때 가장 우측노드의 경우
로짓의 새로운 예측값은
1.8이고 이를 확률로 변환하면
0.9가 된다. 이렇게 모든 row에 확률을 구하고 잔차를 구하면
위와 같은 결과를 얻게된다.
나온 확률의 잔차를 바탕으로 새로운트리를 만들기를 반복한다.
정리하면
1. 모든 row에대한 로짓을 계산.
2. 잔차를 예측하는 트리 생성. 이때 리프노드의 값은 로짓으로 변환해 계산.
3. learning rate를 가중하여 새로운 로짓값을 업데이트를 하고 그로부터 새로운 확률을 계산하여 잔차를 업데이트
2~3을 중단조건이 만족될 떄가지 반복한다,
예측을 할때에는 최종 트리에서 확인할 수 있는 로짓값을 확률로 변환하여 최종예측