之前有专门研究过,在各自的文中,这里进行罗列:

文章目录

  • 1 pydotplus安装
  • 2 XGBoost画出分裂图
  • 3 决策树画出分裂图
  • 4 高度可视化:dtree_viz
    • 4.1 案例
    • 4.2 单样本分析

1 pydotplus安装

文档:PyDotPlus Homepage

如果要画出决策树图,一般需要该库,需要先下载:
http://www.graphviz.org/download/


然后记住下载的路径,

pip install pydotplus

就可以按下面使用了:

import os
os.environ["PATH"] += os.pathsep + 'C:\\Desktop\\Graphviz\\bin\\'
import pydotplus

2 XGBoost画出分裂图

R+python︱XGBoost极端梯度上升以及forecastxgb(预测)+xgboost(回归)双案例解读

如果y是分类变量,可以直接画出节点图:

from matplotlib import pyplot
from xgboost import plot_tree
plot_tree(gbm, num_trees=0, rankdir='LR')
pyplot.show()

可以直接通过plot_tree画出节点图,但是plot_tree很丑,很模糊!

一种解决方案,参考https://github.com/dmlc/xgboost/issues/1725:

xgb.plot_tree(bst, num_trees=2)
fig = matplotlib.pyplot.gcf()
fig.set_size_inches(150, 100)
fig.savefig('tree.png')

于是乎,就需要来一张清晰一些的图片还有一种画法如下:

xgb.to_graphviz(gbm, num_trees=80, rankdir='LR')


来观察一下图型:

其中分支代表,category<5,两条路,代表条件成立,yes;条件不成立,no

每个节点都带有节点名,但是圆圈的大小,有人说是样本量越大,圆圈越大,也有可能是根据节点名称的多少来划定。

如何把图形输出出来:from graphviz import Digraph(参考:如何画XGBoost里面的决策树(decision tree))

参数界面:https://xgboost.readthedocs.io/en/latest/python/python_api.html


3 决策树画出分裂图

决策树之ID3、C4.5、C5.0等五大算法及python实现

from sklearn.datasets import load_iris
from sklearn import tree
import sys
import os
from IPython.display import Image as Images
import pydotplus
from PIL import Image, ImageDraw, ImageFont
from io import BytesIO
import numpy as npimport os
os.environ["PATH"] += os.pathsep + 'C:\\Desktop\\Graphviz\\bin\\'iris = load_iris()
clf = tree.DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)dot_data = tree.export_graphviz(clf, out_file=None, feature_names=iris.feature_names,  class_names=iris.target_names,  filled=True, rounded=True,  special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data)  Images(graph.create_png())

在ipython的notebook生成的图如下:

其中解析一下这张图:

通过剪枝,把很多不必要的枝叶进行删减,保留有效节点;根据gini系数来判定节点,划分最优属性,gini越大,分割贡献越大,越容易成为高层节点。

颜色信息,这边

  • virginica——紫色/2;
  • versicolor——绿色/1;
  • setosa——橙色/0。
    gini系数的大小,代表颜色的深浅,gini越大,颜色越浅。

samples代表这个节点的样本数量,value = [0,2,1]代表三种种类的样本数量分别是多少。

一般来说,紫色越多的分支,分类效力越高。

如果要保存图片,可以使用下面的语句:

Image.open(BytesIO(graph.create_png())).save('roi.png')

如何选择最优路径的一些准则,笔者自己整理,勿怪:

  • 紫色扎堆、链路较短、而且完整链路上只有紫色会更好;
  • 链路最低端最好是gini = 0

4 高度可视化:dtree_viz

参考:非常fancy的可视化决策树dtree_viz
用dtreeviz实现决策树可视化

4.1 案例

import dtreeviz
import pandas as pd
import numpy as np
from sklearn.datasets import *
from sklearn import treeiris = load_iris()
df_iris = pd.DataFrame(iris['data'],columns = iris['feature_names'])
df_iris['target'] = iris['target']clf = tree.DecisionTreeClassifier()
clf.fit(iris.data,iris.target)import os
os.environ["PATH"] += os.pathsep + 'C:\\Graphviz\\bin\\'
import pydotplus from dtreeviz.trees import dtreeviz
viz = dtreeviz(clf,iris['data'],iris['target'],target_name='',feature_names=np.array(iris['feature_names']),class_names={0:'setosa',1:'versicolor',2:'virginica'},scale=2)viz

其中要想跑成功,这两句必不可少:

os.environ["PATH"] += os.pathsep + 'C:\\Graphviz\\bin\\'
import pydotplus

4.2 单样本分析

