决策树可视化保姆级教程

决策树可视化指南

决策树是机器学习的一种经典的模型,因其泛化性能好,可解释性强而被广泛应用到实际商业预测中。通常在我们完成决策树模型搭建后,我们会进一步研究分析我们搭建好的模型,这时候模型的可视化就显得尤为重要。下面是生成的决策树可视化图像:
在这里插入图片描述

插件安装

scikit-learn中决策树的可视化一般需要安装graphviz。主要包括graphviz库的安装和python的graphviz插件的安装。
安装graphviz库:

  • pip install graphviz

安装graphviz插件:

  1. 安装插件地址:http://www.graphviz.org,下载对应的插件。
  2. 安装插件(默认安装地址,直接一直点下一步直到完成安装)
  3. 环境配置: 复制安装目录的bin路径:C:\Program Files\Graphviz\bin
    (a)打开我的电脑,点击属性
    在这里插入图片描述
    (b)选择高级设置
    在这里插入图片描述
    (c)选择环境变量
    在这里插入图片描述
    (d)双击选择Path进入
    在这里插入图片描述
    (e)新建,粘贴的前面复制的bin路径,点击确定
    在这里插入图片描述
    (f)重启jupter notebook即可

可视化的三种方法

搭建模型

from sklearn import tree
dtree = tree.DecisionTreeClassifier()
dtree.fit(x_train,y_train)

在搭建完决策树后,下面介绍可视化具体操作的三种方法
方法一:
简单粗暴,一行代码搞定什么都不用安装。缺点也很明显,生成的可视化图比较模糊,且不能保存图片,违背了可视化的初衷,不建议使用这种方法。

tree.plot_tree(bdtree,filled=True)

方法二:
这种方法比较常用,需要安装graphviz库和graphviz插件,安装方法上面已经介绍。这种使用这种方法得到的图像比较高清,并且还会额外生成PDF文件和一个文本文件。比较推荐使用。

import graphviz
dot_data = tree.export_graphviz(dtree,
                               out_file=None,
                               feature_names=feature_names,
                               class_names=class_names,
                               filled=True,
                               rounded=True,
                               special_characters=True)
graph = graphviz.Source(dot_data)
graph.render('computer')

方法三:
最后一种方法是最麻烦的,除了需要安装graphviz库和graphviz插件,还需要安装:

  • pip install pydotplus
  • pip install six
    这种方法得到的图像比较清晰,且可以双击放大缩小,可以保存为png图片和pdf文档。这种方法根据个人需求使用吧。
# 决策树可视化
import graphviz
import pydotplus
from six import StringIO
from sklearn.tree import export_graphviz
from IPython.display import Image

# 文件缓存
dot_data = StringIO()
# 将决策树导入到dot中
export_graphviz(bdtree, out_file=dot_data,  
                filled=True, rounded=True,
                special_characters=True,feature_names = feature_names,class_names=class_names)
# 将生成的dot文件生成graph
print(feature_names)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())  
# 将结果存入到png文件中
graph.write_png('diabetes.png')
graph.write_pdf('diabetes.pdf')
# 显示
Image(graph.create_png())

注意事项

在我们做可视化的时候,需要注意中各重要的参数:

  1. feature_names
  2. class_names

在做可视化的时候需要传入这两个参数,这两个参数都需要传入一个列表类型的数据,并且两个参数需要与模型传入的数据一一对应,否则就违背了可视化的初衷了。
feature_names:
假如我们的数据格式是DataFrame格式通常可以在数据处理后通过以下方法获取(也可以手动输入):

feature_names = data.columns[:-1]

class_names:

  • 这个参数如果类别数不多的话,最好手动输入。或者通过data[‘分类标签’].unique()获取后再做格式转换和顺序调整

决策树可视化实战

在这里插入图片描述

from sklearn import tree 
import pandas as pd

data = pd.read_csv('zoo.csv')
data.head()

# 获取训练数据和标签
x_data  = data.drop(['animal_name', 'class_type'], axis=1)
y_data = data['class_type']

# 搭建模型
dtree = tree.DecisionTreeClassifier()
dtree.fit(x_data,y_data)

# 获取feature_names和class_names
feature_names = data.columns[1:-1]

cls_n = data.class_type.unique()
class_names = []
for i in cls_n:
   class_names.append(str(i))
class_names.sort()

# # 方法一
# tree.plot_tree(dtree,filled=True)

# # 方法二
# import graphviz

# dot_data = tree.export_graphviz(dtree,
#                                out_file=None,
#                                feature_names=feature_names,
#                                class_names=cls_n,
#                                filled=True,
#                                rounded=True,
#                                special_characters=True)
# graph = graphviz.Source(dot_data)

# graph.render('computer')
# graph
# 方法三
import graphviz
import pydotplus
from six import StringIO
from IPython.display import Image  

# 文件缓存
dot_data = StringIO()
# 将决策树导入到dot中
tree.export_graphviz(dtree, out_file=dot_data,  
               filled=True, rounded=True,
               special_characters=True,feature_names = feature_names,class_names=class_names)
# 将生成的dot文件生成graph
print(feature_names)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())  
# 将结果存入到png文件中
graph.write_png('diabetes.png')
graph.write_pdf('diabetes.pdf')
# 显示
Image(graph.create_png())
  • 7
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

现实、狠残酷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值