决策树可视化,被惊艳到了!

大家好,我是小z,也可以叫我阿粥

关于决策树的可视化,传统版本大家也看了不少,今天给大家分享一个超级惊艳的版本,还有具体的实现方式~

话不多说,直接看图:

1623eabf3d26a16d920503dbf234af87.png51eb7883e8819746680eb19c0af56b1d.png

直接绘制随机森林也不在话下

a0822f5239d6e3a891d9078cdd8e1fae.png

下面就向大家介绍一下这个神器 —— pybaobabdt

安装GraphViz

pybaobabdt依赖GraphViz,首先下载安装包

http://www.graphviz.org/download/

fc7bc0afde8531248d37ec605d215902.png

http://www.graphviz.org/download/

2、双击msi文件,然后一直选择next(默认安装路径为C:\Program Files (x86)\Graphviz2.38\),安装完成之后,会在windows开始菜单创建快捷信息。

cebcb7df624bf1e88b59612781216fbe.png

3、配置环境变量:计算机→属性→高级系统设置→高级→环境变量→系统变量→path,在path中加入路径:

3363a23485f24a930a55700249ce01ed.png

4、验证:在windows命令行界面,输入dot -version,然后按回车,如果显示如下图所示的graphviz相关版本信息,则安装配置成功。

64c775a0b77271eb8db18de656c30dcb.png

安装pygraphviz和pybaobabdt

pip直接安装pygraphviz的话,大概率会报错,建议下载whl文件本地安装。

9b9cbdf267a9efb58caebd44b8064135.png

https://www.lfd.uci.edu/~gohlke/pythonlibs

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')

ff2895e293a42d1b97b8c54a67cfaa3d.png

这个图怎么看呢?

不同的颜色对应不同的分类(target),每个分叉处都标记了分裂的条件,所以划分逻辑一目了然。树的深度也是工整的体现了出来。

树枝的直径也不是摆设,而是代表了样本的个数(比例),该划分条件下的样本越多,树干也就越粗。

你是发现最最底层的树枝太细太脆弱的时候,是不是应该考虑一下过拟合风险,比如需要调整一下最小样本数?

绘制随机森林

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)
f89ade9f7b49db61a1f85dedb18199e5.png

怎么用,是不是很酷,赶紧去试试吧!

fe7017a26cc270fae44483aa5cce03d8.gif

 
 
●适婚农村青年找对象有多难?
●品牌知名度分析
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值