python - 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 产生相同的图像
- 这只是整棵树的一部分,因为那要大得多,所以我不能在这里上传,但是树的形状看起来很完美。
我尝试过的解决方案
- 这有绘图问题,我可以毫无问题地绘图 -绘制单个 XGBoost 决策树
- 这还有其他问题 - xgboost.plot_tree:二进制特征解释
- 我已经绘制了@jared_mamrot 给我的代码并且它带来了同样的错误,我已经重新启动并清理了我的环境并仅在同一个笔记本中运行这个拳头。
- GitHub 推荐这
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\
. 我是否有可能遇到此问题,因为它无法在如此正常大小的图表中显示如此多的文本?
解决方案
我无法重现您的错误。您能否为您的问题添加更多详细信息并确认此代码有效?链接到 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将一些字符绘制为空白方块/https://github.com/jupyterlab/jupyterlab/issues/1104/https://github.com/jupyterlab/jupyterlab /issues/3718 / https://github.com/jupyterlab/jupyterlab/pull/3882)并指定您正在使用的字体(例如如何在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()
推荐阅读
- docker - 通过 Kubernetes 上的 nginx 入口中的服务公开容器中的基本路径
- laravel - github composer [InvalidArgumentException] 找不到匹配版本的包 Tohidda/payping
- javascript - JSXGraph - 多边形动画缓慢而粗糙
- python - Python Pandas 在 CSV 中删除并记录错误行
- exchange-server - 识别对禁用用户的每个共享邮箱具有“完全访问权限”和“代表发送”访问权限的所有用户
- python - 使用 python 和 kotlin 进行 Fernet 加密/解密
- c# - DateTimeOffset.TryParse 在 Linux 中失败
- python - 气流并非在字符串格式化期间转换的所有参数
- opencv - 致命错误:opencv2/core/core.hpp:编译caffe时没有这样的文件或目录
- f# - F# 中强类型但用户可扩展的集合?