绘制单个XGBoost决策树

21

我正在使用此文中介绍的方法,对XGBoost决策树进行绘图:https://machinelearningmastery.com/visualize-gradient-boosting-decision-trees-xgboost-python/

from numpy import loadtxt
from xgboost import XGBClassifier
from xgboost import plot_tree
import matplotlib.pyplot as plt
# 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 single tree
plot_tree(model)
plt.show()

由于我有150个特征,因此对于所有分裂点,绘图看起来相当小。如何绘制清晰的图形或将其保存在本地或任何其他能够清楚显示这个“树”的方法/想法都将不胜感激。 输入图像描述

4个回答

22

最近我也遇到了同样的问题,我唯一找到的解决方法是尝试不同的图像尺寸(即使用大图像仍可能模糊)。例如,要绘制第4棵树,请使用:

fig, ax = plt.subplots(figsize=(30, 30))
xgb.plot_tree(model, num_trees=4, ax=ax)
plt.show()

保存它,您可以执行以下操作:

plt.savefig("temp.pdf")

此外,每棵树都分离两个类,因此你会有与类别数量相同的树。


5

除了Serk的答案,您还可以在显示图像之前调整其大小:

# ...
plot_tree(model)
plt.gcf().set_size_inches(18.5, 10.5)
plt.show()

5
我在Github上找到了这个解决方法,它可以提供更好的图片,但缺点是您必须在打开.png文件后才能查看。
xgb.plot_tree(bst, num_trees=2)
fig = matplotlib.pyplot.gcf()
fig.set_size_inches(150, 100)
fig.savefig('tree.png')

4

您可以尝试使用 to_graphviz 方法替代 - 对我来说,这样会得到一个更清晰的图片。

xgb.to_graphviz(xg_reg, num_trees=0, rankdir='LR')

然而,很可能你会遇到输出大小的问题。

在这种情况下,请按照以下步骤操作: 如何指定决策树图形化表示的figsize?


这是同一件事。xgb.plot_tree()只是xgb.to_graphviz()的一个非常薄的包装器。 - smci
由于svg难以处理,因此在Jupyter Notebook上显示可能会很慢。 - Mehmet Burak Sayıcı

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接