RandomForest Algorithm

2022. 12. 21. 17:04ML

Decision Tree

  • 예측 공간을 몇 개의 영역으로 계층화(stratifying), 그룹화(segmenting)
  • 특정질문(조건)에 따른 Data들을 분리
  • 조건에 따라 계속 Data들을 분리하면서 분석하기 때문에 매우 간단하고 해석이 용이함

하지만 예측을 위해 다수의 트리를 의사 결정에 활용해야 하고

다른 지도학습의 기법들에 비해 정확도가 떨어지는 경향이 존재합니다.

 

그래서 대부분의 사람들이

정확도가 많이 떨어지는 점을 개선하기 위하여 앙상블 기법을 많이 사용합니다.

 

앙상블 기법(Ensemble)

:여러 개의 모델을 학습시켜 모델들의 예측결과들을 이용해 하나의 모델보다 더 나은 값을 도출하는 학습

그 중에서도 RandomForest와 관련된 2가지 기법을 살펴보겠습니다.

  • Bagging/Pasting
  • RandomForest

1.Bagging(Bootstrap aggregating)/Pasting

Bagging: 샘플을 여러 번 뽑은 후 각 모델을 학습시켜 결과물을 집계하는 방식(Bootstrap: random sampling을 의미)

Bagging: 샘플링시 중복을 허용 / Pasting: 샘플링시 중복을 허용하지 않음

중복 샘플링을 허용함으로써 특정한 노이즈에만 종속적이지 않은 모델을 만들어 낼 수 있습니다.

 

 

위 이미지처럼 무작위로 샘플링을 진행해서 학습을 진행하는데

모든 학습이 끝나면 모든 예측기의 예측을 모아서 새로운 샘플에 대한 예측을 만듭니다.

(분류에 관해서는 통계적 최빈값을 사용하고 회귀에 관해서는 평균을 계산)

 

OOB 평가(Out Of Bagging)

Bagging을 사용하게 되면 샘플링시 중복을 허용하기 때문에 사용되지 않는 data가 발생하는데

이 data들을 모아서 validation set(검증 세트)로 많이 활용합니다.

 

2. RandomForest

오늘의 주제로 Decision Tree에 Bagging을 적용한 앙상블을 뜻합니다.

Bagging과 유사하지만 트리의 노드를 분할할 때 전체 특성 중에서 최선의 특성을 찾기보다는

선택한 특성 후보 중에서 최적의 특성을 찾는 식으로 무작위성을 추가합니다.(입력변수의 수를 제한)

 

RandomForest의 장점은 변수간의 상대적 중요도를 측정하기 쉽다는 것입니다.

 

예를 들어 어떤 변수가 눈이나 비에 영향을 미치는지 확인해보기 위한 data가 있습니다.

위 data는 경기도 특정 지역들에서의 기상 상황에 따른 눈이나 비를 예측하기 위해 정리를 했는데요.

눈이나 비가 올 경우 Label을 1로 처리하여서 변수들의 영향을 파악하려고 하였습니다.

 

변수들의 중요도를 정리하기 위해 RandomForest 알고리즘을 사용해봅시다.

 첫 번째로 필요한 모듈들과 파일들을 불러와줍니다.

두 번째로 위에서 불러온 파일들 중에서 하나의 파일을 불러오고 결측치를 채워줍니다.

그 다음 변수로 사용할 부분들을 x,label을 y라고 설정해줍니다.

각각 train_set과 test_set을 나누고 RandomForest함수를 불러와서 data를 학습시키면 위와 같이 정확도도 체크해볼 수 있습니다.

마지막으로 변수의 상대적 중요도를 시각화하는 방법입니다.

시각화하게 되면 아래 그림과 같이 총합을 1로 하는 변수마다의 상대적 중요도를 쉽게 알아볼 수 있습니다.

RandomForest에도 필요에 따라 사용하는 Hyper-parameter가 존재하는데요

Decision Tree와 동일하게

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

min_samples_leaf: 말단 노드의 샘플 수

max_features: 최적의 분할을 위해 고려할 최대 feature 개수

가 있고 추가적으로

n_estimators: 의사결정나무의 개수

가 있습니다.

 

위의 parameter들을 이용하여 좀 더 구체적으로 모델들을 설정하고

원하는 방향으로 학습의 진행이 가능합니다.

'ML' 카테고리의 다른 글

MLP와 RNN 알아보기  (0) 2023.01.09
XGBOOST Algorithm  (0) 2023.01.09
머신러닝 공부를 위한 두 번째 정리  (0) 2022.12.11
머신러닝 공부를 위한 첫 번째 정리  (1) 2022.12.11