2024. 2. 12. 19:59ㆍML
Gradient Descent
경사하강법
기울기를 줄여나감으로써 오류를 최소화하는 방법
실제값과 모델의 예측값 차이에 따른 오류값 = 잔차 (Residual)
손실함수 (loss fuction) = 잔차의 제곱합 (RSS : Residual Sum of Square)
손실함수를 지속적으로 감소시켜 최종적으로 더이상 감소하지 않는 최소의 오류값을 구하는 방향으로 학습이뤄짐
손실함수에 미분을 적용한 뒤 미분값이 계속 감소하는 방향으로 파라미터 w를 조정하다 더이상 감소하지 않응 지점을
최소인 지점으로 간주하고 파라미터w를 반복
GBM
Gradient Boosting Machine
다른 부스팅모델과 같이 약한 학습기를 결합해 강한 학습기를 만든다
AdaBoost는 오답에 가중치 부여하여 학습, GBM은 잔차(Residual)를 최소화하는 방향으로 학습
잔차 최소화하는 과정에서 경사하강법을 이용
잔차를 줄이는 새로운 모델을 순차적으로 만들어 나가는 방법
오류값을 최소화하는 방향으로 반복적으로 가중치를 업데이트
gradient를 적극 이용해 모델을 개선하는 방식
대부분 구조화된 ( 표형식 데이터같은) 예측 모델링 작업에 사용되는 기술
장점
잔차(오류값)을 0으로 만드는 방향으로 학습하기에 정확도가 좋아 높은 성능 보일 수 있다
CART(Classification and Regression Trees)기반의 다른 알고리즘과 마찬가지로 분류, 회귀 다 가능
피처중요도 선택이 쉬움
단점
과적합 규제 기능이 없다 - 과적합 될 가능성 있다 => 정규화 알고리즘 포함시켜야 함
속도가 느림 (주요 문제)
- 병렬로 훈련할 수 있는 랜덤포레스트와 달리 트리를 순차적으로 생성하고 추가해야하기때문
= 대규모 데이터 셋에서 문제가
잔차를 줄이기 위해 학습해 오버피팅 발생 가능성이 높다
하이퍼파라미터 튜닝에 시간이 많이 걸림
부스팅 모델 특성상 해석이 어려움
GBDT ( Gradient Boosting Decision Tree)
sequence로 훈련되는 decision tree의 ensemble model
각 iteration에서 음의 gradient (known as residual)을 피팅함으로서 학습
GBDT의 main cost는 decision tree학습하는데 있다
-> decision tree 학습시 시간이 가장 오래 걸리는 부분 = 최상의 분할 지점 찾는것 (best split points)
분할점을 찾는 가장 일반적인 알고리즘 = 미리 정렬된 feature values에 가능한 모든 분할 지점을 열거하는 미리 정렬된 알고리즘
-> 간단하고 최적 분할지점을 찾을 수 있으나 훈련속도와 메모리 소비에서 비효율적
분할점 찾는 다른 알고리즘 = 히스토그램 기반 알고리즘
Histogram - Based Gradient Boosting Ensembles
정렬된 feature 상에서 분할된 점들을 찾는 대신 histogram기반 알고리즘을 continuous feature값들을 이산 빈들로 버킷화하고 이 빈들을 사용해 훈련하는 동안 feature histogram을 구성하고 이를 기반으로 최적 분할점을 찾는다
- 버킷화하면 각 feature의 고유값 수를 줄일 수 있다
메모리 소모량, 속도에서 더 효율적이다
동작원리
1. 데이터의 특성을 이해하기 위해 히스토그램으로 변환 -> 여러개의 구간(bin)으로 나누고 각 구간에 속하는 데이터 포인트의 개수를 기록
2. 초기에는 단 하나의 트리로 시작, 이 트리는 모든 데이터를 하나의 잎(leaf)에 할당
3. 히스토그램을 이용해 데이터의 분포를 고려하며 각 구간의 예측값을 저정해 나가는 방식으로 트리를 구성
4. 트리의 구성이 완효되면 새로운 트리에 의한 예특값과 실제값 사이의 오차를 계산 - 이 오차를 이용해 다음 트리를 학습시키는 과정 반복
5. 모든 트리를 학습한 후 각 트리의 예측값을 결합해 최종 예측값 얻음
장점
효율적인 계산 - 히스토그램을 이용해 데이터를 변환함으로 훨씬 작은 메모리 요구
상대적으로 낮은 과적합 가능성 - 일종의 데이터 요약 방법으로 과적합을 완화하는 효과가 있음
범주형 변수 처리
참고 및 출처 : https://velog.io/@jjw9599/MLboostingconcept1 , https://hyunlee103.tistory.com/25 , https://velog.io/@dltnstlssnr1/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-5%EB%8B%A8%EA%B3%84%EC%95%99%EC%83%81%EB%B8%94-%EB%B3%B4%ED%8C%85%EB%B0%B0%EA%B9%85%EB%B6%80%EC%8A%A4%ED%8C%85%EC%8A%A4%ED%83%9C%ED%82%B9 , https://en.wikipedia.org/wiki/Gradient_boosting#cite_note-Friedman1999a-5 , https://dacon.io/competitions/official/235946/codeshare/5623 , https://bommbom.tistory.com/entry/GBMGradient-Boosting-%ED%8A%B9%EC%A7%95%EA%B3%BC-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC#google_vignette , https://injo.tistory.com/48 , https://goatlab.tistory.com/entry/Machine-Learning-Histogram-Based-Gradient-Boosting-Ensembles , https://dodonam.tistory.com/433#google_vignette ,
https://papers.nips.cc/paper/2017/hash/6449f44a102fde848669bdd9eb6b76fa-Abstract.html
'ML' 카테고리의 다른 글
Decision Tree (0) | 2024.02.17 |
---|---|
LightGBM (0) | 2024.02.12 |
Boosting,AdaBoost (0) | 2024.02.11 |
Bagging (0) | 2024.02.10 |
Voting (0) | 2024.02.10 |