scikit-learn의 tree.plot_tree가 매우 간단하고 편리했기 때문에 쉽게 사용법을 정리해 보았습니다.

Python으로 구현 된 기계 학습 라이브러리 scikit-learn는 다양한 알고리즘을 쉽게 시도 할 수 있기 때문에 종종 사용됩니다. 꽃 모양이라고 하면 TensorFlow나 PyTorch입니다만, 단단한 현장에서는 좀처럼 사용할 수 없습니다. . . 그런 scikit-learn에서 교사 있음 학습의 대표적인 수법 「결정 나무」를 학습 후에 묘화시에 편리한 함수가 Version0.21.x로부터 구현되었으므로 종래의 GraphViz를 이용하는 방법과 비교하면서 시험해 보겠습니다 했다.

기존 시각화 방법: GraphViz 사용



기존에는 GraphViz라는 다른 라이브러리를 설치하여 이용하고 있었습니다. 상당히 번거롭습니다. . .

GraphViz 설치 @Mac
brew install graphviz
pip install graphviz

GraphViz 설치 @ Ubuntu
sudo apt install -y graphviz
pip install graphviz

GraphViz를 이용한 방법
import graphviz
from sklearn import tree
from sklearn.datasets import load_iris

iris = load_iris()
clf = DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)

graph = graphviz.Source(tree.export_graphviz(clf, class_names=iris.feature_names, filled=True))
graph

실행 결과



실행 결과는 graph.render('decision_tree')를 실행하여 PDF로 저장할 수 있습니다.



tree.plot_tree 사용


tree.plot_tree를 사용하여 GraphViz를 사용하여 그린 것과 비슷한 그림을 그립니다. scikit-learn의 트리 모듈에 저장되어 있으므로 추가 설치가 필요하지 않습니다. (filled 옵션은 기본적으로 False이지만 True로 설정하면 채색됩니다)

tree.plot_tree를 사용하는 방법
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, plot_tree

iris = load_iris()
clf = DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)
iris = load_iris()
plt.figure(figsize=(15, 10))
plot_tree(clf, feature_names=iris.feature_names, filled=True)
plt.show()

실행 결과



GraphViz를 이용한 방법과 같은 그림을 출력할 수 있었습니다. Jupyter Notebook에서 실행하면 그리기 결과를 그대로 마우스 오른쪽 버튼으로 클릭하여 이미지로 저장할 수 있습니다.



2020/11/27 추가: 클래스 이름도 결정 트리에 표시


class_name 옵션을 추가하면 최종적으로 분류된 클래스 이름도 볼 수 있습니다.
plt.figure(figsize=(15, 10))
plot_tree(clf, feature_names=iris.feature_names, class_names=iris.target_names, filled=True)
plt.show()



요약



scikit-learn의 tree.plot_tree와 종래의 GraphViz를 이용하는 방법을 결정 트리의 가시화에 대해 실시해, tree.plot_tree가 (종래의 방법보다) 간단하고 편리하다고 실감했습니다. 앞으로 적극적으로 활용하고 싶습니다.

Reference


  • 1.10. Decision Trees
  • sklearn.tree.tree_plot
  • 좋은 웹페이지 즐겨찾기