yooni825 2024. 5. 27. 19:30

랜덤 포레스트의 개요 및 실습 

배깅 Bagging
: 같은 알고리즘으로 여러 개의 분류기를 만들어서 보팅으로 최종 결정하는 알고리즘

- 배깅의 대표적인 알고리즘 : 랜덤 포레스트 

 

랜덤 포레스트 

: 여러 개의 결정 트리 분류기가 전체 데이터에서 배깅 방식으로 각자의 데이터를 샘플링해 개별적으로 학습을 수행한 뒤 최종적으로 모든 분류기가 보팅을 통해 예측 결정하는 것 

랜덤 포레스트

- 개별적인 분류기의 기반 알고리즘 : 결정트리 

- 개별 트리가 학습하는 데이터 세트는 전체 데이터에서 일부가 중첩되게 샘플링된 데이터 세트 

- 랜덤 포레스트의 서브세트 Subset 데이터는 이러한 부트 스트래핑으로 데이터가 만들어진다.

부트 스트래핑 (bootstrapping) 분할 방식 
: 여러 개의 데이터 세트를 중첩되게 분리하는 것 
(배깅 Bagging이 bootstrap aggregating 의 줄임말)

 

EX) 원본 데이터의 건수 10개인 학습 데이터 세트에 랜던 포레스트를 3개의 결정 트리 기반으로 학습

-> n_estimators = 3으로 하이퍼 파라미터 부여 시 아래의 그림과 같이 생성

 

-> 랜덤 포레스트는 사용자 행동 인식 데이터 세트에 대해 약 92.37%의 정확도를 보여준다. 

 

랜덤 포레스트 하이퍼 파라미터 및 튜닝

트리 기반의 앙상블 알고리즘의 단점

- 하이퍼 파라미터가 너무 많으며, 튜닝을 위한 시간 소모가 크다. + 많은 시간 대비 예측 성능이 뛰어나지 X

n_estimators 
: 랜덤 포레스트에서 결정 트리의 개수를 지정
- Default = 10
- 많이 설정할수록 좋은 성능을 기대할 수 있으나 계속 증가시킨다고 성능이 무조건 향상 X
- 많아질수록 학습 수행 시간은 오래 걸린다

max_features 
: 결정 트리에 사용된 max_features 파라미터와 같다.
- 랜덤 포레스트의 트리를 분할하는 피처를 참조 시에 전체 피처 X -> sqrt(전체 피처 개수만큼 참조

max_deapth / min_samples_leat / min_samples_split
: 결정 트리에서 과적합을 개선하기 위해 사용되는 파라미터가 랜덤 포레스트에도 동일 적용

 

GridSearchCV를 이용해 랜덤 포레스트의 하이퍼 파라미터를 튜닝

이런 오류가 발생.... 아마 튜닝 시간 때문이지 않을까.. 일단 진행해봅시다..

 

책의 결과에 따르면, 

최적 하이퍼 파라미터:
{'max_depth': 16, 'min_sampels_leaf': 6, 'min_samples_split': 2, 'n_estimators':100}
최고 예측 정확도 : 0.9165

이런 식의 결과가 나온다고 합니다.....;;;; 

 

위에서 추출된 최적 하이퍼 파라미터로 다시 RandomForestClassifier를 학습시키면,

이런 결과가 나옵니다.

 

feature_importances_ 속성 이용하여 해당 피처의 중요도 확인 

 

위의 결과에 따르면, angle(X,gravityMean), tGravity(Acc-mean()-Y, tGravityAcc-min()-X 등이 높은 피처 중요도를 갖는다는 것을 알 수 있습니다!!