코딜기

[Python/ML] 랜덤 포레스트(Random Forest) Bagging Ensemble 본문

ML & DL Process/Build & Train Model

[Python/ML] 랜덤 포레스트(Random Forest) Bagging Ensemble

코딜기 2022. 3. 7. 22:25
반응형

랜덤 포레스트 (Random Forest)란 무엇일까요?

  • 랜덤 포레스트는 분류, 회귀 문제에 모두 사용할 수 있는 강력한 모델입니다.
  • 이전 포스팅에서 다뤘던 의사결정 나무를 여러개 사용하여 문제를 해결하는 방식으로 작동합니다.
  • 랜덤 포레스트는 의사결정 나무가 여러개 모인 숲입니다. (의사결정 나무의 앙상블 모델)
  • Decision Tree는 나무 하나로 예측을 했다면 Random Forest는 여러 나무를 통해 종합된 결과를 바탕으로 예측합니다.
  • 과적합이 될 가능성이 높은 의사결정 나무의 단점을 보완한 모델입니다.
  • 학습 데이터의 부분집합을 랜덤하게 만들어 의사결정 나무를 구축하는 배깅(Bagging) 계열의 트리 모델입니다.

 

 

  • 분류 모델에서는 각 트리의 결과값의 다수결로 최종 분류가 이루어집니다.
  • 회귀 모델에서는 각 트리의 결과값의 평균값으로 최종 분류가 이루어집니다.

배깅 기법을 통해 여러 의사결정 나무를 만들고, 각각 트리의 결과를 종합하여 예측을 진행합니다.


Random Forest의 대표적인 파라미터

  • n_estimators (int) : 내부에서 생성할 결정 트리의 개수
  • crierion (str) : 정보량 계산 시 사용할 수식 (분류 모델 : gini / entropy, 회귀 모델 : mse / rmse)
  • max_depth (int) : 생성할 트리의 높이
  • min_samples_split (int) : 분기를 수행하는 최소한의 데이터 수
  • max_leaf_nodes (int) : 리프 노드에서 가지고 있을 수 있는 최대 데이터 수
  • random_state (int) : 내부적으로 사용되는 난수값
  • n_jobs (int) : 병렬처리에 사용할 CPU 수
  • class_weight (dict) : 학습 시 클래스의 비율에 맞춰 손실값에 가중치를 부여 (분류 모델에서만 쓰임)

Python을 통한 모델 적용

1. 분류 문제에서의 랜덤 포레스트

  • 기본 파라미터 설정으로 진행한 Random Forest Classification
from sklearn.ensemble import RandomForestClassifier

# RandomForestClassifier 모델 선언 후 Fitting
rfc = RandomForestClassifier()
rfc.fit(x_train, y_train)

# Fitting된 모델로 x_valid를 통해 예측을 진행
y_pred = rfc.predict(x_valid)

2. 회귀 문제에서의 랜덤 포레스트

  • 기본 파라미터 설정으로 진행한 Random Forest Regression
from sklearn.ensemble import RandomForestRegressor

# RandomForestRegressor 모델 선언 후 Fitting
rfr = RandomForestRegressor()
rfr.fit(x_train, y_train)

# Fitting된 모델로 x_valid를 통해 예측을 진행
y_pred = rfr.predict(x_valid)

3. Feature Importance

  • 트리 기반 모델은 트리를 분기하는 과정에서 어떤 변수가 중요한지에 대한 변수 중요도를 살펴볼 수 있습니다.
feature_importance = pd.DataFrame(rfc.feature_importances_.reshape((1, -1)), columns=x_train.columns, index=['feature_importance'])
feature_importance

y_pred 혹은 y_pred_proba를 통한 모델 성능 검증은 다른 포스팅에 정리하겠습니다.


랜덤 포레스트의 복잡성

  • 텍스트 데이터와 같은 차원이 높은 데이터에는 제대로 작동하지 않습니다.
  • 데이터 수가 적거나, 이상치가 많은 데이터에는 제대로 작동하지 않습니다.
반응형
Comments