본문 바로가기
머신러닝, 딥러닝/Ensemble

[ML] 랜덤 포레스트(Random Forest)

by Deeppago 2022. 1. 8.

이전에 소개했던 의사결정 나무(Decision Tree)에 이어서 랜덤 포레스트에 대해 정리해보려고 한다.

의사결정 나무는 오버 피팅될 가능성이 높다는 약점을 가진다. 가지치기(Pruning)를 통해 트리의 최대 높이를 조절할 수 있지만 이로써는 오버 피팅을 충분히 해결할 수 없다. 

이러한 의사결정 나무의 오버피팅 문제를 해결하기 위한 전략으로 랜덤 포레스트(Random forest)가 있다.

파이썬 기반의 오픈 ML 라이브러리인 사이킷런(scikit-learn) 에서는 랜덤 포레스트를 활용한 분류를 위한 API를 제공한다. RandomForestClassifier가 그것이다.

아래 코드는 RandomForestClassifier를 사용하여 UCI 머신러닝 레파지토리 에서 제공하는 사용자 행동 인식(Human Activity Recognition)데이터 세트에 대한 예측 분류를 수행한 코드이다.

구현 코드 : Human Activity Recognition(Random Forest)

해당 코드에서 사용한 데이터는 http://archive.ics.uci.edu/ml/datasets/Human+Activity+Recognition+Using+SmartPhones로 접속하며 다운 받을수 있다.

-목차-

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

    1.1 앙상블 학습이란?

        1.1.1 배깅(Bagging)

        1.1.2 Bagging Features 

마치며

 

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

랜덤 포레스트는 같은 데이터에 여러 개의 의사결정 나무를 동시에 적용해서 학습 성능을 높이는 앙상블 기법 중 하나이다. 랜덤 포레스트는 여러 개의 의사결정 나무를 생성하고, 새로운 데이터 포인트를 각 트리에 동시에 통과시키며 각 트리가 분류한 결과에서 투표를 실시하여 가장 많이 득표한 결과를 최종 분류 결과로 선택한다.

https://medium.com/greyatom/a-trip-to-random-forest-5c30d8250d6a

 

랜덤 포레스트가 생성한 트리는 의사결정 나무이기 때문에 일부 트리는 오버피팅될 수 있지만, 많은 수의 트리를 생성함으로써 오버 피팅이 예측하는 데 있어 큰 영향을 미치지 못하도록 한다.  아래 그림에서 회색으로 표시된 각각의 모델은 오버 피팅되어있다고 하더라도 이러한 모델들의 결괏값의 평균인 빨간 선은 보다 안정적인 결과를 나타낸다.

https://en.wikipedia.org/wiki/Bootstrap_aggregating

랜덤 포레스트의 핵심은 앙상블(ensemble)과, 여러 다른 모델을 생성할 수 있는 배깅(Bagging)이다.

 

1.1 앙상블 학습이란?

앙상블 학습은 여러개의 분류기를 생성하고, 그 예측을 결합함으로써 보다 정확한 예측을 도출하는 기법을 말한다.

강력한 하나의 모델을 사용하는 대신 보다 약한 모델 여러 개를 조합하여 더 정확한 예측에 도움을 주는 방식이다.

앙상블 학습 유형은 일반적으로 보팅(Voting), 배깅(Bagging), 부스팅(Boosting) 세 가지 유형으로 나뉜다. 이 글에서는 랜덤 포레스트 학습 방법인 배깅(Bagging)에 대해 다뤄보도록 한다.

 

1.1.1 배깅(Bagging)

부트스트랩(Bootstrapping)을 통해 모델을 학습시키는 방법이다. 부트스트랩(Bootstrapping)은 통계학에서도 쓰이는 용어인데, 확률변수의 정확한 분포를 모르는 경우, 측정된 통계치의 신뢰도를 가늠할 방법이 없기 때문에 측정된 n개의 데이터중에서 중복을 허용하여 m개를 뽑고, 그들의 평균을 구하기를 여러 번 반복한다. 그럼 평균의 분포를 구할 수 있게 되고, 이로부터 95% 확률로 표본의 평균이 (a, b) 사이의 구간에 위치한다와 같은 언급을 할 수 있다.

 

랜덤 포레스트를 학습하는데도 부트스트랩(Bootstrapping)방식을 활용한다. 예를 들어 학습 데이터 세트에 총 1000개의 데이터가 있다고 가정해보자. 그러면 임의로 100개의 데이터를 선택해서 의사결정 나무를 만들 수 있을 것이다. 이러한 과정을 여러 번 반복하여 여러 개의 의사결정 나무를 생성하는데, 이때 데이터를 임의로 뽑는 방법은 복원 추출이다. 즉 뽑은 100개의 데이터중 중복이 있을수도 있고, 이전에 뽑았던 100개가 다음에 뽑을 때 다시 뽑힐 수도 있다. 

 

 

1.1.2 Bagging Features 

랜덤 포레스트를 학습하는 과정에서 트리를 만들 때 사용될 속성(Feature)들을 제한함으로써 각 트리들의 다양성을 줄 수 있다. 예를 들어 총 25개의 변수가 있다면 그중 5개의 변수만 뽑아서 살펴본 후 그중 정보 획득량이 가장 높은 것을 기준으로 데이터를 분할하여 의사결정 나무를 생성하는 것이다. 이러한 속성 선택은 무작위로 이루어지는데 보통 전체 속성 갯수의 제급근만큼 선택하는 것이 가장 좋다고 한다.

실제로 사이킷런에서 제공하는 RandomForestClassifier 클래스의 max_features 파라미터는 default값이 'auto'로 즉'sqrt'로 되어있다. 따라서 랜덤 포레스트의 트리를 분할하는 피처를 참조할때 전체 피처가 아니라 sqrt(전체 피처 개수)만큼 참조한다.

 

 

마치며

https://medium.com/greyatom/a-trip-to-random-forest-5c30d8250d6a

 

  • 랜덤 포레스트는 앙상블 머신러닝 모델이다. 
  • 랜덤 포레스트는 Bagging을 통해 n개 훈련 데이터셋을 생성하고,  n개의 의사결정 나무를 학습한다. 
  • 회귀 문제의 경우 n개의 의사결정 나무의 평균 예측치, 분류의 경우 다수결 투표방식으로 결과를 집계한다.
  • 의사결정 나무도 마찬가지 지만 범주형 데이터의 범주 범위가 클 경우 메모리 문제가 발생한다.

다음으로 부스팅의 개념과 부스팅을 활용한 모델인 AdaBoost와 GBM에 대해 정리해볼 계획이다.

'머신러닝, 딥러닝 > Ensemble' 카테고리의 다른 글

Light GBM  (0) 2022.01.09
XGBoost  (0) 2022.01.09
Boosting  (0) 2022.01.08

댓글