决策树、随机森林结果可视化

2023-11-07

决策树、随机森林结果可视化

本文测试环境为 python3

一、 决策树可视化环境搭建

scikit-learn中决策树的可视化一般需要安装graphviz。主要包括graphviz的安装和python的graphviz插件的安装。

  • 第一步是安装graphviz。
    下载地址在:http://www.graphviz.org/。如果你是linux,可以用apt-get或者yum的方法安装。如果是windows,就在官网下载msi文件安装。无论是linux还是windows,装完后都要设置环境变量,将graphviz的bin目录加到PATH,比如我是windows,将 G:/program_files/graphviz/bin/ 加入了PATH
  • 第二步是安装python插件graphviz:
    pip install graphviz
  • 第三步是安装python插件pydotplus。这个没有什么好说的:
    pip install pydotplus

这样环境就搭好了,有时候python会很笨,仍然找不到graphviz,这时,可以在代码里面加入这一行:

import os
os.environ["PATH"] += os.pathsep + 'G:/program_files/graphviz/bin'

注意后面的路径是你自己的graphviz的bin目录。

二、 决策树可视化的三种方法

可视化需要在模型训练好后,即执行clf.fit(x, y)函数之后:

第一种

with open("iris.dot", 'w') as f:
    f = tree.export_graphviz(clf, out_file=f)

然后打开命令行,执行:

#注意,这个命令在命令行执行
dot -Tpdf iris.dot -o iris.pdf

第二种

使用pydotplus库:

import pydotplus 
dot_data = tree.export_graphviz(clf, out_file=None) 
graph = pydotplus.graph_from_dot_data(dot_data) 
graph.write_pdf("iris.pdf") 

第三种

使用IPython的display。需要安装jupyter notebook。

from IPython.display import Image
## 添加graphviz的环境变量
import os
os.environ["PATH"] += os.pathsep + 'G:/program_files/graphviz/bin'

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)  
Image(graph.create_png()) 

三、 决策树可视化实例

#-*- coding: utf-8 -*-
from itertools import product

import numpy as np
import matplotlib.pyplot as plt

from sklearn import datasets
from sklearn.tree import DecisionTreeClassifier


# 仍然使用自带的iris数据
iris = datasets.load_iris()
X = iris.data[:, [0, 2]]
y = iris.target

# 训练模型,限制树的最大深度4
clf = DecisionTreeClassifier(max_depth=4)
#拟合模型
clf.fit(X, y)

# 画图
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1),
                     np.arange(y_min, y_max, 0.1))

Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.contourf(xx, yy, Z, alpha=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, alpha=0.8)
plt.show()

这里写图片描述

#-*- coding: utf-8 -*-
from itertools import product

import numpy as np
import matplotlib.pyplot as plt

from sklearn import datasets
from sklearn.tree import DecisionTreeClassifier

from IPython.display import Image
from sklearn import tree
import pydotplus
import os       
os.environ["PATH"] += os.pathsep + 'G:/program_files/graphviz/bin'

# 仍然使用自带的iris数据
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 训练模型,限制树的最大深度4
clf = DecisionTreeClassifier(max_depth=4)
#拟合模型
clf.fit(X, y)

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)
# 使用ipython的终端jupyter notebook显示。
Image(graph.create_png())
# 如果没有ipython的jupyter notebook,可以把此图写到pdf文件里,在pdf文件里查看。
graph.write_pdf("iris.pdf") 

这里写图片描述

四、 随机森林可视化实例

随机森林是多棵决策树的组合,使用scikit-learn时没有直接的方法显示随机森林,只能拆解成单棵树来显示。
使用随机森林的属性clf.estimators_获取随机森林的决策树列表( 注意,estimators后边有一个下划线 ’ _’ )

#-*- coding: utf-8 -*-
from sklearn import datasets
from sklearn.ensemble import RandomForestClassifier
from IPython.display import Image
from sklearn import tree
import pydotplus
import os       
os.environ["PATH"] += os.pathsep + 'G:/program_files/graphviz/bin'

