Graphviz 是一個繪圖工具集, 可以用 The DOT Language 的 DSL 來繪圖。用 dot 寫好腳本之後,使用不同的佈局引擎來對腳本解析,生成圖片,支持 PNG、PDF 等格式。Graphviz 有好幾個佈局引擎,一般使用的有dot
(有向圖) 和 circo
(環形佈局),其他的較少使用。
Graphviz
包含 3 種圖形元素,圖(graph)
, 節點(node)
和邊(edge)
。每個元素都可以具有各自的屬性,用來定義字體,樣式,顏色,形狀等。
安裝
-
安裝
graphviz
進程1 2 3 4 5
Mac brew install graphviz ubuntu sudo apt-get install graphviz
或者到官網下載頁面中, 找到對應平臺的安裝包安裝。
-
安裝
python-graphviz
模塊1
sudo pip install graphviz
問題描述:
基本用法
通過實例化對象創建圖形
以下是基於sklearn庫的CART算法示例代碼。通過構建決策樹(採用Gini作爲指標)對隨機生成(通過np.random.randint方法)的數字進行分類,自變量X爲100×4的矩陣,隨機生成的數字大於10,因變量Y爲大於2的100×1矩陣。樹的最大深度限制爲3層,訓練完成之後將樹可視化顯示。
import numpy as np
import random
from sklearn import tree
from graphviz import Source
np.random.seed(42)
X =np.random.randint(10,size=(100,4))
Y =np.random.randint(2,size=100)
a =np.column_stack((Y,X))
clf =tree.DecisionTreeClassifier(criterion='gini',max_depth=3)
clf =clf.fit(X,Y)
graph =Source(tree.export_graphviz(clf,out_file=None))
graph.format ='png'
graph.render('cart_tree',view=True)
jupyter notebook運行,此時出現問題:UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xd5 in position 2: invalid continuation byte該問題表明解碼器錯誤。
嘗試解決方法:
1.查看Anaconda3\envs\tensorflow1\Lib\site-packages\graphviz\.compat.py
加入以下代碼:
PY2 = sys.version_info[0] == 2
if not PY2:
text_type = str
string_types = (str,)
unichr = chr
int_types = (int,)
iteritems = lambda x: iter(x.items())
else:
text_type = unicode
string_types = (str, unicode)
unichr = unichr
int_types = (int, long)
iteritems = lambda x: x.iteritems()
未成功
2.pip uninstall graphviz
pip install graphviz
或者
conda uinstall graphviz
conda install graphviz (如果報錯,安裝python-graphviz
模塊: conda install python-graphviz)
再次運行:成功
生成cart_tree.png
基本思想:從根節點出發,測試不同的特徵屬性,按照結果的不同選擇分支,最終落到某一葉子節點,獲得分類結果。