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 -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, node [fontname="FangSong" shape=plaintext]) digraph.view(./xgb_visualization/xgb_province_0)
重新生成图片,中文乱码问题解决。
代码修改记录:
代码入口位置:
ctrl + 左键进入源代码: 此方法的返回值上进行设置值,故查看返回值: 进入Digraph: Digraph类中无具体信息,查看父类Dot:
其中body是一个list,添加属性进去即可; 或者在node_attr中添加属性,如下:
至此问题解决,希望能帮到你。加油!