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制作获取网站目录的图形化程序
May 04 Python
python如何通过protobuf实现rpc
Mar 06 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
Jan 28 Python
python3+PyQt5重新实现自定义数据拖放处理
Apr 19 Python
Python爬虫包BeautifulSoup实例(三)
Jun 17 Python
Python反射和内置方法重写操作详解
Aug 27 Python
python的常见矩阵运算(小结)
Aug 07 Python
python opencv实现gif图片分解的示例代码
Dec 13 Python
MoviePy简介及Python视频剪辑自动化
Dec 18 Python
jupyter notebook远程访问不了的问题解决方法
Jan 11 Python
python 求两个向量的顺时针夹角操作
Mar 04 Python
python获取带有返回值的多线程
May 02 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
乱谈我对耳机、音箱的感受
2021/03/02 无线电
PHP is_dir() 判断给定文件名是否是一个目录
2010/05/10 PHP
PHP 第二节 数据类型之转换
2012/04/28 PHP
PHP JS Ip地址及域名格式检测代码
2013/09/27 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
2014/06/23 PHP
php字符串操作常见问题小结
2016/10/11 PHP
php版银联支付接口开发简明教程
2016/10/14 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
初学Javascript的一些总结
2008/11/03 Javascript
浅谈Javascript 数组与字典
2015/01/29 Javascript
js实现3D图片展示效果
2017/03/09 Javascript
微信小程序 开发MAP(地图)实例详解
2017/06/27 Javascript
vue项目中实现的微信分享功能示例
2019/01/21 Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
2019/05/01 Javascript
Python中操作符重载用法分析
2016/04/29 Python
Python3.6.2调用ffmpeg的方法
2019/01/10 Python
python安装requests库的实例代码
2019/06/25 Python
pytorch numpy list类型之间的相互转换实例
2019/08/18 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
2019/08/29 Python
python 求10个数的平均数实例
2019/12/16 Python
Python实现桌面翻译工具【新手必学】
2020/02/12 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
2020/02/20 Python
iPython pylab模式启动方式
2020/04/24 Python
Python如何重新加载模块
2020/07/29 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
突破canvas语法限制 让他支持链式语法
2012/12/24 HTML / CSS
canvas 阴影和图形变换的示例代码
2018/01/02 HTML / CSS
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
J2EE相关知识面试题
2013/08/26 面试题
网络维护管理员的自我评价分享
2013/11/11 职场文书
总经理岗位职责范本
2014/02/02 职场文书
声乐专业大学生职业生涯规划书:理想的未来需要自己去打造
2014/09/20 职场文书
2015初中政教处工作总结
2015/07/21 职场文书
在Django中使用MQTT的方法
2021/05/10 Python