viz = dtreeviz(clf, x_data=X_train,y_data=y_train,target_name='class',feature_names=iris.feature_names, class_names=list(iris.target_names),title="Decision Tree - Iris data set",#orientation="LR", X=X_test[0])
viz

这张图与前一张非常相似,然而,橙色突出清楚地显示了样本所遵循的路径。此外,我们可以在每个直方图上看到橙色三角形。它表示给定特征的观察值。最后,我们看到了这个样本的所有特征的值,用于决策的特征用橙色突出显示。在这种情况下,只有两个特征被用来预测观察属于花色类。

提示:我们还可以通过设置orientation=“LR”从上到下再从左到右更改绘图的方向。在本文中我们不展示它,因为对于屏幕较窄的设备,图表的缩放效果不会很好。

最后,我们可以用通俗易懂的英语打印这个观察预测所用的决定。为此运行以下命令

print(explain_prediction_path(clf, X_test[0], feature_names=iris.feature_names, explanation_type="plain_english"))# 2.45 <= petal length (cm)  < 4.75
# petal width (cm) < 1.65

这样我们就可以清楚地看到这个观察所满足的条件。

决策树以及XGBoost如何画出 树分裂图?相关推荐

  1. python画出K线图及技术指标

    目录 安装mplfinance及Ta-lib 画图 安装mplfinance及Ta-lib mplfinance是基于matplotlib的金融数据可视化分析模块,前身是mpl_finance,比起m ...

  2. python画聚类树状图_影像组学学习笔记(36)-聚类树状图Dendrogram的python实现

    本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(36)主要介绍: 聚类树状图Dendrogram的python实现 应该注意一下scipy版本的问题:scipy 1.5.0版本画聚类树 ...

  3. 【python量化交易学习】从tushare获取股票交易数据,存入后再从mysql或excel读取数据,筛选股票,用pyecharts画出K线图。

    选定日期,筛选涨幅达到10%的股票,并画出K线图.观察涨停后股票走势. 由于创业板涨停板为20%,科创板20%,北交所30%.因此筛选出的涨停股票不完全准确.考虑到目前市场打板主要集中在10%的主板股 ...

  4. R语言使用循环语句一次性画出多幅图

    R语言使用循环语句一次性画出多幅图 首先加载包,patchwork用来一个界面展示多幅图 具体的可以看这篇文章 library(ggplot2) library(patchwork) 以数据iris为 ...

  5. 如何用Excel画出漂亮的图(office 2016)

          昨天有同学让我用Excel画一张简单的图,小编内心一顿嘲笑,这年代谁还用Excel画图,正准备用Matlab或者Python画图时. 那位同学给我展示了用Excel画出的折线图.我被震惊了 ...

  6. matlab系统函数伯德图,利用matlab画出根轨迹图|伯德图bode

    求G(s)=K/s(s+1)(s+3)的根轨迹图形 若开环传递函数不是多项式乘积形式,则不需用conv函数,conv函数可用于多项式乘法以及卷积. num=[1,];%分子上的各项系数 %K=[1:1 ...

  7. 拜师————python基础入门——守破离学习法,海龟绘图,画出奥运五环图,day3

    第六节课:任务6:006.简单错误如何处理_守破离学习法_程序员修炼手册 刚刚开始学习python,编程常常会出现一系列错误,建议采用一种学习方法来学习: 守 破 离 (这个是学习常识) 老师出的书: ...

  8. 3个量杯的容量分别是8升、5升、3升,现8升的量杯装满了水,问怎样才能将水分成2个4升,画出相应的图

    3个量杯的容量分别是8升.5升.3升,现8升的量杯装满了水,问怎样才能将水分成2个4升,画出相应的图 1.将8L杯中的水倒满5L杯,再用5升杯倒满3L杯 2.将3L杯中水全部倒进8L杯中,再将5L杯中 ...

  9. 为什么突然间画出的viso图和公式显示不出来了

    为什么突然间画出的viso图和公式显示不出来了 为什么突然间画出的viso图和公式显示不出来了,发给同学发现并没有问题. 解决: 使用alt+F9:可以将图片收起来,预览或打印时可显示,此点可能是方便 ...

最新文章

  1. rp软件app流程图_如何开发app软件,流程怎样
  2. 03 | AOF 日志:宕机了, Redis 如何避免数据丢失?
  3. windows 下anaconda创建环境慢的解决办法
  4. GNU make manual 翻译( 一百五十九)
  5. http://www.cda.cn/view/25735.html
  6. POJ 1222 1681 1830 3185 开关灯问题 (高斯消元 异或方程组)
  7. Mac中安装NetBeans方法
  8. ERP项目实施记录05
  9. GBin1教程:使用jQuery插件jquery.validationEngine实现表单验证功能
  10. 本人新书-Redis开发与运维-目录
  11. 用来进行虚拟仿真实验的软件有哪些?这3款简单易懂的软件值得你拥有
  12. 高等数学 第一章 极限和连续函数
  13. 安装office简繁转换增益集
  14. beta阶段测试基本概况对应机型硬件信息
  15. Unlocking Information in the Microsoft Office System Using XML
  16. 《沧海一声笑》简谱图修正版
  17. 武田公布2019财年第一季度强劲业绩并上调全年指引
  18. 【个人喜好诗词之一】雨巷
  19. 192.168.1.10/27,后面的27是什么意思,这样写限制的网络是哪些?
  20. 类加载、反射、注解、动态代理(JDK)

热门文章

  1. 避免无法预知和依赖于实现环境的行为
  2. 微信公众号php从0开发,包括功能(自定义菜单,分享)
  3. zepto-创建dom
  4. 【LeetCode】168. Excel Sheet Column Title 解题小结
  5. metasploit使用篇(windows)
  6. 一个基于WinCE平台的语音识别例子,利用微软speechAPI5.0
  7. 11gR2集群件任务角色分离(Job Role Separation)简介
  8. d3js path generator vs layouts
  9. Convolutional Neural Networks
  10. 【辨异】inverse, reverse, converse