# 仍然使用自带的iris数据
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 训练模型,限制树的最大深度4
clf = RandomForestClassifier(max_depth=4)
#拟合模型
clf.fit(X, y)

Estimators = classifier.estimators_
for index, model in enumerate(Estimators):
    filename = 'iris_' + str(index) + '.pdf'
    dot_data = tree.export_graphviz(model , 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)
    # 使用ipython的终端jupyter notebook显示。
    Image(graph.create_png())
    graph.write_pdf(filename)

五、 决策树各特征权重可视化

决策树特征权重:即决策树中每个特征单独的分类能力。

#-*- coding: utf-8 -*-
from itertools import product

import numpy as np
import matplotlib.pyplot as plt

from sklearn import datasets
from sklearn.tree import DecisionTreeClassifier

from IPython.display import Image
from sklearn import tree
import pydotplus
import os       
os.environ["PATH"] += os.pathsep + 'G:/program_files/graphviz/bin'

# 仍然使用自带的iris数据
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 训练模型,限制树的最大深度4
clf = DecisionTreeClassifier(max_depth=4)
#拟合模型
clf.fit(X, y)

y_importances = clf.feature_importances_
x_importances = iris.feature_names
y_pos = np.arange(len(x_importances))
# 横向柱状图
plt.barh(y_pos, y_importances, align='center')
plt.yticks(y_pos, x_importances)
plt.xlabel('Importances')
plt.xlim(0,1)
plt.title('Features Importances')
plt.show()

# 竖向柱状图
plt.bar(y_pos, y_importances, width=0.4, align='center', alpha=0.4)
plt.xticks(y_pos, x_importances)
plt.ylabel('Importances')
plt.ylim(0,1)
plt.title('Features Importances')
plt.show()

这里写图片描述
这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

决策树、随机森林结果可视化 的相关文章

