[파이썬 머신러닝 가이드] 분류 - Random Forest

랜덤포레스트

결정 트리를 기본 모델로 이용하는 앙상블 기법

여러 개의 결정 트리 분류기가 전체 데이터에서 배깅 방식으로 각자의 데이터를 샘플링해 개별적으로 학습을 수행한 뒤 최종적으로 모든 분류기가 보팅을 통해 예측 결정을 하게 됨.

bootstrapping(샘플을 여러개 뽑음) + aggregating(각 모델을 학습시킨 결과물 집계)

+OOB(Out-Of-Bag)

: 샘플링 과정에서 선택되지 않은 데이터 → 모델 검증에 이용 가능

→ OOB 샘플 (전체의 36.8%)로 모델 검증

어떤 한 샘플이 추출되지 않을 확률 = 36.8%

학습 도중 생성한 tree에 OOB 데이터를 넣고 accuracy나 error rate 등을 측정하면 학습이 잘 진행되고 있는지, overfitting은 없는지 등의 여부를 확인할 수 있음.

OOB score를 사용하면 별도의 cross-validation 과정을 거치지 않아도 됨. OOB 자체로 cross-validation 효과가 있기 때문!

별도의 validation data를 할당해서 성능을 평가하는 것도 좋지만, 데이터가 적은 경우 자투리 데이터인 OOB를 활용하면 데이터 사용 효율을 높일 수 있음.

데이터의 개수 N이 충분히 크다면 sub data에 포함되지 않은 데이터의 비율은 약 36.8% 정도 됨.

따라서 학습데이터에서 36.8%의 비율로 validation data를 할당한 것과 동일한 효과를 볼 수 있음→ 데이터를 36.8% 정도 절약할 수 있다는 의미

 

  • 부트스트랩 데이터셋으로 만들어진 기본 결정트리 모델들을 합치는 과정

- 회귀 -> 결과의 평균

- 분류 -> 다수결로 가장 많은 모델이 선택한 것

 

  • random subspace

: 원래 변수들 중에서 모델 구축에 쓰일 입력 변수를 무작위로 선택

분기할 때, 어떤 입력을 고를까? x1 ~ x8 있다면, random하게 4개 뽑아서 이것들만 조사. 학습 룰에 따라(후보만 랜덤인것임) 4개 중에 하나 뽑고, 분할된 노드에서 동일한 과정 반복.

분기하는 순간에 어떤 입력을 보고 쪼갤지 결정할건데, 그 쪼개려는 대상을 한번 랜덤으로 부분집합 뽑아놓고 선택, → 같은 데이터라도 다른 트리 가능.

 

  • generalization error

p: decision tree 사이의 평균 상관 관계( 낮을 수록 좋음. 독립될수록 좋은거니까)

s:올바로 예측한 트리와 잘못 예측한 트리 수 차이의 평균(기본 성능, 클수록 좋음. 잘 맞춘게 많다는 거니까)

s가 커지면, (1-s2)/s2 은 작아짐

bagging과 random subspace로 모델 사이의 상관관계(p) 감소

개별 tree의 정확도가 높고, 각각의 독립성이 높을수록 전체 성능 증가

 

  • 하이퍼 파라미터

- n_estimators : 결정 트리의 수 (클수록 성능과 계산시간 올라감)

- max_features : 노드 분할 시 무작위로 선택되는 변수의 수

(작을수록 다양한 트리 생성, 크면 같은 특성을 사용하는 트리가 많아져 다양성이 감소)

- max_depth : 각 트리의 최대 깊이

- min_samples_leaf : 각 리프 노드에서의 최소 데이터 수

- min_samples_split : 노드를 분할하기 위한 최소한의 샘플 데이터 수