Decision Tree(의사결정나무)
의사결정나무
의사결정나무는 데이터 마이닝 또는 머신러닝에서 사용되는 알고리즘입니다.
질문들에 대한 답을 해가면서 아래로 내려가는 모습이 나무와 비슷한 모양이고 데이터를 분류하는데 좋은 모델입니다.
y변수가 범주형이라면 분류나무, 수치형이라면 회귀나무라고 할 수 있습니다.
지니 불순도
의사결정나무는 데이터를 얼마나 잘 분류했는가를 판단하는 것이 중요한데 지니 인덱스, 카이제곱 검정, 엔트로피 등을 기준으로 삼을 수 있습니다.
Gini index를 기준으로 설명할 때, 지니 불순도가 작을수록 데이터가 잘 분류되어있다고 할 수 있습니다.
따라서, 지니 불순도를 통해 질문에 해당하는 노드 또는 변수들을 선택하면서 의사결정나무가 그려지게 됩니다.
속성 중요도
한 노드에서 데이터가 나뉘어졌을 때, 불순도의 변화량을 통해 노드 중요도를 파악 가능한데
모든 노드의 중요도를 합한 값에서 특정 노드의 중요도이 비율이 속성 중요도가 됩니다.
Jupyter Decision tree
Decision tree를 사이킷런을 통해 구현해 볼 수 있습니다.
다른 머신러닝을 구현할 때와 방법은 크게 다르지 않고 sklearn 의 tree 모델만 불러와주면 됩니다.
model = tree.DecisionTreeClassifier(max_depth=4)
Random Forest
Decision tree 하나만으로는 다른 모델에 비해 성능이 떨어지기 때문에 Random Forest로 확장할 수 있습니다.
수많은 Decision tree를 만들고, 전체 트리의 예측값을 통해 다수결의 원칙으로 예측합니다.
먼저, 랜덤포레스트와 같이 여러 모델을 통해 결론을 도출하는 것을 앙상블(ensemble)이라 합니다.
이 앙상블의 성능을 높이기 위해서는 똑같은 데이터셋을 사용하기 보다 다양하게 변환된 데이터를 사용해야 합니다
이 때, bootstrap이 사용되고 임의로 행을 추출하여 새로운 데이터를 만든다고 생각하시면 됩니다.(무작위 재추출)
이 용어를 bootstrap aggregating = Bagging 이라고 합니다
Random Forest 역시 sklearn을 통해 구현해보면
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators = 100, max_depth=4)
n_estimators 는 tree 의 개수, max_depth 는 최대 깊이