如何解决xgboost.plot_tree显示-空字符/框/块作为标签
情况
当我绘制xgboost.plot_tree
时,仅在图形上得到了一堆空字符/框/块,而不是标题,标签和数字。我使用了400多个功能,因此可以成为其中的一个促成因素。
代码1
fig,ax = plt.subplots(figsize=(170,170))
plot_tree(xgbmodel,ax=ax)
plt.savefig("temp.pdf")
plt.show()
代码2
plot_tree(xgbmodel,num_trees=2)
fig = plt.gcf()
fig.set_size_inches(150,100)
fig.savefig('tree.png')
错误
- 代码1和代码2产生相同的图像
- 这只是整棵树的一部分,因为它更大,所以我不能在这里上传,但是树的形状看起来很完美。
我尝试过的解决方案
- 这存在绘图问题,我可以毫无问题地进行绘图-Plot a Single XGBoost Decision Tree
- 这还有其他问题-xgboost.plot_tree: binary feature interpretation
- 我已经绘制了@jared_mamrot给我的代码,它带来了相同的错误,我重新启动并清理了我的环境,并且只能在同一笔记本上运行此拳头。
- GitHub Recommendation的
model.get_booster().get_dump(dump_format='text')
打印出的字体略多于200'000个字符= 63张A4大小的11尺寸Calibri字体的页面,看起来很正确,例如:0.0268656723\n\t\t\t\t\t34:[f0<6.5] yes=53,no=54,missing=53\n\t\t\t\t\t\
。我可能有这个问题,因为它不能在这么大的尺寸图中显示太多文本吗?
解决方法
我无法重现您的错误。您能否在问题中添加更多详细信息并确认此代码有效? link to pima-indians-diabetes.csv
#!/usr/bin/env python3
# plot decision tree
from numpy import loadtxt
from xgboost import XGBClassifier
from xgboost import plot_tree
import matplotlib.pyplot as plt
import graphviz
# load data
dataset = loadtxt('pima-indians-diabetes.csv',delimiter=",")
# split data into X and y
X = dataset[:,0:8]
y = dataset[:,8]
# fit model no training data
model = XGBClassifier()
model.fit(X,y)
# plot/save fig
fig,ax = plt.subplots(figsize=(170,170))
plot_tree(model,ax=ax)
plt.savefig("test.pdf")
编辑每个评论:
我无法重现此问题/错误。无论哪个包版本/ char编码/行尾/等,我的笔记本始终可以正确显示文本。我唯一能建议的就是使用所需软件包的最新版本(conda安装笔记本numpy matplotlib xgboost graphviz python-graphviz)安装新的虚拟环境(例如miniconda)并再次进行测试。
此外,请确保您没有Windows行尾(请参阅:Matplotlib plotting some characters as blank square / https://github.com/jupyterlab/jupyterlab/issues/1104 / https://github.com/jupyterlab/jupyterlab/issues/3718 / https://github.com/jupyterlab/jupyterlab/pull/3882)并指定要使用的字体(例如How to change fonts in matplotlib (python)?):
# plot decision tree
from numpy import loadtxt
from xgboost import XGBClassifier
from xgboost import plot_tree
from matplotlib.font_manager import FontProperties
import matplotlib.pyplot as plt
import graphviz
# load data
dataset = loadtxt('pima-indians-diabetes.csv',y)
# plot/save fig
prop = FontProperties()
prop.set_file('Arial.ttf')
fig,ax=ax,fontproperties=prop)
plt.savefig("test.png")
fig.show()
,
我已经将整个环境从AWS EC2移到了本地机器上,而不是运行得很好。 AWS EC2还有其他一些奇怪的事情,例如不允许在Jupyter Lab中使用Extension。它们都是Ubuntu 20.04 LTS。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。