前面的博客里有提到決策樹,我們也了解了決策樹的構建過程,如果可以可視化決策樹,把決策樹打印出來,對我們理解決策樹的構建會有很大的幫助。這篇文章中,我們就來看下如何可視化輸出一棵決策樹。
一、安裝相應的插件
我們需要安裝Graphviz和pygraphviz,教程,這個教程里有詳細的安裝過程,這里就不贅述了。
二、運行實例
我們依然以iris數據集為例,打印輸出決策樹看下效果。
-
#coding=utf-8
-
import numpy as np
-
import pandas as pd
-
import pydotplus
-
def lrisTrain():
-
#預處理-引入鳶尾數據:
-
from sklearn.datasets import load_iris
-
iris = load_iris()
-
-
from sklearn.cross_validation import train_test_split
-
# 把數據分為測試數據和驗證數據
-
train_data,test_data,train_target,test_target=train_test_split(iris.data,iris.target,test_size= 0.2,random_state=1)
-
#Model(建模)-引入決策樹
-
from sklearn import tree
-
#建立一個分類器
-
clf = tree.DecisionTreeClassifier(criterion= "entropy")
-
#訓練集進行訓練
-
clf.fit(train_data,train_target)
-
#畫圖方法1-生成dot文件
-
with open('treeone.dot', 'w') as f:
-
dot_data = tree.export_graphviz(clf, out_file= None)
-
f.write(dot_data)
-
-
#畫圖方法2-生成pdf文件
-
dot_data = tree.export_graphviz(clf, out_file= None,feature_names=clf.feature_importances_,
-
filled= True, rounded=True, special_characters=True)
-
graph = pydotplus.graph_from_dot_data(dot_data)
-
###保存圖像到pdf文件
-
graph.write_pdf( "treetwo.pdf")
-
-
#進行預測
-
y_pred = clf.predict(test_data)
-
-
#Verify(驗證)
-
#引入模塊
-
from sklearn import metrics
-
#法一:通過准確率進行驗證
-
print(metrics.accuracy_score(y_true =test_target,y_pred=y_pred))
-
#法二:通過混淆矩陣驗證(橫軸:實際值,縱軸:預測值)(理想情況下是個對角陣)
-
#print(metrics.confusion_matrix(y_true=test_target,y_pred=y_pred))
-
lrisTrain()
三、輸出結果
上述的兩個方法將會產生兩個文件,一個是dot文件,我們打開這個dot文件,得到的是決策樹生成的文本結構信息:
如何把它轉換成樹的圖形結構呢?
打開一個黑窗口(cmd,Anaconda prompt...都可以),先定位到生成的決策樹 treeone.dot 所在的路徑下,然后輸入命令行:dot -Tpdf treeone.dot -o treeone.pdf ,這樣就把名為treeone.dot文件在當前目錄下編譯生成了treeone.pdf文件,打開后效果如下:
生成的第二個文件treetwo.pdf就可以直接打開了,效果如下:
我們生成決策樹就是調用了export_graphviz函數,這個函數有很多參數值,可以通過設置這些參數值,控制生成節點上的輸出信息,大家可以根據自己的需求設置參數。
小結:我們這里是用sklearn中的DecisionTreeClassifier進行分類的,構建模型的時候只用到了這一棵決策樹。后面我們會將到集成學習算法xgboost算法中決策樹的可視化,xgboost是直接用它自己封裝的plot_tree這個類來進行輸出,不需要單獨安裝插件,反而更加容易可視化輸出決策樹。