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 28 Python
python中使用OpenCV进行人脸检测的例子
Apr 18 Python
改进Django中的表单的简单方法
Jul 17 Python
插入排序_Python与PHP的实现版(推荐)
May 11 Python
python使用mysql数据库示例代码
May 21 Python
python中的字符串内部换行方法
Jul 19 Python
Django 配置多站点多域名的实现步骤
May 17 Python
python3的url编码和解码,自定义gbk、utf-8的例子
Aug 22 Python
flask框架配置mysql数据库操作详解
Nov 29 Python
Python 实现Serial 与STM32J进行串口通讯
Dec 18 Python
Python实现弹球小游戏
Aug 01 Python
Python字符串及文本模式方法详解
Sep 10 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
如何使用脚本模仿登陆过程
2006/11/22 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
2013/06/23 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
PHP加密解密类实例代码
2016/07/20 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
2016/10/14 PHP
PHP新特性详解之命名空间、性状与生成器
2017/07/18 PHP
JS获取父节点方法
2009/08/20 Javascript
JQuery 遮罩层实现(mask)实现代码
2010/01/09 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
JS小功能(checkbox实现全选和全取消)实例代码
2013/11/28 Javascript
实例讲解避免javascript冲突的方法
2016/01/03 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
js获取浏览器和屏幕的各种宽度高度
2017/02/22 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
JS实现商品筛选功能
2020/08/19 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
Vue在页面数据渲染完成之后的调用方法
2018/09/11 Javascript
vue--点击当前增加class,其他删除class的方法
2018/09/15 Javascript
js隐式转换的知识实例讲解
2018/09/28 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
ES11新增的这9个新特性,你都掌握了吗
2020/10/15 Javascript
Python 中开发pattern的string模板(template) 实例详解
2017/04/01 Python
python利用urllib和urllib2访问http的GET/POST详解
2017/09/27 Python
Python的多维空数组赋值方法
2018/04/13 Python
深入了解Python在HDA中的应用
2019/09/05 Python
Python2 与Python3的版本区别实例分析
2020/03/30 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
2020/05/17 Python
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
2017/03/02 HTML / CSS
美国大型的健身社区和补充商店:Bodybuilding.com
2016/09/06 全球购物
意大利团购网站:Groupon意大利
2016/10/11 全球购物
求职推荐信范文
2015/03/27 职场文书
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python
漫画「狩龙人拉格纳」公开TV动画预告图
2022/03/22 日漫
Android开发之WECHAT微信小程序路由跳转的两种形式
2022/04/12 Java/Android
Java工作中实用的代码优化技巧分享
2022/04/21 Java/Android