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中的序列化与反序列化的使用
Jun 30 Python
Python实现FTP上传文件或文件夹实例(递归)
Jan 16 Python
Python入门_浅谈数据结构的4种基本类型
May 16 Python
Python实现的排列组合计算操作示例
Oct 13 Python
python利用标准库如何获取本地IP示例详解
Nov 01 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
Jan 04 Python
Python高级用法总结
May 26 Python
如何用Python来理一理红楼梦里的那些关系
Aug 14 Python
tensorflow 获取所有variable或tensor的name示例
Jan 04 Python
python 实现读取csv数据,分类求和 再写进 csv
May 18 Python
python向企业微信发送文字和图片消息的示例
Sep 28 Python
Python: glob匹配文件的操作
Dec 11 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编程效率 引入缓存机制提升性能
2010/02/15 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
2020/05/02 PHP
jquery 新建的元素事件绑定问题解决方案
2014/06/12 Javascript
JavaScript动态加载样式表的方法
2015/03/21 Javascript
javascript实现复选框选中属性
2015/03/25 Javascript
JavaScript中的对象与JSON
2015/07/03 Javascript
javascript与Python快速排序实例对比
2015/08/10 Javascript
自己动手写的javascript前端等待控件
2015/10/30 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
微信小程序 详解Page中data数据操作和函数调用
2017/01/12 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
vue2 全局变量的设置方法
2018/03/09 Javascript
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
2019/05/09 Javascript
基于 vue-skeleton-webpack-plugin 的骨架屏实战
2019/08/05 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
[01:14]3.19DOTA2发布会 三代刀塔人第二代
2014/03/25 DOTA
Python处理字符串之isspace()方法的使用
2015/05/19 Python
对python遍历文件夹中的所有jpg文件的实例详解
2018/12/08 Python
简单了解django orm中介模型
2019/07/30 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
基于Python实现大文件分割和命名脚本过程解析
2019/09/29 Python
python 实现兔子生兔子示例
2019/11/21 Python
keras 权重保存和权重载入方式
2020/05/21 Python
python numpy实现rolling滚动案例
2020/06/08 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
印度最大的旅游网站:MakeMyTrip
2016/10/05 全球购物
国际贸易专业推荐信
2013/11/15 职场文书
《最大的“书”》教学反思
2014/02/14 职场文书
护士自我鉴定总结
2014/03/24 职场文书
工厂搬迁方案
2014/05/11 职场文书
实现中国梦思想汇报2014
2014/09/13 职场文书
2014年保险业务员工作总结
2014/12/23 职场文书
2016年党建工作简报
2015/11/26 职场文书
青少年法制教育心得体会
2016/01/14 职场文书
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android