python工具dtreeviz决策树可视化和模型可解释性


Posted in Python onMarch 03, 2022

前言:

决策树是梯度提升机和随机森林的基本构建块,在学习这些模型的工作原理和模型可解释性时,可视化决策树是一个非常有帮助。不过,当前的可视化包还很初级,对新手没有多少帮助。

最近逛 Github 时,发现一款非常棒的 dtreeviz 工具库:它用于决策树可视化和模型解释。使用 dtreeviz 可以可视化特征空间如何在决策节点上分割,训练样本如何分布在叶节点中,树如何对特定观察进行预测等等。这些操作对于理解分类或回归决策树的工作方式至关重要。

一、安装

pip install dtreeviz             # install dtreeviz for sklearn
pip install dtreeviz[xgboost]    # install XGBoost related dependency
pip install dtreeviz[pyspark]    # install pyspark related dependency
pip install dtreeviz[lightgbm]   # install LightGBM related dependency

二、用法

dtree:创建决策树可视化的主要功能。给定决策树回归器或分类器,使用 graphviz 创建并返回树可视化。

1.所需的库

导入所需要的基本库

from sklearn.datasets import *
from sklearn import tree
from dtreeviz.trees import *

2.回归决策树

树的默认方向是自上而下,但您可以使用orientation=“LR” 将其更改为从左到右。view() 给出一个带有渲染的 graphviz 对象的弹出窗口。

regr = tree.DecisionTreeRegressor(max_depth=2)
boston = load_boston()
regr.fit(boston.data, boston.target)

viz = dtreeviz(regr,
               boston.data,
               boston.target,
               target_name='price',
               feature_names=boston.feature_names)
              
viz.view()    

python工具dtreeviz决策树可视化和模型可解释性

3.分类决策树

分类树需要class_names 的附加参数,给出类值与类名的映射。

classifier = tree.DecisionTreeClassifier(max_depth=2)  # limit depth of tree
iris = load_iris()
classifier.fit(iris.data, iris.target)

viz = dtreeviz(classifier, 
               iris.data, 
               iris.target,
               target_name='variety',
               feature_names=iris.feature_names, 
               class_names=["setosa", "versicolor", "virginica"]  # need class_names for classifier
              )  
              
viz.view() 

python工具dtreeviz决策树可视化和模型可解释性

4.预测路径

突出显示参数 X 中传递的单个观察的特征值所在的决策节点。给出观察的特征值并突出树用于遍历路径的特征。

regr = tree.DecisionTreeRegressor(max_depth=2)  # limit depth of tree
diabetes = load_diabetes()
regr.fit(diabetes.data, diabetes.target)
X = diabetes.data[np.random.randint(0, len(diabetes.data)),:]  # random sample from training

viz = dtreeviz(regr,
               diabetes.data, 
               diabetes.target, 
               target_name='value', 
               orientation ='LR',  # left-right orientation
               feature_names=diabetes.feature_names,
               X=X)  # need to give single observation for prediction
              
viz.view()  

python工具dtreeviz决策树可视化和模型可解释性

如果只想可视化预测路径,则需要设置参数show_just_path=True

dtreeviz(regr,
        diabetes.data, 
        diabetes.target, 
        target_name='value', 
        orientation ='TD',  # top-down orientation
        feature_names=diabetes.feature_names,
        X=X, # need to give single observation for prediction
        show_just_path=True     
        )

python工具dtreeviz决策树可视化和模型可解释性

5.解释预测路径

这些可视化对于向没有机器学习技能的人解释为什么您的模型做出特定预测很有用。在explain_type=plain_english 的情况下,它在预测路径中搜索并找到特征值范围。

X = dataset[features].iloc[10]
print(X)
Pclass              3.0
Age                 4.0
Fare               16.7
Sex_label           0.0
Cabin_label       145.0
Embarked_label      2.0

print(explain_prediction_path(tree_classifier, X, feature_names=features, explanation_type="plain_english"))
2.5 <= Pclass 
Age < 36.5
Fare < 23.35
Sex_label < 0.5

