본문 바로가기

B/Mechine Learning

[ML] 랜덤 포레스트(Random Forest) 모델 - ( 배깅 , 부트스트랩 , random subspace)

랜덤포레스트(Random Forest)는 앙상블 중 배깅의 대표적인 방법으로, Decision Tree에서의 overfitting의 위험을 줄일 수 있는 해결 방안으로 알려졌다. 그렇다면 먼저 앙상블은 무엇이고, 배깅은 무엇인지 차근차근 알아보면서 '랜덤 포레스트'에 대해서 이해해보자.


 

앙상블이란?

 

앙상블(Ensemble)은 프랑스어로 <조화, 통일> 을 의미한다. '앙상블'이라는 이야기만 들었을때 무엇이 떠오르는가?

나는 교수님 말씀대로 오케스트라가 생각이 났다.

바이올린, 피아노, 첼로, 콘트라베이스 등 단원들이 각자의 악기를 가지고 모여 연주를 했을때 전체적인 어울림의 효과를 주는 것.

 

마찬가지로 머신러닝에서도 앙상블은 이와 비슷한 '조화'을 만들어낸다.

즉, 한개의 모델을 쓰는 것이 아니라 여러가지의 Base모델을 두고, 이들의 예측을 다수결/평균 등을 이용해서 통합한 최종결과를 내는 것을 두고 앙상블, 혹은 앙상블 모델링이라고 하는 것이다.

 

 

김성범 교수님의 자료 - 고려대학교 산업경영학부

 

 

 

앙상블이 기본 Base모델보다 우수한 성능을 보여주기 위해서는,

1. 각 베이스 모델이 서로 독립적이어야 하고,

2. 베이스 모델들이 무작위로 예측하는 모델보다는 성능이 좋아야 할 것이다.

 


 

랜덤포레스트

 

 

그 중에서도 랜덤포레스트는 대표적인 앙상블 모델로써,

Base모델을 의사결정나무(Decision Tree, 이하 DT)를 이용하는 것을 말한다.

기본 베이스 모델로 결정트리를 쓰는 이유는

첫째, 데이터의 크기가 커도 계산량이 Low하다는 점과,

둘째, DT가 데이터 분포에 대한 전제가 필요없는, 비모수적(Non-parametric) 모델이기 때문이다.

귀찮게 모델링 전 데이터를 따로 정규화하거나 Scaler 같은 라이브러리로 전처리 할 필요가 없다는 뜻!

 

 

김성범 교수님의 자료 - 고려대학교 산업경영학부

 


 

랜덤포레스트의 두가지 핵심

 

앙상블 모델이 잘 작동하기 위해서는 Diversity와 Random성을 확보하는 것인데,

Random forest 가 성능이 좋은 이유가 바로 이것이다.

랜덤포레스트에는 이 두가지를 확보하기 위해 중요한 아이디어를 장착하고 있기 때문이다.


Bagging과 Random subspace가 바로 그것이다

 

1. Bagging

배깅은 (Bootstrap Aggregating)의 줄임말인데, 찬찬히 뜻을 뜯어보자.

Bootstrap

부트스트랩은 데이터셋의 샘플링 방식을 말한다.

각 base모델이 서로 다른 학습데이터셋을 이용해야한다는 점, 그 데이터 셋을 뽑을때는 복원추출(중복을 허용하여 뽑는다)을 한다는 점, 그리고 원 데이터 수만큼 데이터 셋을 뽑아야 한다는 점이 부트스트랩 기법의 핵심이다.

 

Aggregating

각 base모델의 결과값을 합쳐서 예측을 하게 되는 방식을 말한다.

여기에도 방법이 다양하다.

Label이 continuous하다면 base모델의 결과값을 평균을 내어 예측을 하고, Label이 class, categorical하다면 voting을 하게 된다.

 

여기서 voting의 방식에는 soft voting과 hard voting이 있다.

하드보팅은 다수결의 원칙에 따라 가장 많이 예측된 클래스값을 최종값으로 내놓게 되고, 소프트보팅은 base모델이 예측한 클래스의 확률값을 비교하여 높은 값을 내놓게 된다.

continuous label 일때는 평균값으로 결과를 내는 것에 거의 이견이 없지만, class label일때는 위에서 이야기한 voting방식 외에도 weighted voting과 같이 base모델의 accuracy를 이용해 가중치를 두는 방식 등 여러 방식이 있다고 한다.

 

 

2. Random subspace

랜덤포레스트 모델의 성능을 높이기 위해서는 개별 base 모델이 서로 독립적일수록 좋다. 그렇다면 모델들이 독립적이라는 것이 무엇이고, 어떻게 독립적인 모델을 만들 수 있을까? 이것을 가능케하는 것이 Random subspace라는 방식이다.

방법은 간단하다. 개별 base모델이 DT라고 했는데, 보통 결정트리에서 분기를 나눌때 모든 변수를 고려한다. 하지만 랜덤포레스트에서는, 의사결정나무의 분기점(Node)를 탐색할때, 원래 변수의 수보다 적은 수의 변수를 random으로 선택해서 임의의 선택된 변수만을 가지고 가지치기(분지)를 하는 것이다.

 


변수의 중요도

 

회귀나 로지스틱은 모수적 추정이 가능하지만,

DT를 이용하는 RF는 비모수적모델이기 때문에 어떻게 좋은 변수를 선택할 것인가? 에 관한 궁금증이 남는다.

이를 OOB(out of bag) 데이터를 이용한 generalization error를 지표로 삼아 feature importance를 계산해볼수 있다.

 

고려대학교 김성범 교수님의 자료


 

하이퍼파라미터

코딩을 하던 하지 않던 핵심 하이퍼파라미터를 생각해보고 디폴트를 아는 것은 의미가 있다.

랜덤포레스트에서는 대표적으로 2가지가 있는데, 첫번째는 base모델(decision tree) 수이다.

보통 2000개라고 말씀하시는데, 500개일때도 있고, 10000 개 가까이 써야 성능이 나올때가 있다고 한다. 2000개는 굉장히 rough한 기준인거 같다.

두번짼 무작위로 선택할 변수의 수이다.

random subspace과정에서 개별 base모델을 독립적으로 만들기 위해 변수를 무작위로 선택하는 과정이 있었는데, 이때 기존 변수 대비 얼마나 선택할 것인가? 에 대한 파라미터값이다. 분류에서는 sqrt(변수의 수), 회귀에서는 (변수의수)/3 이라고 하는데, 이 또한 역시 rough한 기준... 이를 디폴트로 삼고 데이터에 따라 여러 번 돌려봐야 알 것 같다.

 

본글은 고려대학교 산업경영공학부 김성범 교수님의 랜덤포레스트 강의를 토대로 정리한 내용입니다.