xgboost.plot_树将空字符/框/块显示为标签

2024-04-26 17:22:23 发布

您现在位置:Python中文网/ 问答频道 /正文

形势

当我绘制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产生相同的图像
  • 这只是整棵树的一部分,因为这棵树要大得多,所以我无法上传到这里,但这棵树的形状看起来很完美

enter image description here

我尝试过的解决方案

  • 这在绘图方面有问题,我可以毫无问题地绘图-Plot a Single XGBoost Decision Tree
  • 这还有其他问题-xgboost.plot_tree: binary feature interpretation
  • 我已经绘制了@jared_mamrot提供给我的代码,它带来了相同的错误,我已经重新启动并清理了我的环境,并且只在同一个笔记本中运行了第一次enter image description here
  • GitHub Recommendation这个model.get_booster().get_dump(dump_format='text')打印了一个略多于200000个字符=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\。有没有可能我有这个问题,因为它不能显示这么多的文本在这样一个正常大小的图形

Tags: 代码tree图形绘图getplot错误fig
2条回答

我已经将我的整个环境从AWS EC2移动到了一台本地机器上,使其运行得更加完美。AWS EC2还有一些奇怪的东西,比如它不允许在Jupyter实验室使用扩展。它们都是Ubuntu20.04 LTS

我无法重现你的错误。能否请您在问题中添加更多详细信息,并确认此代码有效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")

按评论编辑:

我无法重现此问题/错误。无论哪种软件包版本/字符编码/行尾等,我的笔记本始终正确呈现文本。我唯一能建议的是使用当前版本的所需软件包(conda install notebook 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', 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
prop = FontProperties()
prop.set_file('Arial.ttf')
fig, ax = plt.subplots(figsize=(170, 170))
plot_tree(model, ax=ax, fontproperties=prop)
plt.savefig("test.png")
fig.show()

相关问题 更多 >