AI/ML

[ML] 결정 트리와 앙상블 기법 - 2. 랜덤 포레스트 (Random Forest)

jooeun 2024. 7. 31. 00:02

01. 결정 트리와 앙상블

결정 트리의 큰 단점

 

The Elements of Statistical Learning 책에서

'결정 트리는 이상적인 머신 러닝 모델이 되기 힘든 한 가지 특징을 갖는다. 바로 부정확성이다.'

성능이 안좋다..

 

하지만 결정 트리를 응용하면 성능이 좋은 다른 모델을 만들어낼 수 있다 !

 

앙상블(ensemble) : 여러 독립적인 객체들이 만들어내는 조화로운 단체

 

하나의 모델을 쓰는 대신, 수많은 모델들을 사용해 종합적인 판단을 하는 것

수많은 모델들을 만들고, 이 모델들의 예측을 합쳐서 종합적인 예측을 하는 기법

 

모델을 100개... 만든다 -> 각 모델의 결과를 종합해 최종 결과를 예측한다.

 

 

02. 랜덤 포레스트 1: Bagging

랜덤 포레스트 : 트리 모델들을 임의로(random) 많이 만들어서 다수결 투표로 결과를 종합하는 알고리즘

 

Bootstrapping : 갖고 있는 데이터 셋으로 다른 데이터 셋을 만들어내는 방법

 

Bootstrap 데이터 셋

기존 데이터를 그대로 가져와서 사용 ! (일부 중복, 순서 변경, 일부 안 가져오기도 함)

 

 

왜 Bootstrap 데이터 셋을 사용하나 ? 모든 모델을 저확히 똑같은 데이터 셋으로 학습시키면 결과 다양성이 떨어질 수 있기 때문에 이를 방지하기 위해, 각 모델을 임의로 만들어준 Bootstrap 데이터 셋으로 학습시켜준다 ~

 

 

 

Bootstrap 데이터로 결정을 합치는 앙상블 기법을 Bagging이라 함

랜덤 포레스트는 bagging을 사용하는 여러 알고리즘 중 하나의 예시

 

 

 

04, 랜덤 포레스트 2 : 임의로 결정 트리 만들기

 

Bootstrap 데이터 셋에서 임의로 두 속성 선택하여 루트 노드를 결정(지니 불순도가 낮은 값 선택). 

또 다른 임의 속성 2개 선택하여 다음 노드 결정..

 

결정 트리 임의로 만들기

bootstrapping을 사용해서 임의로 데이터 셋 만든다.

결정 트리를 만들 때 속성을 임의로 고르면서 만든다.

이를 반복하면 조금씩 다른 수많은 결정 트리를 만들 수 있다 ~

 

랜덤 포레스트에서는 최종 결과는 트리의 결과의 다수결로 결정한다 !

 

 

06. scikit-learn으로 랜덤 포레스트 쉽게 사용하기

 

from sklearn.ensemble import RandomForestClassifier

 

model = RandomForestClassifier(n_estimators=100, max_dept=4)  : 결정 트리 몇개 만들지(default=10)

이후 학습 방법은 다른 모델과 동일

 

동일하게 결정 트리를 사용하기 때문에 속성 중요도 계산 가능

model.feature_importances_