屬實逼真,決策樹可視化!
↓↓↓點擊關注,回復資料,10個G的驚喜
同學們好
決策樹的可視化,我以為之前介紹的方法已經(jīng)夠驚艷了(決策樹可視化,被驚艷到了!),沒想到最近又發(fā)現(xiàn)了一個更驚艷的,而且更逼真,話不多說,先看效果圖↓


直接繪制隨機森林也不在話下
下面就向大家介紹一下這個神器 —— pybaobabdt
安裝GraphViz
pybaobabdt依賴GraphViz,首先下載安裝包
http://www.graphviz.org/download/

2、雙擊msi文件,然后一直選擇next(默認安裝路徑為C:\Program Files (x86)\Graphviz2.38\),安裝完成之后,會在windows開始菜單創(chuàng)建快捷信息。

3、配置環(huán)境變量:計算機→屬性→高級系統(tǒng)設置→高級→環(huán)境變量→系統(tǒng)變量→path,在path中加入路徑:

4、驗證:在windows命令行界面,輸入dot -version,然后按回車,如果顯示如下圖所示的graphviz相關版本信息,則安裝配置成功。

安裝pygraphviz和pybaobabdt
pip直接安裝pygraphviz的話,大概率會報錯,建議下載whl文件本地安裝。

pybaobabdt就簡單了,直接pip install pybaobabdt 即可
pybaobabdt用法
pybaobabdt 用起來也簡單到離譜,核心命令只有一個pybaobabdt.drawTree,下面是官方文檔示例代碼,建議在jupyter-notebook中運行。
import?pybaobabdt
import?pandas?as?pd
from?scipy.io?import?arff
from?sklearn.tree?import?DecisionTreeClassifier
from?matplotlib.colors?import?LinearSegmentedColormap
from?matplotlib.colors?import?ListedColormap
from?colour?import?Color
import?matplotlib.pyplot?as?plt
import?numpy?as?np
data?=?arff.loadarff('vehicle.arff')
df???=?pd.DataFrame(data[0])
y?=?list(df['class'])
features?=?list(df.columns)
???????????????????
features.remove('class')
X?=?df.loc[:,?features]
clf?=?DecisionTreeClassifier().fit(X,?y)
ax?=?pybaobabdt.drawTree(clf,?size=10,?dpi=72,?features=features,?colormap='Spectral')

這個圖怎么看呢?
不同的顏色對應不同的分類(target),每個分叉處都標記了分裂的條件,所以劃分邏輯一目了然。樹的深度也是工整的體現(xiàn)了出來。
樹枝的直徑也不是擺設,而是代表了樣本的個數(shù)(比例),該劃分條件下的樣本越多,樹干也就越粗。
你是發(fā)現(xiàn)最最底層的樹枝太細太脆弱的時候,是不是應該考慮一下過擬合風險,比如需要調(diào)整一下最小樣本數(shù)?
繪制隨機森林
import?pybaobabdt
import?pandas?as?pd
from?scipy.io?import?arff
import?matplotlib.pyplot?as?plt
from?sklearn.ensemble?import?RandomForestClassifier
data?=?arff.loadarff('vehicle.arff')
df?=?pd.DataFrame(data[0])
y?=?list(df['class'])
features?=?list(df.columns)
features.remove('class')
X?=?df.loc[:,?features]
clf?=?RandomForestClassifier(n_estimators=20,?n_jobs=-1,?random_state=0)
clf.fit(X,?y)
size?=?(15,15)
plt.rcParams['figure.figsize']?=?size
fig?=?plt.figure(figsize=size,?dpi=300)
for?idx,?tree?in?enumerate(clf.estimators_):
????ax1?=?fig.add_subplot(5,?4,?idx+1)
????pybaobabdt.drawTree(tree,?model=clf,?size=15,?dpi=300,?features=features,?ax=ax1)
????
fig.savefig('random-forest.png',?format='png',?dpi=300,?transparent=True)

怎么用,是不是很酷,趕緊去試試吧!
如有收獲,可否在看、收藏、轉發(fā)一下?感謝~
參考:https://mp.weixin.qq.com/s/uIazCL9SjNDguu59up5KjA
推薦閱讀
準備寫本書 這次,我真當up主了 21個深度學習開源數(shù)據(jù)集匯總! 耗時一個月,做了一個純粹的機器學習網(wǎng)站 用 Python 從 0 實現(xiàn)一個神經(jīng)網(wǎng)絡 40篇AI論文!附PDF下載,代碼、視頻講解
三連在看,月入百萬??
