实用 | 分享一个决策树可视化工具

作者 | Revolver

编辑 | 安可

出品 | 磐创AI技术团队

【磐创AI导读】:这篇文章希望跟大家分享一个可视化决策树或者随机森林的工具。这可以帮助我们更好的去理解或解释我们的模型。想要获取更多的机器学习、深度学习资源。欢迎大家点击上方蓝字关注我们的公众号:磐创AI。

一、具体代码和步骤

可视化我们的决策树模型的第一步是把模型训练出来。下面这个例子是在鸢尾花数据上,采用随机森林的方法训练出来的包含多棵决策树的模型,我们对其中一棵决策树进行可视化

from sklearn.datasetsimport load_iris 
iris = load_iris()

# 导入随机森林模型 (此处也可换成决策树模型)
from sklearn.ensembleimport RandomForestClassifier
model =RandomForestClassifier(n_estimators=10)

# 训练
model.fit(iris.data,iris.target)

# 提取单棵决策树
tree =model.estimators_[5]

训练好我们的模型之后,我们就可以用sklearn自带的export_graphviz函数将决策树模型转换成Graphviz格式

from sklearn.treeimport export_graphviz

# 输出一个.dot格式的文件
export_graphviz(tree,out_file='tree.dot',
                feature_names =iris.feature_names,
                class_names =iris.target_names,
                rounded = True, proportion =False,
                precision = 2, filled = True)

参数含义:

precision 设置输出的纯度指标的数值精度

filled 指定是否为节点上色

max_depth 指定展示出来的树的深度,可以用来控制图像大小

需要下载Graphviz(一款图像可视化软件)来将 .dot文件转成 .png。下载地址见链接:https://graphviz.gitlab.io/download/

有两种方式使用Graphviz这个工具,一种是执行pip install graphviz,然后可以在pyhton调用,另一种是使用命令行,这里我们采用第二种,但是是在python里调用的外部命令行。

# 临时将Graphviz添加到环境变量中
import os
os.environ["PATH"]+= os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/

# 将tree.dot文件转化为tree.png
from subprocess importcall
call(['dot', '-Tpng','tree.dot', '-o', 'tree.png', '-Gdpi=600'])

# 在jupyter notebook中查看决策树图像
from IPython.displayimport Image
Image(filename ='tree.png')

上图就是我们将决策树可视化之后的结果,根据每个节点中的文字内容,我们就可以知道,这个节点包含的数据纯度大小(基尼指数或熵值)选用了哪个属性以及属性值对数据进行再划分,样本量多少,还可以根据节点颜色的深浅来推断类别,不同颜色代表不同类别,颜色深度越浅说明各个类别的混杂程度高,颜色越深说明纯度越高。上图中绿、紫、土黄三个颜色就表示了鸢尾花的三种类别。

通过这样的图,我们可以直观的展示随机森林中的每棵树,甚至推断每棵树形成背后的原因。

二、一个例子

这里我再举一个应用决策树可视化的例子。比如你想知道基于最小熵选择划分属性生成决策树这种方法不能产生一棵最小规模的决策树,即基于最大信息增益的原则去选择最优划分属性。这里我就用可视化决策树的方法来向大家说明这种方法是否可行。现在有下面这样一份数据:

其中a,b,c为三个属性,class为类别,分X,Y两种。在第一次对数据集进行划分时,根据

计算属性的信息增益,得

Gain(D,c)=0.557,Gain(D,a)= Gain(D,b)= 0.2816

这里若基于熵最小方法首先应选择c作为划分属性,最后可得决策树可视化如下图。

在这棵树中,a,b,c三个属性全部被用来进行划分,产生了三个分支节点。但如果我们采用属性a作为第一个划分属性,会得到一棵这样的决策树:

由图可知,其实仅仅用到a,b两个属性即可将数据集完全划分为一颗叶子节点熵为0的完整决策树,这棵树只有两个分支节点,三个叶子结点,其规模显然小于上面的决策树。这个例子说明了基于最小熵的方法生成的决策树规模不一定就是最小的。它只能在局部范围内取得纯度最高的类别划分,是局部最优,从整个生成整棵决策树所有节点的过程来看,它并不能保证生成的节点数是最少的。

怎么样,上面这些例子中,决策树可视化是不是让一切看起来简单明了!

三、总结

现阶段机器学习模型仍然存在着黑盒问题,一张图片并不能彻底解决此问题。尽管如此,观察决策树图的过程还是向我们展示了这个模型并非一个不可解释的方法,而是一系列被提出的逻辑问题和答案,正如我们平时进行预测时所采用的步骤那样。所以,你可以直接复制上面的代码,尽情把这个工具用到你自己的数据集上,解决你的问题吧。

原文发布于微信公众号 - 磐创AI(xunixs)

原文发表时间:2018-09-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器之心

资源 | 一个Python特征选择工具,助力实现高效机器学习

项目地址:https://github.com/WillKoehrsen/feature-selector

1742
来自专栏机器之心

教程 | 使用Keras实现多输出分类:用单个模型同时执行两个独立分类任务

之前我们介绍了使用 Keras 和深度学习的多标签分类(multi-label classification),参阅 https://goo.gl/e8RXtV...

5652
来自专栏挖数

简述【聚类算法】

所谓人以类聚,物以群分。人都喜欢跟自己像的人聚在一起,这些人或者样子长得比较像,或者身高比较像,或者性格比较像,或者有共同的爱好,也就是身上有某些特征是相似的。...

2846
来自专栏ATYUN订阅号

智能主题检测与无监督机器学习:识别颜色教程

介绍 人工智能学习通常由两种主要方法组成:监督学习和无监督的学习。监督学习包括使用现有的训练集,这种训练集由预先标记的分类数据列组成。机器学习算法会发现数据的...

5174
来自专栏计算机视觉战队

论文阅读——Selective Search for Object Recognition

今天认真把Selective Search for Object Recognition这篇文章阅读完,想来写写自己的见解与想法。如果有错,希望得到大牛们的指点...

32010
来自专栏CSDN技术头条

详解 BP 神经网络基本原理及 C 语言实现

BP(Back Propagation)即反向传播,指的是一种按照误差反向传播来训练神经网络的方法。而 BP 神经网络即为一种按照误差反向传播的方法训练的神经网...

3954
来自专栏杨熹的专栏

Ensemble Learners

Udacity Ensemble Learners ---- Boosting Algorithm 不需要绞尽脑汁去想很复杂的 Rules,只需要一些简单的 ...

3597
来自专栏宏伦工作室

动手实现notMNIST数据集图片分类

1973
来自专栏ATYUN订阅号

词序:神经网络能按正确的顺序排列单词吗?

当学习第二语言时,最困难的挑战之一可能是熟悉单词顺序。词序在机器翻译中也很重要,因为翻译大致上是一种处理目标语言词汇的过程,它与源语言是对等的。也许你已经做过一...

3434
来自专栏和蔼的张星的图像处理专栏

7.SSD目标检测之一:运行SSD模型

需要在跟踪模型的前面把检测模型加进去,传统使用一些背景建模和轨迹建模的方式来做,对于动摄像头以及复杂背景的适应性都比较差,所以考虑用深度学习的方法来做。我以前也...

2752

扫码关注云+社区

领取腾讯云代金券