Xgboost可视化中文乱码问题

Xgboost生成png图片方法

# xgb 训练好的模型,num_trees 获取第1个数的可视化结果
digraph = xgboost.to_graphviz(xgb, num_trees=0)
digraph.format = 'png'
digraph.view('./xgb_visualization/xgb_province_0')

上述代码会生成文件如下:
可视化文件
会出现中文乱码问题,如下:
乱码问题实例

搜索资料查到的信息:

graphviz默认设置下是不支持中文,如果在dot文件中直接写中文,会显示成乱码,要解决这个问题要做两件事,

1、把源文件保存为UTF-8的格式
2、设置fontname,也就是在node属性里添加fontname一项。例如下图标记处fontname="FangSong"表示结点中字体用仿宋体。

打开,xgb_province_0结果如下:
dot文件
按照上面的信息,添加

添加node
通过命令行生成图片中文乱码问题解决,具体命令如下

dot -Tjpg xgb_province_0 -o xgb_province_0.jpg

结果:
中文乱码问题解决

代码修改

在上面的分析中发现是代码生成的dot文件少一个node,故添加一个中文字体的node即可,代码如下:

digraph = xgboost.to_graphviz(xgb, num_trees=0)
digraph.format = 'png'
# 添加一个node,防止中文乱码问题
digraph.body.insert(0, '\tnode [fontname="FangSong" shape=plaintext]')
digraph.view('./xgb_visualization/xgb_province_0')

重新生成图片,中文乱码问题解决。

代码修改记录:

代码入口位置:
在这里插入图片描述

ctrl + 左键进入源代码:
在这里插入图片描述
此方法的返回值上进行设置值,故查看返回值:
在这里插入图片描述
进入Digraph:
在这里插入图片描述
Digraph类中无具体信息,查看父类Dot:
在这里插入图片描述

其中body是一个list,添加属性进去即可;
或者在node_attr中添加属性,如下:
在这里插入图片描述

至此问题解决,希望能帮到你。加油!

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值