随机推荐

  • GPIO的工作模式、GPIO复用

    目录 1 GPIO 内部结构 2 GPIO 的 8种工作模式 3 GPIO 的复用 1 GPIO 支持多种外设的时候 如何区别 2 普通推挽输出 复用推挽输出的区别 1 GPIO 内部结构 GPIO 的电路是一堆电路 所以需要配置寄存器 来
  • 2023智慧物流服务指数研究报告

    物流定义 将运输 储存 装卸 搬运 包装 流通加工 配送 信息处理等基本功能实施有机结合 使物品从供应地向接收地进于实体流动的过程 物流产业大致可以分成运输环节 仓储环节 配送环节 数据服务环节 技术服务环节 智慧物流 是指以物联网技术为基
  • vs2008 ActiveX控件测试容器的生成以及调试ActiveX控件

    1 ActiveX控件测试容器的生成 用TSTCON生成测试容器 http msdn microsoft com zh cn library f9adb5t5 v vs 90 aspx 在搜索里搜索tstcon 双击TstCon文件夹 将此
  • Java——猜数字游戏(Random类和Scanner类的简单介绍案例)

    文章目录 猜数字游戏 Random随机数 Scanner 猜数字游戏 系统随机生成一个1 100的随机数 玩家通过键入自己猜测的数字 如果猜中了 则提示玩家赢了 游戏结束 否则提示用户大了或者小了 让玩家继续猜 玩家有十次机会 注 这是我今
  • NIO - 文件的简单操作

    1 将数据写进文件 public class NioFileChannelDemo1 public static void main String args throws Exception String str hello world 创
  • 实战wxPython:053 - 使用剪贴板

    我们在使用电脑的时候都知道可以使用复制和粘贴文本 到我们复制一些东西的时候 它会进入一个名为 剪贴板 的位置 大多数程序都提供对某种类型的剪贴板的访问 无论是在程序本身还是系统剪贴板 都允许将项目复制到其他应用程序 wxPython GUI
  • [深度学习] TensorFlow上实现Unet网络

    代码取自于 https github com jakeret tf unet TensorFlow Unet文档 https tf unet readthedocs io en latest installation html Tensor
  • 数据结构(实现不带头结点的链栈)

    链栈 存储结构采用链式存储的栈被称为链栈 优点 提高存储空间的利用率 且不存在栈满溢出的情况 特点 常采用单链表实现 规定所有操作在链表的表头进行 分类 带头结点 不带头结点 代码分块 1 结构体构建 typedef struct Link
  • 定义一个复数类Complex,重载运算符“+”,“-”,“*”,“/”,使之能用于复数的加、减、乘、除。运算符重载函数作为Complex类的成员函数。编写程序,分别求两个复数之和、差、积和商。

    问题描述 定义一个复数类Complex 重载运算符 使之能用于复数的加 减 乘 除 运算符重载函数作为Complex类的成员函数 编写程序 分别求两个复数之和 差 积和商 Input 两个复数 Output 两个复数之和 差 积和商 Sam
  • Chapter1 (1-5)简介

    crx文件是谷歌浏览器的扩展文件 就是插件 真实Dom与虚拟Dom 真实dom很重 虚拟dom较轻 更新真实dom页面会重绘 而更新虚拟dom页面不会重绘 渲染的时候才会更新页面 Jsx JavaScript XML react定义的一种类
  • qt线程调用QAXObject(Excel,word)并传信号

    说明 在线程间使用信号槽进行通信时 需要注意必须使用元数据类型 Qt内生的元数据类型 如int double QString 等 如果要用自己定义的数据类型 需要在connect前将其注册为元数据类型 形式见代码 qRegisterMeta
  • 金融业需要的大模型,是一个系统化工程

    今年年初 在AIGC刚刚开始爆火的时候 我们曾经采访过一位AI领域的专家 当我们提问哪个行业将率先落地大模型时 他毫不犹豫地说道 金融 金融行业场景多 数据多 知识多 这样的 三多 特点让其成为AI大模型发挥价值的天选 与此同时 金融场景专
  • echarts添加点击事件

    echarts柱状图点击事件 最近做echarts柱状图 遇到了两个个问题 此处记录一下 点击柱状图某一个柱体 跳转页面 由于数据差异大 有的柱体很长 有的很短 短的柱体很难点击到 需要设置整个柱形区域都可以点击 页面上有两个标签 切换标签
  • 【满分】【华为OD机试真题2023 JS】学校的位置

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 学校的位置 知识点数组贪心排序 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 为了解决新学期学生暴涨的问题 小乐村要建所新学校 考虑到学生上学安全问题 需要所有
  • [前端css-2] 实现圆闪烁效果

    前端css 2 实现圆闪烁效果 1 效果展示 效果预览 2 知识点 1 position 相对定位 绝对定位 2 伪类 after before 3 animation 动画 3 源代码
  • 我的世界1.12 Java崩溃,救救孩子!1.12.2游戏崩溃

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Minecraft Crash Report WARNING coremods are present Contact their authors BEFORE contacting forge
  • C语言经典100例题(26)--利用递归方法求5!(通俗易懂)

    目录 题目 问题分析 代码 运行结果 题目 利用递归方法求5 问题分析 函数的递归调用最基本的思想就是 大事化小 5 5 4 5 5 4 3 5 5 4 3 2 5 5 4 3 2 1 每层分离出来最大的那个数 定义一个求阶乘的函数 fac
  • 2023前端面试题及答案整理(浏览器)

    浏览器 cookie 与 本地存储 相关 cookie session localStorage 分别是什么 cookie 是存储在浏览器上的一小段数据 用来记录某些当页面关闭或者刷新后仍然需要记录的信息 用户在输入用户名密码提交给服务端
  • 企业微信网页应用开发 - 消息/事件回调接口

    问题描述 在事件格式 企业微信API中 有这么一句描述 当用户在客户端或管理端进行某种操作后 会回调相应的事件给开发者 通过API进行的操作不会产生回调 高亮那句是我想要的效果 只有用户在微信原生页面上的变更操作才需要及时通知 自己应用上
  • 决策树、随机森林结果可视化

    决策树 随机森林结果可视化 决策树随机森林结果可视化 一 决策树可视化环境搭建 二 决策树可视化的三种方法 第一种 第二种 第三种 三 决策树可视化实例 四 随机森林可视化实例 五 决策树各特征权重可视化 本文测试环境为 python3 一