앙상블(Ensemble) – 랜덤 포레스트(Random Forest)

1. 랜덤 포레스트(Random Forest)란?

– 2001년에 Leo Breiman에 의해 처음 소개된 기법으로 의사결정 트리의 단점을 개선하기 위한 알고리즘 중 가장 지배적인 알고리즘
– 부트스트랩 (bootstrap)표본을 이용할 뿐 아니라 변수에 임의성을 더한 방법을 말하며 앙상블 이론이 갖는 장점을 극대화하여 예측 및 분류 정확도를 기존의 방법보다 개선하며 안정성을 얻음.
– 랜덤포레스트의 성능평가는 OOB(Out-Of-Bag) error라는 수치로 파악함.

* Out-of-Bag 샘플은 부트스트랩 샘플링 과정에서 추출되지 않은 데이터들을 말하며, 이 데이터들을 따로 랜덤포레스트로 학습을 시켜 나온 결과가 OOB error임.
* OOB예측방법이 테스트셋을 사용하여 검증하는 것 만큼 정확하므로 따로 테스트 셋을 구성할 필요가 없어졌고, 따라서 OOB샘플들은 주로 평가용 데이터에서의 오분류율을 예측하는 용도 및 변수 중요도를 추정하는 용도로 많이 이용됨.

– 랜덤 포레스트(Random forest)의 흐름도는 아래 그림과 같음.


– 랜덤포레스트는 데이터에서 부트스트래핑 과정을 통해 N개의 샘플링 데이터 셋을 생성함.
– 각 샘플링된 데이터 셋에서 임의의 변수를 선택하는 과정을 진행함. 변수의 갯수를 선택하는 방법은 M개의 총 변수들 중에서 sqrt(M) 또는 M/3개의 개수만큼 변수들을 랜덤하게 선택하고 나머지 변수는 모두 제거하는 과정 반복함.
– 변수선택이 진행된 의사결정트리들을 종합하여 앙상블 모델을 만들고  OOB error를 통해 오분류율을 평가함.

2. 랜덤 포레스트(Random Forest)의 목적

– 의사결정트리는 학습데이터에 따라 매우 달라지기 때문에 일반화하여 사용하는데 어려움이 있음.
– 하지만 랜덤포레스트는 변수선택의 임의성과 배깅을 통해 각 트리들의 예측들이 비상관화 되게하여 일반화 성능을 향상시켜 이러한 문제점을 해결하였으며 노이즈가 포함된 데이터에 이용하기 좋음.
– 또한 데이터 셋 내의 데이터 분포가 고르지 않은 경우에 사용됨.

3. 배깅(Bagging)과의 공통점과 차이점

– 배깅의 경우 전체 데이터에서 여러 샘플링 데이터를 추출하여 서로 다른 학습 분류기를 통합하는 방법을 말함.
Bagging

– 배깅과 랜덤포레스트는 부트스트랩(Bootstrap)과정이 진행된다는 점에서 공통점을 가짐.

* 부트스트랩이란 가설검증(test)을 하거나 계산하기 전에 random sampling을 적용하는 방법을 말함.
* 배깅과 랜덤포레스트에서 부트스트랩은 두 가지의 이유로 사용되며 데이터 셋 내의 데이터 분포가 고르지 않은 경우, 과적합을 줄이는 경우를 말함.
* 먼저, 데이터 셋 내의 데이터 분포가 고르지 않은 경우를 설명하면 개와 고양이를 구분하는 분류기를 학습시키는데, 100장의 개 이미지와 1장의 고양이 이미지가 있다면 분류기는 고양이의 error는 무시하는 방향으로 학습되기 쉬움. 이런 경우에 부트스트랩을 이용하여 고양이의 데이터 수를 늘려 학습을 시킴.
* 두 번째 이유는 과적합을 줄여 준다는 것임. 부트스트랩을 이용한다며 충분하지 않은 데이터를 이용하여 여러 개의 앙상블 모델을 만들 수 있고, 이를 통해 각 모델들이 과적합되어있더라고, 그들을 평균내어 과적합을 상쇄시켜 일반화된 모델을 만들 수 있음.

                                                                                     출처 : wikipedia

