특성 중요도는 트리를 만드는 결정에 각 특성이 얼마나 중요한지를 보여준다.
0과 1 사이의 숫자로, 각 특성에 대해 0은 전혀 사용되지 않았다는 뜻, 1은 완벽하게 타깃 클래스를 예측한다는 뜻이다.
from sklearn.tree import DecisionTreeClassifier
from sklearn.pipeline import make_pipeline
pipe = make_pipeline(
SimpleImputer(strategy='mean'), #defalut값이 mean
DecisionTreeClassifier(min_samples_leaf=10, #말단 노트에 존재하는 샘플 수 정함
max_depth=5, #The maximum depth of the tree
min_samples_split = 3, #The minimum number of samples required to split an internal node:
criterion='entropy'))
pipe.fit(X_train, y_train)
make_pipe라인으로 결측치를 채우는 imputer,
카테고리 데이터를 숫자형 데이터로 바꿔주는 OneHotEncoder나 Ordinal Encoder,
등을 연결하여 간단하게 모델에 적용할 수 있다.
DecisionTree모델에서 데이터를 나누는 기본 기준은 지니 불순도(Gini Imputy)다.
criterion = 'Entropy'
를 하이퍼 파라미터로 주어 엔트로피 방식으로 바꿀 수 있는데,
지니 불순도를 기준으로 사용하면 데이터가 많을 때 더 빠르게 모델을 돌릴 수 있다고 한다.
# 특성 중요도 순 정리 : 불순도를 낮추는 특성
model_dt = pipe.named_steps['decisiontreeclassifier']
importances = pd.Series(model_dt.feature_importances_, encoded_columns)
importances.sort_values(ascending=False)
파이프라인으로 연결해주었기 때문에
단계를 지정하여 feature_importanes_ 를 사용하면
Decision Tree모델에서의 특성 중요도를 뽑아준다.
여기서의 특성 중요도는 지니 불순도가 얼마나 줄어드냐? 가 기준이다.
데이터를 나눌 때마다 특성을 사용할 때, 불순도를 전체적으로 낮춰주는 특성이 맨 위에 뽑힌다.
Regression 모델의 회귀계수와 달리 항상 양수값을 가진다.
특성의 모든 특성 불순도를 합치면 1이 된다.
'머신러닝, 딥러닝' 카테고리의 다른 글
트리 모델에서 Ordinal 대신 Nominal 인코딩을 해야 하나? (0) | 2021.02.07 |
---|---|
랜덤포레스트 모델에서 Select K Best를 사용해야 할까? (0) | 2021.02.07 |
랜덤포레스트 모델의 결측값 대체 방법 (0) | 2021.02.05 |
Ridge Regression (0) | 2021.02.03 |
교차검증(Cross Validation) (0) | 2021.02.01 |