[파머완] ch4.4 Random Forest

­반소희·2022년 6월 29일
1

랜덤 포레스트는 앙상블 배깅 방법의 대표적인 알고리즘이다. 배깅은 바로 이전 글에서 정리한 보팅과는 다르게 여러 개의 분류기를 만들어서 최종 예측을 하는 알고리즘이다. 해당 글에서는 랜덤 포레스트에 대해 정리한다.

ch4.4 Random Forest (랜덤 포레스트)

  • Random Forest (랜덤 포레스트)
    랜덤 포레스트는 결정 트리를 기반으로 하기 때문에 쉽고 직관적인 장점이 있다. 여러 개의 결정 트리 분류기가 전체 데이터에서 배깅 방식으로 각자의 데이터를 샘플링 (부스스트래핑 Bootstrapping 분할 방식, 데이터 중첩 허용) 하여 개별적으로 학습한 뒤 최종적으로 모든 분류기가 보팅 (soft, hard) 을 통해 예측 결정을 하게 된다.

  • 랜덤 포레스트 프로세스

    • 전체 학습 데이터 중 데이터 샘플링 수행 (부스스트래핑 분할 방식 이용, 서브 데이터셋의 수는 전체 데이터 수와 동일, 중첩 허용)

      • 전체 데이터셋 예 - [1, 2, 3, 4, 5, 6, 7, 8, 9]
      • 서브 데이터셋 예 - [1, 2, 2, 2, 3, 4, 5, 5, 6]
      • 하이퍼 파라미터인 n_estimators 값 만큼 서브 데이터셋이 생성됨
    • 같은 여러 개의 알고리즘을 이용하여 개별적인 학습 수행

    • 보팅 (예 - 소프트 보팅) 을 통한 최종 예측 결정

  • 사이킷런의 RandomForestClassifier 클래스를 이용하여 구현할 수 있다.

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

rf_clf = RandomForestClassifier(random_state=0, max_depth=8)
rf_clf.fit(X_train, y_train)
pred = rf_clf.predict(X_test)
accuracy = accuracy_score(y_test, pred)

ch4.4 랜덤 포레스트 하이퍼 파라미터

  • n_estimators
    • 랜덤 포레스트에서 결정 트리의 개수를 지정하는 값 = 서브 데이터셋 수를 지정하는 값
  • max_features
    • 결정 트리의 max_features와 동일, 단, 디폴트 값은 auto 즉 sqrt임, 즉, 피처가 16개라면 분할을 위해 4개만 참조함
  • 아래와 같은 이외의 하이퍼 파라미터는 결정 트리 하이퍼 파라미터와 동일함
  • max_depth
  • min_samples_leaf
  • min_samples_split

ch4.4 하이퍼 파라미터 튜닝

  • GridSearchCV

GridSearchCV는 교차 검증과 최적 하이퍼 파라미터 튜닝을 한 번에 할 수 있도록 도와주는 API이며, 이전에 정리한 바 있다. 간단하게 정리하면,
1) cross_validation을 위한 학습/테스트 세트 자동 분할 (단, cv = 교차 검증을 위해 분할되는 폴드 수)
2) 하이퍼 파라미터 그리드에 기술된 모든 파라미터 순차적으로 적용
3) 최적의 파라미터 찾음

from sklearn.model_selection import GridSearchCV

params = {
    'n_estimators':[100],              ## 하이퍼 파라미터 n_estimators, 100개의 서브 데이터셋 (100개의 분류기 생성)
    'max_depth':[6, 8, 10, 12],        ## 하이퍼 파라미터 max_depth, 트리 깊이 제한, 과적합 방지
    'min_samples_leaf':[8, 12, 18 ],   ## 하이퍼 파라미터 min_samples_leaf
    'min_samples_split':[8, 16, 20]    ## 하이퍼 파라미터 min_samples_split
}

## RandomForestClassifier 객체 생성 후 GridSearchCV 수행
## cv = 교차 검증을 위해 분할되는 폴드 수
## n_jobs = RFClassfier과 GridSearchCV에 -1 파라미터 값을 추가하여 모든 CPU 코어를 이용한 학습 수행

rf_clf = RandomForestClassifier(random_state=0, n_jobs=-1)
grid_cv = GridSearchCV(rf_clf, param_grid=params, cv=2, n_jobs=-1)
grid_cv.fit(X_train, y_train)

print('최적 하이퍼 파라미터:\n', grid_cv.best_params_)
print('최고 예측 정확도: {0:.4f}'.format(grid_cv.best_score_))

ch4.4 피처 중요도 알아보기

RandomForestClassifer도 결정 트리와 마찬가지로 피처 중요도를 확인할 수 있다.
참고 - 피처 중요도 시각화

요약

랜덤 포레스트는 배깅의 대표적인 알고리즘이다. 부스스트래핑 분할 방식을 이용하여 샘플링을 한 후, 여러 개의 분류기를 학습시켜 보팅을 통한 최종 예측을 반환한다. n_estimators, max_depth 등의 하이퍼 파라미터가 있으며 GridSearchCV를 이용하여 튜닝이 가능하다.

References

파이썬 머신러닝 완벽 가이드 교재

profile
행복한 소히의 이것저것

0개의 댓글

관련 채용 정보