准备工作

sklearn 中决策树的可视化需要安装 graphviz

 

下载安装 graphviz

官网下载地址 http://www.graphviz.org/

官网经常升级,选择适合自己的版本,我选择版本的下载地址 https://www2.graphviz.org/Packages/stable/windows/10/cmake/Release/x64/

双击安装即可

 

设置环境变量

方式1:安装时可选择 把安装路径添加到环境变量

方式2:手动添加环境变量到 PATH

 

检测是否安装成功

命令行任意路径下输入如下命令

 

如果没有安装好,按提示执行命令即可

 

有时候即使安装好了,代码执行仍然不成功,加入如下代码试试

os.environ["PATH"] += os.pathsep + r'C:\Program Files\Graphviz 2.44.1\bin'

C:\Program Files\Graphviz 2.44.1 为安装路径 

 

dot 命令的作用是将 dot 文件转换成 pdf 或者 png

dot -Tpdf iris.dot -o iris.pdf

 

其他异常记录

Format: "jpg" not recognized. Use one of:

需要以管理员身份运行 cmd,执行 dot -c dot -v

 

随机森林可视化

使用 scikit-learn 时没有直接的方法显示随机森林,只能拆解成单棵树来显示;使用随机森林的属性clf.estimators_获取随机森林的决策树列表

 

示例代码

import os
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import export_graphviz

# 系统环境变量添加Graphviz安装路径,以便下面代码可以用dot命令
os.environ["PATH"] += os.pathsep + 'D:/Program Files (x86)/Graphviz2.38/bin'

iris = load_iris()
X, y = iris.data, iris.target
model = RandomForestClassifier(n_estimators=3, max_features=1)
model.fit(X, y)

# 循环打印每棵树
for idx, estimator in enumerate(model.estimators_):
    # 导出dot文件
    export_graphviz(estimator,
                    out_file='tree{}.dot'.format(idx),
                    feature_names=iris.feature_names,
                    class_names=iris.target_names,
                    rounded=True,
                    proportion=False,
                    precision=2,
                    filled=True)
    # 转换为png文件
    os.system('dot -Tpng tree{}.dot -o tree{}.png'.format(idx, idx))

 

或者(接上面代码)

import graphviz
trees = model.estimators_[2]
gra_data = export_graphviz(trees, feature_names=['花萼长度','花萼宽度','花瓣长度','花瓣宽度'])
# 因为标签是中文所以需要将参数设置成支持微软雅黑的格式
# gra_data = gra_data.replace('helvetica','"Microsoft Yahei"')
grap = graphviz.Source(gra_data)
# graph.render(filename ="iris", directory ='./', format='pdf')     保存图片
grap.render('forest')

 

决策树

同随机森林

 

中文乱码

上面的代码如果不行,执行如下操作

notepade 打开 dot 文件,手动修改

digraph Tree {
node [shape=box, style="filled, rounded", color="black", fontname=helvetica] ;
edge [fontname=helvetica] ;

把 fontname=helvetica 改成 fontname="Microsoft YaHei";

如果没有 fontname=helvetica,直接添加  fontname="Microsoft YaHei";

然后执行 dot 命令,如

dot -Tjpg Tree_utf8.dot -o tree1.jpg

 

 

 

参考资料:

https://blog.csdn.net/ydyang1126/article/details/78842952  决策树、随机森林结果可视化

https://blog.csdn.net/guolindonggld/article/details/101135001  随机森林可视化

https://my.oschina.net/u/3896378/blog/4445876  GraphViz可视化决策树和随机森林

 

https://graphviz.readthedocs.io/en/stable/api.html#  graphviz 使用文档官网