相关文章推荐
低调的数据线  ·  ChatGPT ...·  1 月前    · 
飘逸的领结  ·  Ingress 控制器 | Kubernetes·  1 年前    · 
想出家的水煮鱼  ·  array_flip ...·  1 年前    · 

1 决策树的绘制

可以调用 sklearn.tree.plot_tree 方法绘制决策树,不用像之前那样保存为dot格式文件再转化,而是可以直接绘制

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn import datasets
from sklearn import tree
import matplotlib.pyplot as plt
# 导入数据
iris = datasets.load_iris()
X = iris['data']
y = iris['target']
feature_names = iris.feature_names
# 划分数据
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2,random_state  = 1024)
# 决策树实例化、拟合、预测
clf = DecisionTreeClassifier(criterion='entropy')
clf.fit(X_train,y_train)
y_ = clf.predict(X_test)
# 指定图幅大小
plt.figure(figsize=(18,12))
# 绘制图像
_ = tree.plot_tree(clf,filled = True,feature_names=feature_names) # 由于返回值不重要,因此直接用下划线接收
plt.show()
# 保存图像
plt.savefig('./tree.jpg')

输出
在这里插入图片描述
因为scikit-learn是基于numpy,scipy和matplotlib开发的模块,这三个库中,只有matplotlib有绘图功能,因此可以使用matplotlib中的方法设定图幅大小并显示。
程序运行结束之后,会在当前目录下多出一个“tree.jpg”的文件

最后显示的图可以看到,根据驯良数据得到的决策树,如果按照数据结构中的标准是6层,但这里我们不考虑叶节点,那么该决策树的深度为5。

2 图像解读

为了便于分析决策树的显示结果,我们这里只绘制1层,代码为

_ = tree.plot_tree(clf,filled = True,feature_names=iris.feature_names,max_depth=1)
# max_depth表示绘制的最大深度,最大深度不包含叶子节点,
# 如果max_depth是1,则按数据结构中的标准是2层
# 有可能决策树不止1层,但这里只绘制一层

我们对输出的结果进行解读
对于每个划分点,有四条信息,分别为划分依据、当前交叉熵(如果没指定交叉熵,则为基尼系数,基尼系数的计算看本博客第三节),当前样本数,各类样本的数量
对于每个叶子节点,其比划分节点少一条信息,即划分依据,除此之外其他三条信息都一样。
在这里插入图片描述
如果在实例化决策树类的时候,不对树的深度加以限制,那么将会把样本划分到交叉熵(或基尼系数)为0为止。

为何第一个节点要按照 petal width > 0.75 进行裂分?
因为CART算法,具体参考《机器学习算法导论》王磊、王晓东

3 限制图像的深度

基尼系数的计算公式
在这里插入图片描述

这里我们使用基尼系数,并且限制图像深度

clf = DecisionTreeClassifier(criterion='gini', max_depth=3)
clf.fit(X_train,y_train)
plt.figure(figsize=(12,10))
_ = tree.plot_tree(clf,filled=True,feature_names = feature_names)
plt.show()

输出
在这里插入图片描述
可以看到,由于限定了树的深度,使得叶子结点的基尼系数并非都为0,只有第二层的叶子结点基尼系数为0

