특성 중요도(Feature Importance)
모든 트리에 대해 각각 특성의 평균불순도감소(mean decrease impurity)를 계산한 값
scikit-learn의 tree model에서 feature_importances_ 옵션
순열 중요도(Permutation Importance)
관심있는 특성에만 무작위로 노이즈를 주고 예측을 했을 때 성능 평가지표(정확도, F1, 등)가 얼마나 감소하는지를 측정
import eli5 from eli5.sklearn import PermutationImportance
from sklearn.pipeline import Pipeline
pipe = Pipeline([
('preprocessing', make_pipeline(전처리 by pipeline)),
('model', 트리모델)
])
# permuter 정의
permuter = PermutationImportance(
pipe.named_steps['model'],
scoring='평가지표',
n_iter= 다른 random seed를 사용해 반복할 횟수,
random_state= 랜덤 시드
)
X_val_transformed = pipe.named_steps['preprocessing'].transform(X_val)
permuter.fit(X_val_transformed, y_val) # 순열 중요도 계산
Random Forest(배깅) | Boosting |
---|---|
트리 기반 | 트리 기반 |
각 트리가 독립적 | 이전 트리가 영향 O |
하이퍼파라미터 덜 민감 | 하이퍼파라미터에 민감 but 성능 굳 |
AdaBoost : 각 트리 중 약한 학습기들의 잘못 분류된 관측치에 가중치를 두고 다음 트리 구성 시 잘못 분류된 관측치를 더 많이 샘플링
-> 최종 학습 모델은 약한 학습기들의 가중 합
Gradient Boosting
회귀 문제에서는 mse, 분류에서는 logistic loss를 사용해 loss function을 만들며 이러한 loss function이 줄어드는 방향으로 학습이 이루어짐
즉 회귀문제에서는 첫 번째 트리에서 오차를 계산한 뒤 타겟을 오차로 잡고 오차를 학습해나가는 과정을 거치는 것을 의미
종류 : xgboost / lightgbm / catboost