实验绘图-用XGboost绘制梯度提升决策树

看到别人论文里面有这样的实现效果,觉得挺高大上的,后来找了一些文章,终于找到了绘制方法。

绘制方案

绘制单个决策树可以提供对给定数据集的梯度提升过程的洞察,帮助理解里面的原理过程。现在举例XGboost模型绘制梯度提升树的方法。

在xgboost库中提供了专门的方法 plot_tree() 用来绘制梯度提升树,在绘制树时将训练好的模型作为方法的第一个参数。

plot_tree(model)

通过matplotlib和plt.show()来打印图像,这样的方法会默认绘制第一颗梯度提升树。(对了,有个前提条件是得先安装好graphviz库才能展现会上面的图来。)

工程案例

接下来展示一个完整的绘制的代码,比如我们使用xgboost在印第安人糖尿病数据集上训练一个模型并打印出训练好的第一颗梯度提升树来,可以看到对应的是下面这样的代码。

# plot decision tree
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()

运行程序就可以得到下面第一个决策树的图,显示了每个分割的特征和特征值以及输出叶节点。  可以看到特征都被重命名为f1、f2这样的特征名,特征值则作为每次分裂节点的一句。

进一步的

我们可以使用plot_tree()内部的参数num_trees和rankdir调整下想看到的图形效果。其中:

         *num_trees表示想要看到第几颗梯度提升树

         *rankdir表示树的摆布方向

扫描二维码关注公众号,回复: 3134004 查看本文章

通过对上面参数的调整,我们可以看到不同的图形效果。

比如我们设置下面的方法设置,其中0表示第一棵树,LR表示树的摆布方向(由左向右摆布)

plot_tree(model, num_trees=0, rankdir='LR')

可以看到对应的展示图像为:

同理,设置不同的num_trees值可以看到对不同的树的显示。

猜你喜欢

转载自blog.csdn.net/maqunfi/article/details/82498195