- 第一步:先下载安装Graphviz,并将其安装路径中的bin文件夹所在路径添加进系统变量里面去;
具体步骤链接如下:
https://blog.youkuaiyun.com/HNUCSEE_LJK/article/details/86772806 - 完成第一步后,需要修改graphviz配置文件,网上怎么修改众说纷纭,这么亲测有效:
找到graphviz安装目录,进入该文件夹: G:\Program Files (x86)\Graphviz2.38\etc\fonts
如图,打开点中文件
将<! --Font directory list -->以下的一行修改成如下样式
修改成这个样子,如果担心出错,记得备份 哦
3. 完成前两步后,可以开始生成和保存决策树了,这个可视化过程和方法很多,这里介绍一种常用的
参考链接如下:
https://blog.youkuaiyun.com/qq_22194911/article/details/80882853
https://blog.youkuaiyun.com/weixin_41713230/article/details/87860133
from sklearn.tree import export_graphviz
def save_dot_data(model,feature_names,class_names):
'''
输入:模型名称 特征名称 类别名称
输出:None
生成一个决策树,注意这里生成的树默认字体 fontname=helvetica,不支持中文
'''
dot_data = tree.export_graphviz(model, out_file=None,
feature_names=feature_names, ###特征名称
class_names=class_names, ###类别名称
filled=True, rounded=True)
with open('dot_data.txt', 'w',encoding='utf-8') as f: ##将生成树写入,因为含有中文,所以encoding='utf-8'
f.writelines(dot_data) ##另外,需要注意,这里的生成格式可以有很多种,常见的有 .dot .txt
return None
- 将dot_data文件格式进行转换
如我的个例中生成的决策树内容如下(可用记事本打开),注意这里的字体为helvetica,以下我们需要做的就是进行格式转换,换成支持中文的字体"Microsoft YaHei" .注意,
注意:这里不可强行在记事本上将字体进行替换,这样改动后在转换成pdf或者png格式时候会出错(因为我曾经这么试过)
digraph Tree {
node [shape=box, style=“filled, rounded”, color=“black”, fontname=helvetica] ;
edge [fontname=helvetica] ;
0 [label=“湿侧CAPE <= 943.0\ngini = 0.48\nsamples = 30\nvalue = [12, 18]\nclass = CI”, fillcolor="#399de555"] ;
1 [label=“gini = 0.0\nsamples = 9\nvalue = [9, 0]\nclass = NO_CI”, fillcolor="#e58139ff"] ;
0 -> 1 [labeldistance=2.5, labelangle=45, headlabel=“True”] ;
2 [label=“露点梯度 <= 17.0\ngini = 0.245\nsamples = 21\nvalue = [3, 18]\nclass = CI”, fillcolor="#399de5d4"] ;
0 -> 2 [labeldistance=2.5, labelangle=-45, headlabel=“False”] ;
3 [label=“gini = 0.0\nsamples = 15\nvalue = [0, 15]\nclass = CI”, fillcolor="#399de5ff"] ;
2 -> 3 ;
4 [label=“干区相当位温 <= 313.846\ngini = 0.5\nsamples = 6\nvalue = [3, 3]\nclass = NO_CI”, fillcolor="#e5813900"] ;
2 -> 4 ;
5 [label=“gini = 0.0\nsamples = 3\nvalue = [0, 3]\nclass = CI”, fillcolor="#399de5ff"] ;
4 -> 5 ;
6 [label=“gini = 0.0\nsamples = 3\nvalue = [3, 0]\nclass = NO_CI”, fillcolor="#e58139ff"] ;
4 -> 6 ;
}
import codecs
txt_dir = 'dot_data.txt'
txt_dir_utf8 = 'dot_data_utf8.txt'
with codecs.open(txt_dir, 'r',encoding='utf-8') as f, codecs.open(txt_dir_utf8, 'w', encoding='utf-8') as wf:
for line in f:
lines = line.strip().split('\t')
print(lines)
if 'label' in lines[0]:
newline = lines[0].replace('\n', '').replace(' ', '')
else:
newline = lines[0].replace('\n','').replace('helvetica', ' "Microsoft YaHei" ')
wf.write(newline + '\t')
-
之后在命令窗口用graphviz进行格式转换
5.1 进入cmd
5.2 cd 文件所在目录
5.3 dot -Tpng dot_data_utf8.txt -o tree.png ##这是转换成png图片,也可以转换成pdf格式,命令如下:
dot -Tpdf dot_data_utf8.txt -o tree.pdf -
补充
像步骤5这样的先生成树,再在终端进行转换成可视化模式,如png pdf等,比较麻烦。
因为在实践操作中,经常需要实时查看我们的决策树长什么样,最好能在console窗口即时展示。
因此可以加入如下代码:
import graphviz
import pydotplus
from IPython.display import Image
import IPython
with open('dot_data_utf8.txt',encoding='utf-8') as f:
dot_graph=f.read()
graph = pydotplus.graph_from_dot_data(dot_graph)
filename=tree+'.png'
graph.write_png(filename) # 生成png文件
a=Image(graph.create_png())
print(IPython.display.display(a)) ##直接在console上显示决策树
需要额外注意的是,使用pydotplus之前,一定要确保之前安装的graphviz的bin文件夹路径添加进了系统路径中,
如果没有设置成功,可以通过如下代码进行添加,
import os
os.environ["PATH"] += os.pathsep + 'G:/Program Files (x86)/Graphviz2.38/bin/'
之后,便可以正常显示了
大功告成!!!