머신러닝

앙상블 기법과 속성 중요도 ( Feature Importances )

ROSEV 2021. 8. 17. 22:39

앙상블

앙상블은 말그대로, 여러 가지를 하나로 조화하는 것을 뜻합니다. 그래서 이러한 개념을 머신러닝 모델 구축에 활용하여, 여러 모델을 만든 후 모델을 합쳐 성능을 보완하는 방법론을 말합니다.

 

앙상블 방법론 - 배깅(Bagging)

출처: swallow.github.io

  • Bagging은 말그대로 Bootstrap Aggregation의 약자로 부트스트랩 셋을 여러개 단위로 뽑아, 학습하여 모델을 구축합니다.
  • 그래서 각 각 나온 결과 값을 집계, 혹은 결합하여 최종 결과 값을 구합니다.
  • 이때 범주형 데이터의 경우 최빈 값(Voting)방식으로 결과를 구하며, 연속형 데이터의 경우 평균으로 집계합니다.
  • 이러한 배깅 방법을 사용하는 모델이 랜덤포레스트(Randomforest)기법입니다.

 

 

앙상블 방법론 - 부스팅

출처: Medium (Boosting and Bagging explained with examples)

  • 부스팅은 가중치(Weight)를 활용하여 약분류기를 강분류기로 만드는 방법입니다.
  • 즉, 그림과 같이 약분류기에서 잘못 분류 했었던 데이터에 가중치를 주어, 크기를 키우고 잘 분류되었던 데이터는 가중치로 크기를 줄여 오차를 보완하여 모델을 구축합니다.
  • 오분류 된 객체에 높은 가중치를 주어 보다 잘 분류 되도록 하는 것이 포인트입니다.
  • 위의 설명은 AdaBoost(Adaptive Boost)를 설명한 경우이며, 그래디언트 부스팅의 경우 비용함수를 가중치 대신 잔차를 학습니다.

 

 

 

그래디언트 부스팅( Gradient Boost )

 

  • 회귀와 분류 문제에 모두 사용가능합니다, Ada와는 달리, 비용함수에 잔차를 사용하여 계산합니다.
  • 종류로는 Xgboost, LightGBM 등이 있습니다.
  • XGboost는, 그래디언부스팅은 바탕으로, 병렬적으로 계산하며 과적합을 피하고 GBM보다 빠르며 Early Stop을 제공합니다.
  • LighGBM
  • Catboost

 

AdaBoost

 

  • AdaBoost도 회귀, 분류 둘다 가능합니다.
  • 노이즈가 많은 데이터와 이상점(outlier)에 취약한 모습을 보인다

 

AdaBoost와 Gradient Boost의 차이

 

 

배깅과 부스팅의 차이

출처 hmkim312.github.io

 

  • 배깅은 병렬로 학습하지만, 부스팅의 경우 순서대로 학습합니다. 또한 하나의 모델이 구축된 뒤 성능에 따라 가중치를 부여합니다.
  • 부스팅은 배깅에 비해 성능이 좋지만, 속도가 느리고 과적합 가능성이 높습니다.
  • 그래서 과적합이 되는 경우 배깅을 사용하며, 우려되지 않는다면 부스팅을 사용합니다.

3가지의 특성 중요도

 

출처 : https://velog.io/@vvakki_/

1. 특성 중요도(Mean decrease impurity, MDI)

 

  • 중요도는 지니불순도(Gini impurity)를 가지고 계산하며, 노드가 중요할 수록 불순도가 크게 감소하는 것을 활용합니다
  • 즉, 불순도를 크게 감소하는데 많이 사용된 특성이 중요도가 높게 나타납니다.
  • 회귀의 경우는 MSE(Mean Squared Error) 등을 이용해서 분산을 감소시키는 방향으로 노드가 생성되며 이 과정에서
  • 분산을 가장 크게 감소 시키는 변수가 중요도가 가장 크게 나타납니다.
  • 단점으로는, 연속형 변수와 High-cardinality 범주형 변수에 대해 bias

 

2. Drop-Column Importance

 

  • 모든 변수를 사용했을 때의 성능과 특정 변수를 빼고 학습한 모델의 성능과 비교하여 나타난 차이를 변수 중요도로 정의합니다
  • 해당 변수를 제거 했을 때 성능이 크게 변한다면 중요한 변수라고 할 수 있습니다
  • 하지만 변수의 개수만큼 모델을 재학습 해야하므로, 효율적이지 못하다는 단점이 있습니다.

 

 출처 : https://velog.io/@vvakki_/ 순열중요도

 

3. 순열중요도, (Permutation Importance, Mean Decrease Accuracy, MDA)

 

  • 중요도 측정은 관심있는 특성에만 노이즈를 주고 예측을 하였을 때 성능 평가지표(Accuracy, F1, R^2)
  • OOB Samples를 검증셋트로 사용하여 성능(Accuracy, R-square, MSE 등) 계산합니다.
  • 각 모델의 특정 속성의 데이터를 무작위로 섞은 후 학습된 성능을 계산하여 저장합니다
  • 그래서 모든 모델을 성능과, 모든 모델에서의 각 속성의 데이터를 무작위로 섞은 모델과의 차이를 구하고 이 차이를 속성별로 평균내어 순열 중요도를 결정합니다.

 

특성중요도 with Python

from sklearn.ensemble import RandomForestClassifier

# 속성 중요도
RandomForestClassifier().feature_importances 

#Drop-Column Importance
#특정 속성 단순히 제거하고 성능 확인하고, 포함하고 성능 확인

# 순열중요도
import eli5
from eli5.sklearn import PermutationImportance

permuter = PermutationImportance(
    RandomForestClassifier() # 모델
    scoring='accuracy', # 평가지표
    n_iter=3, # 다른 random seed를 사용하여 3번 반복
    random_state=42
)