准备工作
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 FilesGraphviz 2.44.1in'
C:Program FilesGraphviz 2.44.1 为安装路径
dot 命令的作用是将 dot 文件转换成 pdf 或者 png
dot -Tpdf iris.dot -o iris.pdf
随机森林可视化
使用 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 使用文档官网