티스토리 뷰

앙상블 학습(Ensemble Learning)을 통한 분류는 여러 개의 분류기(Classifier)의 예측을 결합함으로써 보다 정확한 최종 예측을 도출하는 기법입니다.

 

 

 

앙상블 학습의 유형은 크게 보팅(Voting), 배깅(Bagging), 부스팅(Boosting)으로 나뉘며, 이 외에도 스태킹 등의 방법이 있습니다.

  • 보팅은 서로 다른 알고리즘의 분류기를 결합
  • 배깅은 같은 알고리즘의 분류기들이 각자 학습 데이터를 샘플링하여 학습한 뒤 보팅을 수행
    • 대표적인 배깅으로는 랜덤 포레스트 알고리즘이 있습니다

 

위의 그림의 왼쪽이 보팅을, 오른쪽이 배깅을 도식화한 것입니다. 배깅에서 개별 분류기는 원본 학습 데이터에서 샘플링을 한 데이터로 학습을 합니다. 교차 검증이 데이터 세트 간에 중복을 허용하지 않는 것과 다르게, 배깅의 샘플링은 중복을 허용합니다. 이러한 샘플링을 부트스트래핑(Bootstrapping) 분할 방식이라고 합니다.

 

 

보팅을 하는 두 가지 방법이 있습니다. 하드 보팅과 소프트 보팅입니다.

  • 하드 보팅은 다수결 원칙입니다. 각 분류기가 예측한 결괏값 중 가장 많은 예측 레이블을 최종 보팅 결괏값으로 선정합니다
  • 소프트 보팅은 각 분류기들의 레이블 값 결정 확률을 평균하여, 확률이 가장 높은 레이블 값을 최종 보팅 결괏값으로 선정합니다. 일반적으로 소프트 보팅의 성능이 하드 보팅보다 뛰어나 더 많이 사용됩니다

 

부스팅은 여러 개의 분류기를 순차적으로 학습시키되, 앞에서 학습한 분류기가 틀린 예측을 한 데이터에 대해선 올바른 예측을 할 수 있도록 다음 분류기에게 가중치를 부스팅합니다. 대표적인 부스팅 알고리즘에는 그라디언트 부스트, XGBoost, LightGBM이 있습니다.

 

스태킹은 여러 다른 모델의 예측 결괏값을 다시 학습 데이터로 만들어 다른 모델(메타 모델)로 재학습 시켜 결과를 예측하는 방법입니다.

 

 

 

 

사이킷런은 보팅 앙상블을 구현한 VotingClassifier 클래스를 제공합니다. 보팅 앙상블을 이용해 위스콘신 유방암 데이터 세트를 학습 및 예측해봅시다.

 

위스콘신 유방암 데이터 세트는 유방암의 악성/양성 여부를 결정하는 이진 분류 데이터 세트이며 종양의 크기, 모양 등 많은 피처를 가집니다.

 

 

 

위스콘신 유방암 데이터 세트는 사이킷런에서 기본적으로 제공하고 있습니다. 데이터 세트를 불러와 DataFrame 객체를 생성합니다.

 

 

 

 

로지스틱 회귀와 KNN 알고리즘을 기반으로 소프트 보팅 앙상블을 수행하는 분류기를 만들었습니다. VotingClassifier 클래스는 주요 인자로 estimators와 voting 값을 받습니다. estimators는 리스트 값으로 보팅에 사용할 classifier 객체들을 튜플 형식으로 입력받으며, voting은 'hard'시 하드 보팅, 'soft'시 소프트 방식을 할 것임을 의미합니다.

 

 

보팅 모델, 로지스틱 회귀 모델, KNN 모델을 각각 학습시키고 테스트 데이터에 대한 예측 성능을 확인해봅시다. 보팅 모델이 나머지 두 모델보다 더 높은 예측 성능을 보입니다. 물론 여러 분류기를 결합한다고 무조건 개별 분류기 보다 나은 예측 성능을 보이는 것은 아닙니다만, 앙상블 모델의 성능이 더 나은 경우가 전반적입니다.

 

 

머신러닝 모델의 성능은 다양한 테스트 데이터에 의해 검증되므로, 모델은 높은 유연성을 가지고 현실에 대처할 수 있어야합니다. 이러한 관점에서 편향-분산 트레이드 오프는 머신러닝 모델의 극복 과제입니다. 배깅과 부스팅의 경우 대부분 결정 트리를 분류기로 쓰는데, 과적합이라는 결정 트리의 단점을 수 십 ~ 수 천개의 결정 트리를 결합함으로써 극복하기 때문입니다. 즉, 결정 트리 알고리즘의 장점은 그대로 취하고 단점을 보완함으로써 편향-분산 트레이드오프의 효과를 극대화합니다.

 

 

 

 

배깅은 같은 알고리즘의 여러 분류기로 보팅을 하는 것이라고 했습니다. 대표적인 배깅 알고리즘인 랜덤 포레스트는 앙상블 알고리즘 중 비교적 빠른 수행 속도를 가지며, 다양한 영역에서 높은 예측 성능을 보입니다. 랜덤 포레스트는 여러 결정 트리가 전체 학습 데이터에서 각자의 학습 데이터를 샘플링해 개별적으로 학습을 수행한 뒤 보팅을 통해 최종 예측을 수행합니다.

 

 

 

 

사이킷런은 RandomForestClassifer 클래스를 통해 랜덤 프레스트 기반의 분류를 지원합니다. 랜덤 포레스트 알고리즘으로 사용자 행동 인식 데이터 세트를 학습 및 예측했습니다.

 

트리 기반의 앙상블 알고리즘의 단점은 하이퍼 파라미터가 너무 많아 튜닝 위해 많은 시간을 소모해야 된다는 것입니다. 더구나 튜닝을 통해 예측 성능이 크게 햐상되는 경우가 많지 않습니다. 앙상블 알고리즘은 각 분류기 자체의 파라미터에 앙상블을 위한 파라미터까지 추가되므로 일반적으로 많은 파라미터를 갖습니다. 그나마 랜덤 포레스트의 파라미터는 적은 편인데, 결정 트리의 파라미터가 대부분이기 때문입니다.

 

  • n_estimators : 랜덤 포레스트에서 보팅에 참여할 결정 트리의 개수. 디폴트는 10이며 클 수록 좋은 성능을 기대할 수 있지만 성능이 무조건 향상되는 것은 아니며 학습 시간을 감안해야 한다.
  • max_features : 결정 트리의 max_features 파라미터와 같다. 하지만 디폴트는 None이 아닌 auto(sqrt)이다.
  • max_depth, min_samples_split과 같은 결정 트리의 파라미터 또한 랜덤 포레스트가 가진다.

 

 

 

GridSearchCV() 메서드를 이용해 랜덤 포레스트의 하이퍼 파라미터를 튜닝해봅시다.

 

튜닝 시간을 절약하기 위해 n_estimators는 100으로, CV는 2로 설정했습니다. 랜덤 포레스트는 CPU 병렬 처리에 효과적이기 때문에 멀티 코어 환경에서 튜닝을 진행할 시 GridSearchCV 객체 생성 인자에 n_jobs=-1를 추가하여 빠른 수행을 도모할 수 있습니다.

 

 

 

가장 높은 예측 성능을 기록한 하이퍼 파라미터를 바탕으로 모델을 학습시켜 테스트 데이터 세트에 대한 예측 성능을 확인했습니다.

 

 

 

RandomForestClassifier 역시 DecisionTreeClassifer와 동일하게 feature_importances_ 속성을 기록합니다.

 

 

«   2025/11   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30