决策树决策树的显示结果可以看到,满足petal width <= 0.75的样本,其三种标签值的样本数分别为[39, 0, 0],也就是说,只要满足这个条件,它的结果是确定的,因此交叉熵为0
本文于cnblogs,介绍了决策树的生成,Bagging策略,python实现代码等。首先,在了解树模型之前,自然想到树模型和线性模型有什么区别呢?其中最重要的是,树形模型是一个一个特征进行处理,之前线性模型是所有特征给予权重相加得到一个新的值。决策树与逻辑回归的分类区别也在于此,逻辑回归是将所有特征变换为概率后,通过大于某一概率阈值的划分为一类,小于某一概率阈值的为另一类;而决策树是对每一个特征做一个划分。另外逻辑回归只能找到线性分割(输入特征x与logit之间是线性的,除非对x进行多维映射),而决策树可以找到非线性分割。而树形模型更加接近人的思维方式,可以产生可视化的分类规则,产生的模型具
波士顿房价机器学习作业python编码,策树算法是一种逼近离散函数值的方法。它是一种典型的分类方法,首先对数据进行处理,利用归纳算法生成可读的规则和决策树,然后使用决策对新数据进行分析。本质上决策树是通过一系列规则对数据进行分类的过程。 决策树方法最早产生于上世纪60年代,到70年代末。由J Ross Quinlan提出了ID3算法,此算法的目的在于减少树的深度。但是忽略了叶子数目的研究。C4.5算法在ID3算法的基础上进行了改进,对于预测变量的缺值处理、剪枝技术、派生规则等方面作了较大改进,既适合于分类问题,又适合于回归问题。 决策树算法构造决策树来发现数据中蕴涵的分类规则.如何构造精度高、规模小的决策树决策树算法的核心内容。决策树构造可以分两步进行。第一步,决策树的生成:由训练样本集生成决策树的过程。一般情况下,训练样本数据集是根据实际需要有历史的、有一定综合程度的,用于数据分析处理的数据集。第二步,决策树的剪枝:决策树的剪枝是对上一阶段生成的决策树进行检验、校正和修下的过程,主要是用新的样本数据集(称为测试数据集)中的数据校验决策树生成过程中产生的初步规则,将那些影响预衡准确性的分枝剪除。
今天的内容介绍如何将决策树模型画出来。进入实战部分!首先安装所需的R包,并且载入:install.packages("rpart") install.packages("rpart.plot") library(rpart) library(rpart.plot)R包get!下一步,使用mtcars数据集建立一个决策树模型,其中的mpg作为因变量,代码如下:tree <- rpart(...
源代码:https://gitee.com/zhyantao/DeepLearning/tree/master/DecisionTree 使用工具Graphviz可视化决策树后,可以得到如下所示的一个PDF文件: 与之对应的CSV表格如...
决策树机器学习的十大算法之一,可用于解决分类和回归问题。决策树的结构很像二叉树,通过一层一层的节点,来对我们的样本进行分类。决策树算法的可解释性非常的好,通过绘制决策树,我们可以很清楚理地解算法的工作原理,同时也方便向别人进行展示。这一节,我们的重点是画决策树,对于决策树算法的原理以及细节,我们不做深入的探讨。 我们使用iris数据集,它有150个样本,5个特征。接下来我们就以iris数据集为例,来进行决策树绘制。 iris数据集链接: 链接:https://pan.baidu.com/s/1YCyvn
前言:在使用python绘制决策树的时候,需要使用到matplotlib库,要想使用matplotlib库可以直接安装anaconda就可以了,anaconda中包含了许多的python科学计算库。在使用决策树算法进行分类的时候,我们可以绘制决策树便于我们进行分析。 对于在绘制决策树的时候使用中文显示出现乱码的时候,加下下面两句代码就可以正常显示 #用来正常显示中文 plt.rcParams
在这篇文章中,我们讲解了如何训练决策树,然后我们得到了一个字典嵌套格式的决策树结果,这个结果不太直观,不能一眼看着这颗“树”的形状、分支、属性值等,怎么办呢? 本文就上文得到的决策树,给出决策树绘制函数,让我们对我们训练出的决策树一目了然。 在绘制决策树之后,我们会给出决策树的使用方法:如何利用训练好的决策树,预测训练数据的类别? 提示:不论是绘制还是使用决策树,中心思想都是递归。 理论知识大部分参考七月在线学习笔记(很好,推荐)https://www.zybuluo.com/frank-shaw/note/103575 部分理论和编程主要参考《机器学习实战》 首先,要搞清楚决策树能做什么? 事实上,决策树学习是用于处理分类问题的机器学习方法,而这些类别事先是知道的,你只需要选择其中的某一个类作为你最终的决策即可,也就是说,决策树的学习是一个监督学...
决策树和随机森林是机器学习中经常使用的分类方法,可以通过matlab编程实现对图像的分类。 首先,对于决策树图像分类代码,可以使用matlab中的ClassificationTree.fit函数构造决策树分类器,再使用predict函数对待分类的图像进行分类预测。具体步骤如下: 1. 读取图像数据,并将其转化为特征矩阵。 2. 将数据分为训练集和测试集。 3. 使用ClassificationTree.fit函数训练决策树分类器。 4. 使用predict函数对测试集进行分类预测。 5. 计算分类准确率。 对于随机森林的图像分类代码,也可以使用matlab中的随机森林工具箱实现。具体步骤如下: 1. 读取图像数据,将其转化为特征矩阵。 2. 将数据分为训练集和测试集。 3. 使用TreeBagger函数构造随机森林分类器,并使用train函数进行训练。 4. 使用predict函数对测试集进行分类预测。 5. 计算分类准确率。 总的来说,通过matlab中的机器学习工具箱和随机森林工具箱,可以轻松实现对图像决策树和随机森林分类。需要注意的是,在选择属性特征和结构设计方面需要深入掌握机器学习相关知识,并进行充分的实验验证。