explain_type=sklearn_default(仅适用于scikit-learn)的情况下,我们可以仅可视化预测路径中涉及的特征的重要性。 特征的重要性是基于杂质的平均减少来计算的。

explain_prediction_path(tree_classifier, X, feature_names=features, explanation_type="sklearn_default")

python工具dtreeviz决策树可视化和模型可解释性

此外我们还可以自定义颜色,比如:

dtreeviz.trees.dtreeviz(regr,
                        boston.data,
                        boston.target,
                        target_name='price',
                        feature_names=boston.feature_names,
                        colors={'scatter_marker': '#00ff00'})

python工具dtreeviz决策树可视化和模型可解释性

 到此这篇关于python工具dtreeviz决策树可视化和模型可解释性的文章就介绍到这了,更多相关python工具dtreeviz内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python操作mysql中文显示乱码的解决方法
Oct 11 Python
python实现堆和索引堆的代码示例
Mar 19 Python
对Python3.6 IDLE常用快捷键介绍
Jul 16 Python
Python面向对象基础入门之编码细节与注意事项
Dec 11 Python
Python编写合并字典并实现敏感目录的小脚本
Feb 26 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
Oct 30 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
Nov 08 Python
Python读取分割压缩TXT文本文件实例
Feb 14 Python
Jupyter notebook 远程配置及SSL加密教程
Apr 14 Python
python实现简单的tcp 文件下载
Sep 16 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
Sep 29 Python
Pytorch数据读取之Dataset和DataLoader知识总结
May 23 Python
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
python机器学习实现oneR算法(以鸢尾data为例)
Mar 03 #Python
详解python的异常捕获
Mar 03 #Python
分享提高 Python 代码的可读性的技巧
Mar 03 #Python
使用python创建股票的时间序列可视化分析
Python Pandas读取Excel日期数据的异常处理方法
pytorch中的torch.nn.Conv2d()函数图文详解
Feb 28 #Python
You might like
用PHP发电子邮件
2006/10/09 PHP
php中current、next与reset函数用法实例
2014/11/17 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
2015/07/04 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
2015/08/28 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
2016/09/30 PHP
PHP查询大量数据内存耗尽问题的解决方法
2016/10/28 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
Swoole源码中如何查询Websocket的连接问题详解
2020/08/30 PHP
JAVASCRIPT keycode总结
2009/02/04 Javascript
apycom出品的jQuery精美菜单破解方法
2011/02/18 Javascript
解析使用js判断只能输入数字、字母等验证的方法(总结)
2013/05/14 Javascript
jQuery中height()方法用法实例
2014/12/24 Javascript
jquery中checkbox全选失效的解决方法
2014/12/26 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
2016/09/24 Javascript
js面向对象编程总结
2017/02/16 Javascript
HTML5开发Kinect体感游戏的实例应用
2017/09/18 Javascript
详解NODEJS的http实现
2018/01/04 NodeJs
Node.js之删除文件夹(含递归删除)代码实例
2019/09/09 Javascript
[01:21]DOTA2 新英雄 森海飞霞
2020/12/18 DOTA
python利用beautifulSoup实现爬虫
2014/09/29 Python
在Python中使用NLTK库实现对词干的提取的教程
2015/04/08 Python
在Python中使用元类的教程
2015/04/28 Python
python中list列表的高级函数
2016/05/17 Python
一篇文章读懂Python赋值与拷贝
2018/04/19 Python
用TensorFlow实现lasso回归和岭回归算法的示例
2018/05/02 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
Linux下安装python3.6和第三方库的教程详解
2018/11/09 Python
pyQT5 实现窗体之间传值的示例
2019/06/20 Python
python实现PID算法及测试的例子
2019/08/08 Python
解决tensorflow读取本地MNITS_data失败的原因
2020/06/22 Python
美国农场鲜花速递:The Bouqs
2018/07/13 全球购物
教育学习自我评价
2014/02/03 职场文书
十八大感想感言
2014/02/10 职场文书
加薪申请报告范本
2015/05/15 职场文书
Python基础 括号()[]{}的详解
2021/11/07 Python
Python实现视频自动打码的示例代码
2022/04/08 Python