장점
단점
ML/AI 분야에서 개발, 발전 : 엔트로피, 정보이득 개념으로 분리기준을 결정
통계학 분야에서 개발 : 카이스퀘어, T검정, F검정 등의 통계분석법을 사용하여 분리기준을 결정
MARS (Multivariate adaptive regression splines) : 더 많은 수치 데이터를 처리하기 위해 결정 트리를 사용한다.
조건부 추론 트리 (Conditional Inference Trees) : 과적합을 피하기 위해 여러 테스트에 대해 보정 분할 기준으로 비 - 파라미터 테스트를 사용하는 통계 기반의 방법이다. 이 방법은 편견 예측 선택 결과와 가지 치기가 필요하지 않다.
앙상블방법을 적용한 결정 트리
1. 랜덤 포레스트에서는 분류 속도를 향상시키기 위해서 결정 트리들을 사용
2. 부스트 트리는 회귀 분석과 분류 문제에 사용
3. 회전 포레스트는 모든 결정 트리가 먼저 입력 트리 중 임의의 부분 집합에 대한 주성분 분석 (PCA)을 적용하여 훈련됨
sklearn.tree.DecisionTreeClassifier
from sklearn.pipeline import make_pipeline
from sklearn.tree import DecisionTreeClassifier
pipe = make_pipeline(
OneHotEncoder(use_cat_names=True),
SimpleImputer(),
DecisionTreeClassifier(random_state=1, criterion='entropy')
)
pipe.fit(X_train, y_train)
print('훈련 정확도: ', pipe.score(X_train, y_train))
print('검증 정확도: ', pipe.score(X_val, y_val))
y_val.value_counts(normalize=True) # 과적합인지 확인
결정트리 그리기
from sklearn import tree
model_dt = pipe.named_steps['decisiontreeclassifier']
tree.plot_tree(model_dt)
plt.show()
혹은 더 나은 그림인 graphviz 사용
# graphviz 설치방법: conda install -c conda-forge python-graphviz
import graphviz
from sklearn.tree import export_graphviz
enc = pipe.named_steps['onehotencoder']
encoded_columns = enc.transform(X_val).columns
dot_data = export_graphviz(model_dt, max_depth=3, feature_names=encoded_columns, class_names=['no', 'yes'], filled=True, proportion=True)
display(graphviz.Source(dot_data))
특성중요도 확인
importances = pd.Series(model_dt.feature_importances_, encoded_columns) # DecisionTreeClassifier에 있는 변수 feature_importances_
plt.figure(figsize=(10,30))
importances.sort_values().plot.barh();
통계학과 데이터 마이닝, 기계 학습에서 사용하는 예측 모델링 방법 중 하나
정보 이득 : 정보가 가장 풍부한 특성으로 노드를 나누기 위해 최적화할 목적 함수를 정의하는데, 이 목적 함수는 정보 이득을 최대화하는 방향으로 분할한다.
특정한 특성을 사용해 분할했을 때 엔트로피의 감소량
정보 이득
이전 상태에서 주어진 정보를 갖는 상태로 바뀔 때 엔트로피 H의 변화
IG : 지니불순도, H : 엔트로피(Entropy)일 때
IG(T, a) = H(T) - H(T|a) = 분할전 노드 불순도 - 분할 후 자식노드 들의 불순도
엔트로피
여기서 f는 node이고, fi는 특정 노드 f에서 클래스 i가 속한 샘플 비율이다.
집합에 이질적인 것이 얼마나 섞였는지를 측정하는 지표로 잘못 분류될 확률을 최소화하기 위한 기준이다.
CART(Classification And Regression Tree) 알고리즘에서 사용
집합에 있는 항목이 모두 같다면 지니 불순도는 최솟값(0)을 갖게 되며 이 집합은 완전히 순수하다는 의미이다.
반대로 클래스가 완벽하게 섞여있을 때, (50%, 50%)일 때 최대가 된다.
예시
A, B 두 class가 혼합된 data가 있을 때 (A, B) 비율로 지니불순도를 이해해보자.
참고
sklearn.tree.DecisionTreeClassifier
결정 트리 학습법, wikipedia
정보 이득, wikipedia
[머신러닝 교과서 with 파이썬 사이킷런 텐서플로 개정 3판], 세바스찬 라시카, 바히드 미자리리, 길벗