-
Week #4 트리의 앙상블쿠다 4기/<혼공> 머신러닝& 딥러닝 2023. 8. 18. 08:45
앙상블 학습은 정형 데이터를 다루는 데 가장 뛰어난 성과를 내는 알고리즘이다. 이번 포스팅에서는 여러가지 앙상블 학습 알고리즘을 알아볼 것이다.
랜덤 포레스트
대표적인 앙상블 학습의 종류로, 가장 먼저 시도해보아야 한다.
결정 트리를 랜덤하게 만들어 숲을 만들고, 각 결정 트리의 예측을 사용해 최종 예측을 만드는 원리이다.
각트리를 훈련하기 위해 데이터를 랜덤하게 만드는데, 훈련 데이터에서 랜덤하게 샘플을 추출하여 훈련 데이터를 만든다. 한 샘플이 중복되어 추출될 수 있다. 이렇게 만들어진 샘플을 부트스트랩 샘플이라고 한다. 부트스트랩 샘플은 훈련 세트와 크기가 같다.

그림1 그림1은 3개의 샘플을 갖는 원래 데이터에서 각 3번의 복원추출로 B개의 부트스트랩 샘플을 만들었음을 알 수 있다.
각 또한 노드를 분할할 때 전체 특성 중 일부 특성을 무작위로 고른 다음 최선의 분할을 찾는다. 분류 모델인 RandomForestClassifier은 기본적으로 전체 특성 개수의 제곱근 만큼의 특성을 선택한다. 회귀모델은 전체 특성을 사용한다. 이런 방법으로 과대적합을 막고 안정적인 성능을 낼 수 있다.

그럼 이제 랜덤 포레스트 방법으로 레드와인과 화이트와인을 분류하는 문제에 적용해보자.

훈련 세트와 검증 세트의 점수를 확인해보니 과대적합된 것 같다. 특성 중요도를 출력하니, 전전 포스팅인 '결정트리'에서 만든 특성 중요도와 상당히 다르다. 그 이유는 랜덤 포레스트가 특징의 일부를 랜덤하게 선택하여 결정 트리를 훈련하기에, 더 많은 특성이 훈련에 기여하게 되고 과대적합을 줄이고 일반화 성능을 높인다.
앞서 부트스트랩 샘플은 중복되어 샘플이 들어가기 때문에 포함되지 않고 남는 샘플이 있다. 이런 샘플을 OOB샘플이라고 하는데, 이 샘플을 검증세트 처럼 사용할 수 있다.

엑스트라 트리
랜덤 포레스트와 매우 비슷하지만 부트스트랩 샘플을 사용하지 않고 전체 훈련 세트를 사용한다. 대신 노드를 분할할 때 무작위로 분할하기에 과대적합을 막고 검증 세트의 점수를 높이며 랜덤하게 노드를 분할하기에 계산 속도가 빠르다.

그레이디언트 부스팅
깊이가 얕은 결정 트리를 사용하여 이전 트리의 오차를 보완하는 방법이다. 깊이가 얕은 결정 트리를 사용하기 때문에 과대적합에 강하고 일반적으로 높은 일반화 성능을 기대할 수 있다. 그레이디언트 부스팅은 깊이가 얕은 트리를 계속 추가하며 손실함수가 가장 낮아지도록 한다. 아주 간단한 모델 A를 통해 y를 예측하고 남은 잔차 (residual)을 다시 B라는 모델을 통해 예측하고 A+B 모델을 통해 y를 예측한다면 A보다 나은 B 모델을 만들 수 있게 된다. 이러한 방법을 계속하면 잔차는 계속해서 줄어들게되고, training set을 잘 설명하는 예측 모형을 만들 수 있게 되는 원리이다. 학습률 매개변수를 조정하여 모델의 복잡도를 제어할 수 있는데, 클수록 복잡하고 훈련 세트에 과대적합된다.

트리 훈련에 사용할 훈련 세트의 비율을 'subsample'매개변수로 정할 수 있다. 기본값은 1.0이며 전체 훈련 세트를 사용한다. 일반적으로 그레이디언트 부스팅이 랜덤 포레스트보다 조금 더 높은 성능을 얻을 수 있지만 순서대로 트리를 추가하기 때문에 훈련속도가 느리다.
히스토그램 기반 그레이디언트 부스팅
정형 데이터를 다루는 머신러닝 알고리즘 중 제일 인기가 높다. 먼저 입력 특성을 256개의 구간으로 나눈다.

이를 구현한 라이브러리는 대표적으로 XGBoost와 LightGBM이 있다. 두 라이브러리 모두 코랩에 내장되어있다.
'쿠다 4기 > <혼공> 머신러닝& 딥러닝' 카테고리의 다른 글
Week #5 k-평균 (0) 2023.08.29 Week#5 군집 알고리즘 (0) 2023.08.29 Week#4 교차 검증과 그리드 서치 (0) 2023.08.18 Week #4 결정 트리 (0) 2023.08.18 Week #3 확률적 경사 하강법 (0) 2023.08.15