– 랜덤 포레스트는 변수선택 과정을 적용했다는 것이 큰 차이점임.
– 랜덤 포레스트가 랜덤하게 변수를 추출하는 이유는 배깅을 통해 얻은 트리들간의 상관성 때문인데, 소수의 변수가 결과에 강학 예측 성능을 보인다면 여러 개의 분류기를 이용하여 학습을 시켜도 결국 소수의 변수가 중복되어 선택되어 결과적으로 트리들이 상관화가 되는 결과를 얻음.
– 즉, 변수선택 과정이 없는 배깅의 경우 지배적인 변수가 포함 되어 있다면 뿌리 노드가 변하지 않아 트리가 유사한 형태로 학습됨.
– 따라서 분류기준의 대표성을 띄는 변수를 찾기 위해 변수선택 과정을 진행함.

4. SAS 실습

– 데이터 다운로드 : letterrecognition.zip (0 downloads) (압축 해제 후 C:\Users\사용자 이름\Documents\My SAS Files\9.4 에 저장)

1) 데이터 설명

– UCI(https://archive.ics.uci.edu/ml/datasets/Letter+Recognition)에서 제공하고 있는 문자 인식 데이터
– 랜덤하게 20개의 서로 다른 폰트를 이용한 A부터 Z까지의 26개 영문자들의 픽셀 데이터를 이용하여 문자를 인식하는 Computer Vision 문제를 해결하기 위한 데이터

variable

2) 데이터 불러오기 및 정제

– 데이터 불러오기 마법사 실행 후, 생성된 데이터 파일을 작업영역창으로 드래그(자세한 내용은 http://www.birc.co.kr/2017/01/11/knnk-nearest-neighbor/ 참고)
– 변수의 역할을 정하기 위해 데이터 노드 오른쪽 클릭 후 ‘변수 편집’ 클릭

variable edit

– lettr의 역할을 ‘Target’으로 지정

variable edit2

– ‘수정’탭의 ‘변수 변환’노드를 작업영역창으로 드래그

Transfer Drag

– Input 변수들이 대부분 Interval이므로, 예측력을 높이기 위해 변수타입을 변환해야함
– ‘변수변환’ 노드의 옵션 중 Interval 입력을 Best로 설정한 후 변수변환 노드 실행

transfer option

– 출력결과를 살펴보면 대부분의 변수들이 Optimal Binning방법을 이용하여 범주화 된 것을 알 수 있음

transform result

– 데이터를 훈련용 데이터와 평가용 데이터로 분류하기 위해 표본추출 탭에 위치한 ‘데이터 분할’ 노드를 작업 영역 창으로 드래그

partition

3) 랜덤 포레스트

– 랜덤 포레스트 분석을 수행하기 위해 HPDM 탭에서 ‘HP 포리스트(Random Forest)’ 노드를 작업 영역창으로 드래그

rfdrag

– 기타 분석 방법론(의사결정나무, 그래디언트 부스팅)과 비교하기 위해 모델 탭의 ‘의사결정트리’ 노드와 ‘그래디언트 부스팅’ 노드를 작업영역 창으로 드래그 한 뒤, 데이터 분할 노드와 연결

dt_boosting_drag

– 각 모델의 성능을 비교하기 위해 평가 탭의 ‘모델 비교’ 노드를 작업 영역창으로 드래그한 뒤 실행

comparison_20170206_3

4) 결과 해석

– 모델 비교 노드의 결과창을 살펴보면 HPDMForest 기법의  Missclassification Rate 값이 0.2404로 Boosting 기법의 Missclassification Rate의 값인 0.4359와 Tree의 Missclassification Rate의 값인 0.6137보다 낮으므로 랜덤 포레스트 모델의 정확도가 더 높다는 것을 알 수 있음
result_20170206_4

댓글 남기기