결정 트리
파이썬 라이브러리를 활용한 머신러닝(번역개정판)
사이킷런 핵심 개발자에게 배우는 머신러닝 이론과 구현 현업에서 머신러닝을 연구하고 인공지능 서비스를 개발하기 위해 꼭 학위를 받을 필요는 없습니다. 사이킷런(scikit-learn)과 같은 훌륭
books.google.co.jp
- 결정트리
결정트리, Decision Tree는 분류와 회귀문제에 널리 사용하는 모델이다.
기본적으로 결정에 다다르기 위해 예/아니요의 질문을 이어나가면서 학습한다.
리프, leaf : 트리에서 가장 마지막 노드
엣지, edge : 결정트리에서 질문과 답을 연결
루트 노드, root node : 트리에서 맨 위의 노드
순수 노드, pure node : 결정트리의 리프가 하나의 타깃값(하나의 클래스 나 하나의 회귀 분석 결과)으로만 이루어진 노드
- 결정트리의 복잡도 제어
일반적으로 트리 만들기를 모든 리프노드가 순수노드가 될 때까지 진행하면 모델이 매무 복잡해지고 훈련데이터에 과대적합된다.
즉, 순수노드로 이루어진 트리는 훈련데이터에 100%의 정확도를 가진다.
트리의 과대적합을 막는 방법에는 크게 두가지가 있다.
1. 사전 가지치기 : 트리 생성을 일찍 중단하는 방법, 트리의 최대 깊이나 리프의 최대개수를 제한하거나, 노드가 분할하기 위한 포인트의 최소 개수를 지정하는 방법 등이 있다.
2. 사후 가지치기(가지치기) : 트리를 만든 후 데이터 포인트가 적은 노드를 삭제하거나 병합하는 방법
* scikit-learn에서 결정 트리는 DecisionTreeRegression과 DecisionTreeClassifier에 구현되어 있고, 사전 가지치기만 지원한다.
- 모든 리프가 순수노드인 결정트리
모든 리프가 순수노드이기 때문에 훈련 셋에 대해서는 항상 100%의 정확도를 가진다.
- 최대 깊이 제한을 둔 결정트리
max_depth매개변수를 3으로 지정함으로써 트리의 최대 깊이가 3(질문이 최대 3개)이 되게 제한을 주었다.
이처럼 max_depth를 통해 트리의 복잡도를 제어할 수 있다.
- 트리의 특성 중요도
트리를 만드는 결정에 각 특성이 얼마나 중요한지를 평가하는 특성 중요도이다.
특성 중요도는 0~1사이의 숫자로, 각 특성 중요도의 전체 합은 1이다.
해당 모델에서는 worst perimeter가 가장 중요한 특성으로 나타났다.
- 트리의 시각화
트리 모듈의 export_graphviz 함수를 이용해 트리의 시각화가 가능하다.
export_graphviz함수는 그래프 저장용 파일 포맷인 .dot파일을 만든다.