본문 바로가기

ML & DM/Ensemble Learning

Random Forest




Random Forest 는 앙상블기법의 하나로 Bagging과 Random space method 방법을 사용하여 과적합과 탐욕알고리즘의 성향 으로 인한 Decision Tree의 성능의 변동 폭이 크다는 결점을 극복한 하나의 방법이다. 오히려 이러한 과적합의 성향, 탐욕알고리즘의 성향을 이용하여 더 높은수준의 학습기를 만들어 냈다고 할 수 있겠다.  


결정트리는 학습데이터에 따라 생성되는 결정트리가 매우 달라지기 때문에 일반화하여 사용하는데 어려움이 따른다. 특히 결정트리는 계층적 접근방식이기 때문에 만약 중간에 에러가 발생한다면 다음 단계로 에러가 계속 전파되는 특성을 가진다. 하지만 랜덤포레스트에서는 결정트리를 학습시킬때 임의화 기술(변수선택의 임의성(흔히 말하는 Random space method)와 배깅(즉 예제선택의 임의성)을 통하여 이러한 문제점을 극복하였다.


랜덤포레스트의 강점은 위키피디아에도 명시되어 있는 바와 같이 임의성에 의해 서로 조금씩 다른 특성을 갖는 트리들로 구성되기 때문에 각 트리들의 예측들이 비 상관화 되게 하며 결과적으로 일반화 성능을 향상시킨다는 것 또한 임의화는 노이즈가 포함된 데이터에 대해서도 강인하게 만들어준다는 것이다. 


랜덤포레스트는 크게 2가지로 구성이 된다. 배깅을 이용하여 포레스트를 구성하는 방법, Random subspace방법 이 두가지로 구성이 되는데. 예를 들면서 설명을 하겠다. 우리에게 100개의 observation이 있는 데이터셋이 있다고 해보자, 숲을 구성하기위해서는 숲에있는 나무갯수만큼의 데이터셋이 필요하므로 100개의 데이터셋으로부터 같은 sample size(100개)의 데이터셋을 무작위 복원추출을 하여 나무의 갯수만큼 데이터셋을 만든다. 참고로 이렇게 복원추출을 하여 만든 데이터셋에 고유한 샘플비율(중복이 안된 것)은 통상 약63.2%라고한다. 우리는 이 과정을 부스트랩핑(Bootstrapping)이라고 한다. 


이렇게 만든 데이터셋들로 결정트리들을 학습시키는데 여기서 2번째 Random subspace방법이 나온다. 이 방법은 흔히 특징배깅(Feature Bagging)이라고도 불린다. 이렇게 특징 또한 랜덤하게 추출하는 이유는 배깅을 통해 얻은 트리들간의 상관성에 있다. 한개의 특징 또는 극소수의 특징들이 결과에 대해 강한 예측 성능을 지닌다면, 훈련 과정중 여러 트리노드에서 이러한 특징들이 중복되어 선택되고 결과적으로 트리들이 상관화 되기 때문이다. 즉 정말 소수의 특징들이 데이터를 분류함에 있어서 중요한 기준이 된다면은 한 트리 뿐만 아니라 여러트리에서 중요한 특징이 될 것이라는 말이다. 이렇게 분류기준의 대표성을 띄는 특징들을 찾아낼 수 있기에 Random subspace 방법이 중요하다. Random subspace 방법으로 변수의 갯수를 선택하는 방법은 M개의 총 변수들중에서 m (=sqrt(M) or =floor(lnM+1)) 개의 개수만큼 랜덤하게 선택하는 시행을 내가 정한 트리모델 갯수만큼 반복한다 (Boostrapping과 같은 방법). 


이제 데이터셋과  변수들이 정해졌으므로 이를 이용해 미리 정해놓은 수의 의사결정나무들을 모두 학습시킨다. 학습방법은 기존 의사결정나무 학습법과 유사하다. ( 노드 분할함수를 이용해 각 노드에서의 정보획득량이 최대가 되도록 학습)




이제 각 트리마다 어떤 결과가 나왔을 것이다. 회귀트리라면 연속적인 값이 나왔을 것이고, 분류트리였다면 이산적인 값들이 나왔을것이다. 회귀트리라면 이 연속적인 값들을 취합해 평균을 내고 분류트리라면 어떠한 값이 가장 많이 나왔는디 투표를 하여 최종 앙상블모델의 결과를 도출해 낼 수 있다. 이 과정이 바로 Aggregating이다. 


이제 여기서 한가지 의문점이 생긴다. 그렇다면 랜덤포레스트는 성능평가를 어떻게 하는가? 

랜덤포레스트의 성능평가는 OOB(Out-Of-Bag) error 라는 수치로 파악을 한다. 사실 이를 뜯어보면 사실상 test데이터셋에서 성능평가를 하는 방식과 같. 트리들을 훈련시킨후에, 부스트랩핑한 데이터들과 원본데이터를 비교해 특정 observation(xi,yi)를 포함하지 않는 부트스트랩 데이터(약36.8%)을 따로 모은다. 이 예제들을 OOB예제들이라 불린다. 이 예제들을 따로 랜덤포레스트로 학습을 시켜 결과적으로 나온 투표들의 합이 OOB error 이다.

이 OOB가 중요한 이유는 Breiman[1996b]의 배깅된 분류기들의 오차측정에 대한 연구에서 OOB 예측방법이 훈련데이터셋의 크기와 같은 테스트셋을 써서 검증을 한 것만큼 정확하다는 것을 알려주는 실증적인 증거를 주었기 때문이다. 그러므로 OOB 측정을 통해 따로 test셋을 구성할 필요가 없어졌다.


실제 랜덤포레스트를 구성하는데 중요한 매개변수는 위에 말고도 더있다. 포레스트의 크기, 트리의 최대 허용 깊이, 임의성의 정도와 종류, 노드 분할 함수의 선택, 훈련 목적 함수의 정의 실제 적용에서의 특징 벡터의 선택 이 있다. 

위키피디아를 참고하기 바란다. 


참고 : http://stackoverflow.com/questions/18541923/what-is-out-of-bag-error-in-random-forests


'ML & DM > Ensemble Learning' 카테고리의 다른 글

Catboost  (0) 2018.12.10
A Gentle Introduction to XGBoost for Applied Machine Learning  (2) 2016.12.04