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 相关文章推荐
java直接调用python脚本的例子
Feb 16 Python
python求crc32值的方法
Oct 05 Python
Django返回json数据用法示例
Sep 18 Python
python爬虫实现教程转换成 PDF 电子书
Feb 19 Python
python互斥锁、加锁、同步机制、异步通信知识总结
Feb 11 Python
Python 读取指定文件夹下的所有图像方法
Apr 27 Python
Selenium(Python web测试工具)基本用法详解
Aug 10 Python
python实现括号匹配的思路详解
Aug 23 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
Aug 13 Python
解决django 向mysql中写入中文字符出错的问题
May 18 Python
基于Python爬取51cto博客页面信息过程解析
Aug 25 Python
Python编写nmap扫描工具
Jul 21 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
不用数据库的多用户文件自由上传投票系统(1)
2006/10/09 PHP
PHP 时间转换Unix时间戳代码
2010/01/22 PHP
php5 non-thread-safe和thread-safe这两个版本的区别分析
2010/03/13 PHP
php后门URL的防范
2013/11/12 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
2016/04/02 PHP
php+Memcached实现简单留言板功能示例
2017/02/15 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
2017/06/09 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
2019/05/05 PHP
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
2006/12/27 Javascript
又一个小巧的图片预加载类
2007/05/05 Javascript
JavaScript的eval JSON object问题
2009/11/15 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
2013/06/24 Javascript
用Jquery.load载入页面实现局部刷新
2014/01/22 Javascript
Select下拉框模糊查询功能实现代码
2016/07/22 Javascript
JavaScript对象_动力节点Java学院整理
2017/06/23 Javascript
十大 Node.js 的 Web 框架(快速提升工作效率)
2017/06/30 Javascript
SpringMVC简单整合Angular2的示例
2017/07/31 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
利用express启动一个server服务的方法
2017/09/17 Javascript
React路由管理之React Router总结
2018/05/10 Javascript
在nuxt中使用路由重定向的实例
2020/11/06 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
python-docx修改已存在的Word文档的表格的字体格式方法
2018/05/08 Python
Python代码块批量添加Tab缩进的方法
2018/06/25 Python
对python cv2批量灰度图片并保存的实例讲解
2018/11/09 Python
TensorFlow梯度求解tf.gradients实例
2020/02/04 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
2020/03/11 Python
python线程池如何使用
2020/05/28 Python
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
会计毕业生求职简历的自我评价
2013/10/20 职场文书
英语简历自我评价
2014/01/26 职场文书
军训自我鉴定200字
2014/02/13 职场文书
生物制药专业求职信
2014/03/11 职场文书
2015年学校管理工作总结
2015/07/20 职场文书
自愿离婚协议书范本2016
2016/03/18 职场文书
SQL Server #{}可以防止SQL注入
2022/05/11 SQL Server