공부/A.I

결정 트리

래울 2021. 5. 30. 19:50

books.google.co.kr/books?id=tPaTDwAAQBAJ&lpg=PP1&dq=%ED%8C%8C%EC%9D%B4%EC%8D%AC%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%EB%A5%BC%20%ED%99%9C%EC%9A%A9%ED%95%9C%20%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D&hl=ko&pg=PA1#v=onepage&q=%ED%8C%8C%EC%9D%B4%EC%8D%AC%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%EB%A5%BC%20%ED%99%9C%EC%9A%A9%ED%95%9C%20%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D&f=false

 

파이썬 라이브러리를 활용한 머신러닝(번역개정판)

사이킷런 핵심 개발자에게 배우는 머신러닝 이론과 구현   현업에서 머신러닝을 연구하고 인공지능 서비스를 개발하기 위해 꼭 학위를 받을 필요는 없습니다. 사이킷런(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파일을 만든다.

.dot파일 생성

 

.dot파일 출력