코딩일기

[Ensseble] RandomForest 이해하기 본문

Code/머신러닝(ML)

[Ensseble] RandomForest 이해하기

daje 2021. 2. 20. 00:33
728x90
반응형

 

 

 

안녕하십니까 다제입니다. 

 

오늘은 RandomForest에 대해서 알아보고자 합니다. 

 

해당 포스팅은

1) 고려대학교 강필성 교수님의 수업자료

2) 코드스테이츠 부트캠프 

3) StatQuest 유튜브

등을 참고하여 제가 이해한 내용을 바탕으로 포스팅을 진행하였음을 사전 안내드립니다. 

※ 이미지 출처 : github.com/pilsung-kang/Business-Analytics-ITS504-

 

 

RandomForest에서는 bagging과 달라진 점은 

트리를 형성 할 때 feature를 모두 사용하지 않는다는 점입니다. 

 

잉? 

이게 무슨 말이야?

 

feature를 모두 사용해서 만들어야 조금이나마 강력한 모델을 만들 수 있잖아 

라고 반문하실 수 있습니다. 

 

그런데 RandomForest에서는 강한 모델을 만드는 게 목적이 아닙니다. 

하나라도 잘 분류하는 모델을 여러개 만드는 것이 목적입니다. 

 

 

간단한 예를 들어드리겠습니다. 

A와 B팀이 있습니다. 

 

이들은 코딩 / 영어 / 수학 과목에 대해서 시험을 보았습니다. 

 

 

평균의 관점으로 A팀과 B팀을 비교해보면 

A팀이 모두 우위에 있다는 사실을 알 수 있습니다. 

 

그렇다면 

각각의 과목 관점으로 A팀과 B팀을 비교해보면 

모두 B팀이 우위에 있다는 사실을 관측할 수 있습니다. 

 

평균 관점으로 보는 것이 Bagging을 통해 만들어진 1개의 모델이고 

과목 관점으로 보는 것이 RandomForest을 통해 만들어진 1개의 모델이라고 생각하시면 됩니다. 

 

B팀은 전체적으로 약하지만, 개별적으로 뛰어난 성능을 가진 

개별모델로 앙상블을 만들 때 일반화성능이 높은 모델을 만들 수 있다는 사실을 알게 되었던 거죠!

 

 


 

** 목차 ** 

 

 -. RandomForest의 출연배경

 

 -. RandomForest의 진행절차 & 하이퍼파라미터  

 

 -. RandomForest장점 & 단점

 

 


** 결론 **

RandomForest는 

 

모든 feature를 다 사용하는 것이 아니라 랜덤하게 feature를 선택하여 

Bagging 과정을 통해 다소 예측에 오류가 있는 weakmodel의 Decision Tree를 생성합니다.

 

이렇게 생성된 RandomForest는 때때로 편향을 약간 증가시키는 대신

다양한 Decision Tree의 결합을 통해 분산을 줄일 수 있고 전반적으로 일반성능을 높일 수 있는 앙상블 모델입니다. 

 

위에서 다소 예측 오류가 있는 이라는 표현을 사용했는데 

이부분에 대해서 추가적으로 설명을 드리자면 

RandomForest feature를 모두 선택하지 않기 때문에

한 노드에서 잘못 분류를 하면 하부 노드에서도 계속 영향을 주는 특징이 있다는 이야기입니다. 

 

 


 

1. 출연배경

 

Bagging을 통해 모델을 만들면 편향은 줄고, 분산은 다소 증가하는 모델을 만들 수 있다. 

그러다보니 반대로 편향은 늘리고, 분산을 줄이는 방법을 생각하다가 나오게 된게 아닌가?

하는 추측을 해봅니다. 

 

RandomForest가 편향은 늘고 분산이 감소하는 현상이 일어나는지에 대해서 간단히 설명드리면

feature를 모두 사용하지 않기 때문에 퍼저나가는 가지가 Bagging에 비해 한정적이 겠지요?

또한, feature를 다 사용하지 않기에 분류에 대한 오류도 증가할 것입니다. 

그렇기 때문에 데이터들에 대한 분산이 증가하게 됩니다. 

 

 


 

2. RandomForest의 진행절차 

 

 -.RandomForest의 진행절차 

    * Bagging(복원추출)을 통해 독립된 다양한 data set을 생성한다.

    * 생성된 data set을 통해 단일 Decision Tree를 생성한다. 

    * 단일 Decision Tree를 내가 원하는 만큼 만들어 Enssemble model을 만든다. 

    * Bagging(복원추출) 시, 추출되지 않는 OOB데이터를 검증용으로 사용한다. 

    * hyperparameter로 성능을 조정 또는 grideSearch를 통해 최적의 hyperparameter를 찾는다.

    * 최종적으로 test set를 통해 score를 확인한다. 

    * 가장 영향을 많이 준 feature를 feature importance로 확인해본다. 

 

 

 -. 하이퍼파라미터 설명

n_estimators -. 결정트리의 갯수를 지정

-. Default = 10
 무작정 트리 갯수를 늘리면 성능 좋아지는 것 대비 시간이 걸릴 수 있음
min_samples_split -. 노드를 분할하기 위한 최소한의 샘플 데이터수
→ 과적합을 제어하는데 사용

-. Default = 2
→ 작게 설정할 수록 분할 노드가 많아져 과적합 가능성 증가
min_samples_leaf -. 리프노드가 되기 위해 필요한 최소한의 샘플 데이터수
-. min_samples_split과 함께 과적합 제어 용도
-. 불균형 데이터의 경우 특정 클래스의 데이터가 극도로 작을 수 있으므로 작게 설정 필요
max_features -. 최적의 분할을 위해 고려할 최대 feature 개수
-. Default = 'auto' (결정트리에서는 default가 none이었음)
-. int형으로 지정 →피처 갯수 / float형으로 지정 →비중
-. sqrt 또는 auto : 전체 피처 중 √(피처개수) 만큼 선정
-. log : 전체 피처 중 log2(전체 피처 개수) 만큼 선정
max_depth -. 트리의 최대 깊이

-. default = None
-. 완벽하게 클래스 값이 결정될 때 까지 분할 또는 데이터 개수가 min_samples_split보다 작아질 때까지 분할
 깊이가 깊어지면 과적합될 수 있으므로 적절히 제어 필요
max_leaf_nodes
-. 리프노드의 최대 개수

 

 


 

 

3. RandomForest 장점 & 단점

장점

  • 알고리즘이 간단한 편이다. 
  • Training이 빠르다. 
  • 편향이 Bagging만 할때보단 줄어든다. 

단점

  • memory consumption이 많고 느리다.
  • 분산이 증가한다. 

 

 

지금까지 RandomForest에 대해서 살펴보았습니다. 

코드까지 직접 다루지 못한 점 양해 부탁드립니다. 

 

감사합니다.

728x90
반응형
Comments