공부일기/Machine-Learning

랜덤 포레스트(Random forest)

pipiiiiii 2024. 7. 15. 15:40

랜덤 포레스트란

숲은 나무가 모여 이루어진 것처럼 랜덤 포레스트도 결정 트리가 모여 만들어진 것이다. 

물론 결정 트리만으로도 머신 러닝을 할 수 있지만 결정 트리의 단점인 과적합을 랜덤 포레스트로 해결할 수 있다. 

 

예를 들어 건강의 위험도를 예측하기 위해서는 많은 요소를 고려해야하는데 성별, 키, 몸무게, 운동량 등 30개의 수 많은 요소를 기반으로 건강의 위험도를 결정 트리(Decision Tree)를 이용해 예측하면 분명 과적합(overfitting)이 일어날 것이다.

그러나 랜덤 포레스트는 수 많은 요소 중 랜덤으로 5개의 요소만 선택해 하나의 결정 트리를 만드는 방식을 반복해 결정 트리 하나마다 예측값을 내놓고 이렇게 내린 예측 값 중 가장 많이 나온 값을 최종 예측값으로 정한다. 다수결의 원칙을 따르는 것이다. 

 

즉, 랜덤 포레스트는 하나의 거대한(깊이가 깊은) 결정 트리를 만드는 것이 아니라 여러 개의 작은 결정 트리를 만드는 것이다. 그리고 여러 개의 작은 결정 트리가 예측한 값들 중 가장 많은 값(분류일 경우) 혹은 평균값(회귀일 경우)을 최종 예측값으로 정하는 것이다. 

 

 

랜덤 포레스트의 장단점

장점

  • 분류 및 회귀 문제에 모두 사용이 가능하다.
  • 결측치를 다루기 쉽다.
  • 대용량 데이터 처리에 효과적이다.
  • 과적합 문제를 회피하고 모델의 정확도를 향상시킨다.
  •  분류 모델에서 상대적으로 중요한 변수를 선정하거나 Ranking하는 것도 가능하다. 

단점

  • 나무가 많을 경우 모델의 크기가 커져 복잡하고 해석이 어렵다.  

 

 

랜덤 포레스트 학습 방법

랜덤 포레스트는 앙상블 학습을 이용한다.

앙상블 학습이란 여러 개의 기본 학습 모델을 조합하여 더 강력한 모델을 만드는 기법으로 비유하자면 한 명의 전문가의 의견보다 여러 명의 전문가들의 의견을 종합한 쪽이 더 신뢰성이 높을 수 있다는 원리와 비슷하다. 

 

앙상블 학습의 주요 기법은 아래와 같다. 

  1. 보팅(Voting)
    보팅은 여러 개의 다른 종류의 기본 모델들의 예측을 결합하는 가장 간단한 형태의 앙상블 학습으로 크게 두 가지로 나뉜다. 
    • 하드 보팅(Hard Voting) : 각 모델의 예측 결과를 투표로 취합하여 가장 많은 표를 얻은 결과를 최종 예측값으로 사용한다. 
    • 소프트 보팅(Soft Voting) : 각 모델의 예측 확률을 평균내어, 가장 높은 확률을가진 결과를 최종 예측값으로 사용한다.      
  2. 배깅(Bagging)
    배깅은 'Bootstrap Aggregating'의 줄임말로, 원본 데이터셋으로부터 랜덤하게 샘플을 여러번 추출해( Bootstrap <부트 스트랩이란 주어진 데이터를 복원추출로 표본을 추출하고, 이를 이용해 각 표본의 통계량을 구하거나 모형을 훈련하는 것이다. 복원추출을 하기 때문에 같은 데이터가 여러번 나올수도 있고, 한 번도 나오지 않을 수도 있다.> ) 각 샘플로 모델을 개별적으로 학습시킨 후, 이들의 결과를 취합(Aggregating)하는 기법이다. 
    대표적인 알고리즘으로 랜덤 포레스트가 있다.  
  3. 부스팅(Boosting) 
    부스팅은 여러개의 약한 모델(Weak Learners)을 순차적으로학습시켜, 이전 모델의 오류를 개선하는 방식으로 진행된다. 약한 모델들을 점진적으로강화하여 하나의 강력한 모델로 만들어 나간다. 
    대표적으로는 AdaBoost, XGBoost 등이 있다. 

    부스팅 동작 원리
    • 부스팅은 여러 개의 분류기가 순차적으로 학습한다.(병렬 학습 불가능)
    • 이전 학습 시 예측이 틀린 데이터에 대해서 올바르게 예측할 수 있도록 다음 분류기에서는 틀린 데이터에 더 큰 가중치를 부여해 표본 추출 후 학습과 예측을 수행한다. 
    • 이전 모델에서 틀린 데이터를 좀 더 집중해서 모델에 투입해 교정을 이어간다.   

 

랜덤 포레스트는 앙상블 학습법 중 배깅 기법을 이용한다.  

랜덤 포레스트에서 배깅 기법을 이용해 작동하는 원리는 아래와 같다.

  • 부트스트랩 샘플링(Bootstrap Sampling) 
    원본 데이터셋에서 랜덤하게 샘플을 여러번 추출한다 
    이 때 샘플은 중복으로 추출이 가능하다. 
    위 그림으로 예를 들면 원본 데이터셋인 Original Dataset에서 Bootstrap1, 2, 3 등 여러 샘플을 추출하는 것을 알 수 있다. 
  • 특성 무작위 선택
    각 의사결정나무를 학습시킬 때, 모든 특성을 사용하는 것이 아니라 무작위로 선택해 학습한다.
    이를 통해 나무들 사이의 상관관계를 줄이고 다양성을 증가시킨다. 
    특성은 전체 특성의 제곱근의 수만큼 부트스트랩 샘플링하여 선택한다. 
  • 나무 생성
    각각의 부트스트랩 샘플과무작위로 선택된 특성을 사용하여 의사결정나무를 학습시킨다. 
  • 결과 취합 
    모든 의사결정나무의 예측을 취합하여, 가장 많이 등장하는 결(분류일 경우) 또는 평균(회귀일 경우)을 최종 예측 결과로 사용한다. 

랜덤 포레스트의 학습 과정을 그림으로 그리면 아래와 같다. 

 

 

랜덤 포레스트 평가 방법

랜덤 포레스트는 부트스트랩 샘플링을 할 때 중복을 허용하는 복원추출을 하기 때문에 훈련 데이터셋에 포함되지 않는 데이터가 생기게 된다. 위 그림에서는 Test Sets이 해당되는데 이런 데이터들을 Out-of-bag(OOB)이라고 하며, 이를 이용해 모델을 검증할 수 있다.  

 

OOB 데이터에 대한 예측 결과와 실제 값의 오차, 즉 OOB 오차를 이용해 랜덤 포레스트의 하이퍼 파라미터(개별 트리의 최대 깊이, 노드 분기를 위한 최소한의 샘플 수 등)를 조절해 OOB 오차를 최소화시킨다.

 

 

랜덤 포레스트 코드공부

https://github.com/DIB-PP/Machine-Learning

 

GitHub - DIB-PP/Machine-Learning

Contribute to DIB-PP/Machine-Learning development by creating an account on GitHub.

github.com

 

 

 

 

 

 

 

 

 

참고 사이트