빅데이터 & 분석/Machine Learning

파이썬(Python) - Scikit Learn 의사결정트리(Decision Tree) 시각화 예제

2018. 12. 14. 18:35
목차
  1. 파이썬(Python) - 의사결정트리(Decision Tree) 예제 소스


파이썬(Python) - 의사결정트리



오늘은 파이썬을 활용해서 scikit-learn 라이브러리의 의사결정 트리를 간단하게 학습하고 관련
결과를 시각화 시키는 간단한 예제 소스를 공유하고자 합니다.

보통 R을 활용해서 간단하게 구현가능하지만, 필드에서 파이썬을 활용하는 경우도 많기에 이와 같은

예제를 간단하게 구현해보았습니다.

의사결정트리는 다양한 규칙을 순차로 적용하면서 독립변수의 공간을 분류하고 기준값을 정하는 모델
이라고 할 수 있습니다. 

매우 직관적인 분류모델이고 자료의 결과를 해석하기가 용이해서 많이 사용하는 알고리즘이라고
볼 수 있습니다.

그러면 문서 하단에서 간단하게 예제를 작성해보겠습니다.

파이썬(Python) - 의사결정트리(Decision Tree) 예제 소스


파이썬의 graphviz의 pydot을 활용하면 쉽게 의사결정트리를 시각화 할 수 있습니다.
어렵지 않은 코드 이므로, 차근차근 살펴보시면 쉽게 이해하실 수 있습니다.

dicisionTree1.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.datasets import load_breast_cancer
from sklearn.cross_validation import train_test_split
#Dot to png
import pydot
 
#온라인 시각화
#https://dreampuf.github.io/GraphvizOnline
 
#샘플 데이터 로드(유방암 데이터 세트)
cancer = load_breast_cancer()
 
#훈련, 테스트 데이터 셔플
X_train, X_test, y_train, y_test = train_test_split(
cancer.data, cancer.target, stratify=cancer.target, random_state=42)
 
#의사결정 트리 선언
dTreeAll = DecisionTreeClassifier(random_state=0)
 
#훈련 (모든 리프 노드 사용)
dTreeAll.fit(X_train, y_train)
 
#점수 출력
print("Train Set Score1 : {:.2f}".format(dTreeAll.score(X_train, y_train)))
print("Test  Set Score1 : {:.2f}".format(dTreeAll.score(X_test, y_test)))
 
#의사결정 트리 선언(트리 깊이 제한)
dTreeLimit = DecisionTreeClassifier(max_depth=3, random_state=0)
 
#훈련 (가지치기 : 리프노드 깊이 제한)
dTreeLimit.fit(X_train, y_train)
 
#점수 출력
print("Train Set Score2 : {:.2f}".format(dTreeLimit.score(X_train, y_train)))
print("Test  Set Score2 : {:.2f}".format(dTreeLimit.score(X_test, y_test)))
 
 
export_graphviz(dTreeLimit, out_file="dicisionTree1.dot", class_names=["malignant","benign"],
                feature_names=cancer.feature_names, impurity=False, filled=True)
 
#Encoding 중요
(graph,) = pydot.graph_from_dot_file('dicisionTree1.dot', encoding='utf8')
 
#Dot 파일을 Png 이미지로 저장
graph.write_png('dicisionTree1.png')
Colored by Color Scripter
cs

- 1-3번 라인 : scikit-learn 관련 라이브러리, 예제 데이터 로드
- 18번 라인 : decision tree 객체 생성
- 21번 라인 : decision tree 훈련
- 28번 라인 : decision tree 객체 생성(리프 노드 깊이 제한)
- 31번 라인 : decision tree 훈련(28번 라인에서 선언한 의사결정트리)
- 38번 라인 : graphbiz 의사결정 트리 시각화 작업
- 42번 라인 : dot 파일로 encoding 작업
- 45번 라인 : 결과물을 이미지(png) 파일로 저장



파이썬(Python)
- 의사결정트리(Decision Tree) 실행 화면


아래 이미지로 실제 실행 화면을 확인하실 수 있습니다.


실제 실행 화면


의사결정트리 결과 이미지



마무리


앞에서도 설명드렸지만, 의사결정트리는 특정 항목에 대한 측정값을 목표가 되는 값에 매핑시켜주는
분석기법으로 의사결정과정의 규칙을 이용해서 Tree 구조로 만든 분류 모델이라 할 수 있습니다.


