Press "Enter" to skip to content

使用 dtreeviz 创建惊人的决策树可视化

如何使用这个有用的库可视化决策树模型

Image by the Author, created using dtreeviz.

当涉及到模型可解释性时,决策树是最直观和可解释的模型之一。每个决策树模型都可以解释为一组易于理解的规则。能够可视化决策树模型对于模型可解释性非常重要,可以帮助利益相关者和业务经理信任这些模型。

幸运的是,我们可以使用dtreeviz库轻松可视化和解释决策树。在本文中,我将演示如何使用dtreeviz可视化回归和分类的基于树的模型。

安装dtreeviz

您可以使用以下命令轻松使用pip安装dtreeviz:

pip install dtreeviz

有关依赖项和可能需要根据您的操作系统安装的其他库的详细列表,请参阅此GitHub存储库。

可视化回归树

在本节中,我们将在糖尿病数据集上训练一个决策树回归器。请注意,您可以在此GitHub存储库中找到本教程的所有代码。请记住,我使用Jupyter作为运行此Python代码的环境。您可以在此Github存储库中找到我为本教程编写的所有代码。

导入库

在下面的代码块中,我简单地导入了一些常用库,包括scikit-learn DecisionTree模块和dtreeviz。

import numpy as npimport pandas as pdfrom sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressorimport dtreeviz

读取数据

糖尿病数据集可在scikit-learn中找到,因此我们可以使用以下代码导入数据集,并将特征和目标值存储在名为X和y的numpy数组中。

from sklearn.datasets import load_diabetesdiabetes_data = load_diabetes()X = pd.DataFrame(data = diabetes_data['data'], columns=diabetes_data['feature_names'])y = diabetes_data['target']

训练决策树模型

为了使树易于可视化,我们可以限制决策树的最大深度,并按如下方式对数据进行训练。

dtree_reg = DecisionTreeRegressor(max_depth=3)dtree_reg.fit(X, y)

可视化树

dtreeviz的关键特点之一是能够可视化决策树模型。使用下面的代码,我们可以创建一个酷炫的决策树可视化,该可视化还直观地描绘了每个节点的决策边界。

viz_model = dtreeviz.model(dtree_reg,                           X_train=X, y_train=y,                           feature_names=list(X.columns),                           target_name='diabetes')viz_model.view()
Diabetes regression tree visualization. Image created with dtreeviz by the author.

请注意,上面的可视化还给出了每个叶子节点的决策边界和特征空间以及每个叶子的回归输出和样本大小。

可视化叶子分布

dtreeviz提供的另一个有用函数是可视化叶子分布的功能。决策树的叶节点包含决策树将根据每组条件预测的实际值。使用rtree_leaf_distributions函数,我们可以为我们的回归树创建此可视化。

import matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D%matplotlib inlineviz_model.rtree_leaf_distributions()

使用 dtreeviz 创建惊人的决策树可视化 数据科学 第3张

通过上面的可视化,我们可以看到决策树可以预测名为糖尿病的目标变量的值为268.9、208.6、176.9、137.7、154.7、274.0、83.4或108.8。水平分散的点表示糖尿病目标变量的值分布,小黑线表示用于该叶节点预测的平均值。理想情况下,叶子分布应该具有低方差,以便我们对用于预测的平均值更有信心。

可视化叶子样本数量

我们还可以使用下面的函数可视化叶子大小或每个叶子节点的样本数。

viz_model.leaf_sizes()

使用 dtreeviz 创建惊人的决策树可视化 数据科学 第4张

根据上面的图表,我们可以看到每个叶子的样本数。这种可视化是评估回归树预测信心程度的好工具。

可视化分类树

我们还可以使用dtreeviz可视化分类树,这些可视化与用于回归树的可视化略有不同。对于这一部分,我们将使用乳腺癌威斯康星州数据集来训练和可视化决策模型。

读取数据

乳腺癌威斯康星州数据集可在scikit-learn中获得,因此我们只需使用以下代码加载它。

from sklearn.datasets import load_breast_cancercancer_data = load_breast_cancer()X = pd.DataFrame(data = cancer_data['data'], columns=cancer_data['feature_names'])y = cancer_data['target']

训练决策树模型

像往常一样,使用scikit-learn训练决策树模型非常简单。我们还可以对最大树深度加以限制,以便更容易地可视化决策树。

dtree_clf = DecisionTreeClassifier(max_depth=4)dtree_clf.fit(X, y)

可视化决策树

我们可以使用与回归树部分完全相同的函数来可视化分类树。但是,可视化将略有不同。

viz_model = dtreeviz.model(dtree_clf,                           X_train=X, y_train=y,                           feature_names=list(X.columns),                           target_name='cancer')viz_model.view()
癌症分类决策树。

请注意,上面的分类树可视化与前一节中的回归树可视化不同。我们没有在每个节点上看到所选特征和目标的散点图,而是看到彩色的直方图,显示每个节点的类分布。

可视化叶子分布

我们也可以使用与回归树的可视化叶子分布相同的函数可视化叶子的类分布。

viz_model.ctree_leaf_distributions()
分类树的叶子分布图。图像由作者使用dtreeviz创建。

每个叶子都有一个堆叠条形图,显示该叶子的样本的类标签分布。大多数叶子具有属于一个类的样本,这是一个好的迹象,有助于我们对模型的预测获得一些信心。

可视化特征空间

我们也可以使用下面的函数可视化分类器的特征空间。

viz_model.ctree_feature_space()

使用 dtreeviz 创建惊人的决策树可视化 数据科学 第7张

上面的特征空间图给出了分类树的训练精度,以及两个特征的散点图和可用于分离两个类别的线性决策边界。

总结

在可视化基于树的模型方面,dtreeviz是一个提供了几个有用的可视化函数的强大库。我只涵盖了这个库提供的一些函数,还有许多其他功能可以在dtreeviz的GitHub存储库中了解。如往常一样,您可以在我的GitHub上找到本文的所有代码。

加入我的邮件列表

加入我的邮件列表以获取有关我的数据科学内容的更新。当您注册时,还将获得我的免费逐步解决机器学习问题指南!您也可以在Twitter上关注我以获取内容更新。

在此期间,考虑加入小猪AI社区,以阅读来自其他数千位作者的文章。

来源

  1. Terence Parr, dtreeviz: Decision Tree Visualization, (2023), GitHub。
Leave a Reply

Your email address will not be published. Required fields are marked *