異常1:ExecutableNotFound: failed to execute [‘dot’, ‘-Tsvg’], make sure the Graphviz executables are on your systems
異常2:CalledProcessError: Command '['dot', '-Tsvg']' returned non-zero exit status 1. [stderr: b"Error: <stdin>: syntax error in line 1 near 'None'\r\n"]
是否在使用graphviz遇上這兩個問題?恭喜你,遇上才哥不迷路。
首先異常1的原因是只安裝了Python的graphviz第三方接口模塊並沒有安裝graphviz畫圖軟件
異常2的原因主要為安裝的graphviz軟件不兼容當前的Python解釋器或當前的graphviz第三個接口模塊,最好的解決方法是換一個低版本的graphviz軟件
網上介紹異常二的另外一個原因是沒有在tree.export_graphviz中添加out_file=None參數,(我個人測試是沒有問題的,沒有辦法的時候可以試一下(如上白話文介紹沒看懂的看下面代碼))
今天想畫一下決策樹,結果發現graphviz不僅僅是安裝一下模塊這么簡單,首先,graphviz是一個使用dot語言的畫圖編輯器,當然也可以執行dot文件。於是要想畫決策樹可以有多種方法。
1、使用Python生成dot文件后,通過graphviz的gvedit.exe可以圖形化界面操作打開dot文件,然后就可以生成決策樹圖形
2、可以通過python的第三方模塊,graphviz接口調用本地安裝的graphviz軟件,直接生成決策樹圖形
下面我們就來介紹一下如何在Python中使用graphviz畫一顆決策樹:(在網上看了許多博客都沒有找到一個完整的介紹,失望!!!)
環境:
系統:win7
Python解釋器版本:Python3.5,(Python解釋器向下兼容,3.5以上均可)
編輯環境:jupyter notebook,(在pycharm中運行后生成的是pdf文件,中文編碼問題需要自己解決)
graphviz版本:graphviz-2.38.msi,(實測現在官網發布的2.44.1安裝后在Python3.5中運行時總會遇到CalledProcessError
異常,所有建議通過graphviz-2.38.msi安裝)
以下提供graphviz-2.38安裝包和中文教程
鏈接:https://pan.baidu.com/s/1y8-Owj9UiwrWcyJ7VwY_4A
提取碼:q6z0
1、首先我們需要安裝graphviz-2.38軟件:
a.下載安裝包后,傻瓜式安裝,記住安裝路徑即可
b.安裝完成后,添加環境變量:(注意路徑為自己安裝路徑下的bin目錄)
c.測試:(在cmd命名窗口輸入dot -version)顯示窗口如下,恭喜安裝成功
安裝完成后我們可以使用圖形化界面來打開dot文件或者使用dot語言編寫圖形:
可以通過運行gvedit.exe文件打開圖形化操作界面:
2、然后我們需要安裝graphviz第三方模塊:
命令:pip install graphviz -i https://pypi.tuna.tsinghua.edu.cn/simple(這里網上各種介紹說安裝python-graphviz或者是pygraphviz模塊,但個人實測只能安裝graphviz,其他兩個模塊安裝報錯)
安裝完成后即可在Python中調用畫決策樹
from sklearn import tree from sklearn.datasets import load_wine from sklearn.model_selection import train_test_split wine = load_wine() #區分數據集和測試集 Xtrain,Xtest,Ytrain,Ytest = train_test_split(wine.data,wine.target,test_size=0.3) clf = tree.DecisionTreeClassifier(criterion="entropy") clf = clf.fit(Xtrain,Ytrain) score = clf.score(Xtest,Ytest) feature_name = ['酒精','蘋果酸','灰','灰的鹼性','鎂','總酚','類黃酮','非黃烷類酚類','花青素','顏色強度','色調','稀釋葡萄酒','脯氨酸'] import graphviz #輸出生成的決策樹 dot_data = tree.export_graphviz(clf ,feature_names = feature_name ,class_names = ["琴酒","雪莉","貝爾摩德"] ,filled=True ,rounded=True ,out_file=None #---->(異常二的解決方法二) ,special_characters="utf-8" ) graph = graphviz.Source(dot_data) graph.view()
切記重啟一下開啟jupyter notebook編輯頁面的cmd窗口。