우당탕탕 개발일지
[혼공머신] 5-3. 트리의 앙상블 본문
💡 서론
앙상블 학습은 정형 데이터를 다루는 데 가장 뛰어난 성과를 내는 알고리즘이다.
지금까지 K-최근접 이웃 회귀, 선형 회귀, 다항 회귀, 다중 회귀, 릿지/라쏘 회귀, 로지스틱 회귀, 결정 트리 등 다양한 모델 구조를 봤는데, 앙상블 모델이 주로 성능이 가장 좋다.
앙상블 모델은 트리 모델을 이리저리 조합해서 만드는 모델이다. 대표적인 앙상블 모델로는
1. 랜덤 포레스트(Random Forest)
2. 엑스트라 트리(Extra Tree)
3. 그레이디언트 부스팅(Gradient Boosting)
4. 히스토그램 기반 그레이디언트 부스팅(Histogram-based Gradient Boosting)
등이 있다. 이 외에도 그레이디언트 부스팅을 구현한 XGBoost, LightGBM 등의 라이브러리가 있다.
이것을 알기 위해서는 부트스트랩 개념을 알아야 한다.
💡 부트스트랩(Bootstrap)
부트스트랩 샘플은 전체 샘플에서 복원 추출을 허용하며 뽑은 훈련 세트와 같은 크기의 샘플을 말한다.
예를 들어 전체 샘플이 1000개라면 여기서 중복을 허용하여 1000개를 뽑는 식이다.
💡 랜덤 포레스트(Random Forest)
그래서 이 부트스트랩 샘플을 이용해서 학습하는 모델을 랜덤 포레스트라고 한다.
랜덤 포레스트(Random Forest)는 결정 트리를 랜덤하게 만들어 숲을 만들고, 각 결정 트리의 예측을 종합해서 최종 예측을 만든다.
하나의 부트스트랩을 이용해서 하나의 결정 트리 모델이 만들어진다. 여러 결정 트리 모델들의 예측값을 종합해서 최종 예측값을 도출하는 방식이다. 분류와 회귀 모두 사용 가능하다.
- 분류: 각 트래의 클래스별 확률을 평균하여 가장 높은 확률을 가진 클래스를 예측으로 삼는다.
- 회귀: 각 트리의 예측값을 평균낸다.
부트스트랩 샘플을 만들 때 랜덤하게 만들어지고, 트리 모델들이 모여서 숲을 이루기 때문에 랜덤 포레스트(Random Forest)라는 이름이 붙었다.
부트스트랩 샘플을 이용하면 자연스럽게 OOB(Out of bag) 샘플이 생긴다. 이건 복원추출을 하다보니 샘플에 포함되지 않고 남는 샘플을 뜻한다. 이 남는 샘플을 검증 세트로 이용해서 검증 점수를 파악할 수 있다.
💡 엑스트라 트리(Extra Tree)
여러 개의 결정 트리를 종합해서 결과를 도출한다는 점에서 랜덤 포레스트와 유사하지만,
각 결정 트리를 만들 때 전체 훈련 세트를 사용한다는 점에서 차이가 있다.
랜덤 포레스트(Random Forest) |
엑스트라 트리(Extra Tree) |
|
공통점 | 여러 결정 트리 훈련 | 여러 결정 트리 훈련(기본적으로 100개) |
차이점 | 각 부트스트랩 샘플로 각 결정 트리 모델 생성 | 전체 훈련 세트로 각 결정 트리 모델 생성 |
차이점 | 가장 좋은 방식으로 노드 분할 | 무작위로 노드 분할 |
무작위로 노드를 분할해서 성능이 낮아지지만 많은 트리를 앙상블하기 때문에 과대적합 막고 검증 세트의 점수를 높이는 효과가 있다.
또, 랜덤하게 노드를 분할해서 계산 속도가 빠르다.
ExtraTreesClassifier로 적어야하는데 s를 빼먹어서 에러났다.. s 빼먹지 말기!
💡 그레이디언트 부스팅(Gradient Boosting)
깊이가 얕은 결정 트리를 사용하여 이전 트리의 오차를 보완하는 방식으로 앙상블 하는 방법이다.
이전에 봤던 랜덤 포레스트와 엑스트라 트리는 모두 여러 개의 트리 모델을 최종적으로 한 번에 종합했지만, 그레이디언트 부스팅은 하나씩 트리를 추가해가며 이전 트리보다 더 나은 성능의 모델을 만들어간다는 점에서 차별점이 있다.
위 그림처럼 경사 하강법을 사용하여 트리를 앙상블에 추가한다. 손실함수의 낮은 곳으로 천천히 이동하며 과대적합에 강하고 높은 일반화 성능을 보인다.
💡 히스토그램 기반 그레이디언트 부스팅(Histogram-based Gradient Boosting)
정형 데이터를 다루는 머신러닝 알고리즘 중 인기 최고 알고리즘
먼저 입력 특성을 256개의 구간으로 나눈다. 이를 통해 빠르게 최적의 노드 분할이 가능해진다.
이 알고리즘에 대해 정확히는 모르겠지만 그레이디언트 부스팅보다 살짝 더 높은 성능을 보인다.
💡 이외의 그레이디언트 부스팅을 구현한 라이브러리
XGBoost, LightGBM, CatBoost 등 다양하게 있는데 하나하나 해보면서 성능을 확인해보면 된다.
'인공지능' 카테고리의 다른 글
[혼공머신] 6-2. K-평균 (0) | 2025.02.04 |
---|---|
[혼공머신] 6-1. 군집 알고리즘 (0) | 2025.02.04 |
[혼공머신] 5-2. 교차 검증과 그리드 서치 (0) | 2025.01.28 |
[혼공머신] 5-1. 결정트리 (0) | 2025.01.24 |
[혼공머신] 4-2. 확률적 경사 하강법 (1) | 2025.01.14 |