그러나 깊이(Depth)가 커지면 새로운 데이터를 적용하기가 곤란하고 가장 중요한 단점인 예측 오차의
수치가 비약적으로 높아지는 경우가 있습니다.

이럴 경우 데이터 특성을 정확히 파악하고 가지치기(pruning)을 활용해서 깊이를 조절해줄 필요성이
있으며, 가지치기의 감도를 조절하기 위해서는 reduced error pruning 또는 rule post pruning 등
의 기법을 적용해 볼 필요성이 있습니다.


다음 시간에도 파이썬 관련 유용한 주제에 대해서 포스팅 하도록 하겠습니다.

소스코드 다운로드 :  dicisionTree1.zip


저작자표시 동일조건 (새창열림)

'빅데이터 & 분석 > Machine Learning' 카테고리의 다른 글

Flask(플라스크) - 머신러닝, 딥러닝 웹 서비스 예제 소스 및 개념 설명(2)  (8) 2019.06.18
Flask(플라스크) - 머신러닝, 딥러닝 웹 서비스 예제 소스 및 개념 설명(1)  (16) 2019.06.12
파이썬(Python) - 머신러닝 프로젝트(최종) - 나이브 베이즈 스팸 필터링  (26) 2018.09.23
파이썬(Python) - 머신러닝 프로젝트(4) - mLab 호스팅 활용 MongoDB 연동  (4) 2018.09.09
파이썬(Python) - 머신러닝 프로젝트(3) - 문자열 가공 및 TXT 및 CSV 저장  (9) 2018.07.27
  1. 파이썬(Python) - 의사결정트리(Decision Tree) 예제 소스
'빅데이터 & 분석/Machine Learning' 카테고리의 다른 글
  • Flask(플라스크) - 머신러닝, 딥러닝 웹 서비스 예제 소스 및 개념 설명(2)
  • Flask(플라스크) - 머신러닝, 딥러닝 웹 서비스 예제 소스 및 개념 설명(1)
  • 파이썬(Python) - 머신러닝 프로젝트(최종) - 나이브 베이즈 스팸 필터링
  • 파이썬(Python) - 머신러닝 프로젝트(4) - mLab 호스팅 활용 MongoDB 연동
[좋은사람]
[좋은사람]
좋은사람의 개발 노트 입니다.
[좋은사람]
좋은사람의 개발 노트
[좋은사람]
전체
오늘
어제
  • 전체보기 (189)
    • 언어 (68)
      • Java (12)
      • Python (39)
      • C# (5)
      • PHP (4)
      • Go (8)
    • OS (18)
      • Linux (7)
      • Windows 10 (5)
      • Etc (6)
    • 빅데이터 & 분석 (8)
      • R (0)
      • Machine Learning (8)
    • 네트워크 (4)
      • Etc (4)
    • 웹 프론트 (25)
      • Javascript & ECMA (8)
      • Vue (13)
      • React (4)
    • 웹 백엔드 (15)
      • Spring (3)
      • Django & Flask (7)
      • Npm & Express (5)
    • 개발도구 (18)
      • Jetbrains (3)
      • Eclipse (5)
      • Git (4)
      • Atom & VScode (6)
    • 데이터베이스 (7)
      • Oracle (2)
      • MariaDB & MySQL (2)
      • Etc (3)
    • 모바일 (6)
      • Android (3)
      • Hybrid (3)
    • 라이프 (20)
      • 여행 & 일상 (6)
      • 취미 (14)

블로그 메뉴

  • 홈으로
  • 블로그소개
  • 태그
  • 방명록

공지사항

인기 글

태그

  • CFW
  • nodejs
  • Linux
  • 3DS
  • 개발자 면접
  • Eclipse
  • C#
  • Database
  • 디자인패턴
  • ATOM
  • 윈도우10
  • windows10
  • centos
  • 리액트
  • vue.js
  • 이클립스
  • 아톰 에디터
  • 인텔리j
  • Anaconda
  • react
  • Django
  • 커펌
  • go
  • OCR
  • php
  • flask
  • Algorithm
  • ps4
  • npm
  • python
  • Git
  • SpringSTS
  • ubuntu
  • javascript
  • 미뮤
  • Java
  • 코딩 면접
  • Thread
  • 머신러닝
  • 2DS

최근 댓글

최근 글

hELLO · Designed By 정상우.
[좋은사람]
파이썬(Python) - Scikit Learn 의사결정트리(Decision Tree) 시각화 예제
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.