决策树结果可视化中文乱码问题解决方案
程序员文章站
2022-07-14 16:22:06
...
问题描述:
因决策树可解释强,采用决策树来处理分类问题,在导出结果时,出现中文无法显示的问题(中文显示为框框)。这种情况是由于字体的原因导致的,解决方法如下:
1. 修改Graphviz配置文件
字体配置文件 fonts.conf 路径:C:\Program Files (x86)\Graphviz2.38\fonts
将 <dir>#FONTDIR#</dir> <dir>~/.fonts</dir> 更改为
<dir>C:/Windows/Fonts</dir> <dir>~/.fonts</dir>
2. 将决策树dot文件保存下来
查看保存在本地的 dot_data.dot 可发现,其默认字体 fontname=helvetica,只需将字体修改为支持的中文字体即可,通过正则表达式实现替换。
# dot_data.dot文件内容
digraph Tree {
node [shape=box, style="filled, rounded", color="black", fontname=helvetica] ;
edge [fontname=helvetica] ;
dot_data = export_graphviz(decision_tree=clf,
out_file=None,
feature_names=feature_names,
class_names=class_names,
filled=True,
rounded=True,
special_characters=True)
with open("./dot_data.dot", 'w', encoding="utf-8") as f: # 注意编码方式
f.writelines(dot_data)
# 打开 dot_data.dot,修改 fontname="支持的中文字体"
f = open("./dot_data.dot", "r+", encoding="utf-8")
open('./dot_test.dot', 'w').write(re.sub(r'fontname=helvetica', 'fontname="Microsoft YaHei"', f.read()))
3. 在操作命令窗口用graphviz导出结果
可将结果导出为 PDF 或 PNG图片,结果如下,可正常显示中文。
# dot -Tpng dot_test.dot -o test.png # 将结果保存为图片
# dot -Tpdf dot_test.dot -o test-2.pdf # 将结果保存为 PDF
下一篇: mysql 创建帐号并授权