【模型】5分钟了解决策树是一个什么模型

本站原创文章,转载请说明来自《老饼讲解-机器学习》[www.bbbdata.com(https://www.bbbdata.com/ml)

决策树模型是机器学习中不可不学的模型之一,本文简单直接地快速讲解决策树是什么,如何实现。

一、决策树模型

决策树一般包括ID3决策树,C4.5决策树与CART决策树。
ID3与C4.5决策树是基于熵的概念构建的决策树,现在已经用得相对较少,目前用得较多的是CART决策树。
CART决策树全称为Classification And Regression Tree,即分类与回归树。因此CART决策树既可以用来做分类,又可以用来做回归。

1.1.ID3决策树

ID3决策树
ID3决策树是最早提出的决策树,它的变量是枚举变量,然后根据枚举值不断分枝决策,最终到达的叶子节点就是模型的预测结果。ID3决策树在构建时使用信息熵的来确定选择哪个变量进行构建。

1.2. CART决策树

CART决策树模型是一棵二叉树,如下:
CART决策模型
CART决策树模型是一棵二叉树,会根据变量不断地进行判断,最后到达叶子节点时,节点上的类别(做回归时则是值)就是模型的预测结果。CART决策树在构建时一般使用GINI系数来确定选择哪个变量来构建。
CART决策树的详细构建流程可参考:【原理】CART决策树构建过程详细讲解

1.3. C4.5决策树

C4.5决策树可以认为是ID3决策树到CART决策树的过渡,即支持枚举变量,又支持连续变量。C4.5决策树使用信息增益比来确定选择哪个变量进行构建。

二、如何在python中构建一棵决策树

2.1. 数据说明

不妨以鸢尾花数据为例(即sk-learn中的iris数据)
鸢尾花数据共有150个样本,包括鸢尾花的四个特征与鸢尾花的类别,具体数据如下:
鸢尾花数据
花萼长度 sepal length (cm) 、花萼宽度 sepal width (cm)
花瓣长度 petal length (cm) 、花瓣宽度 petal width (cm)
山鸢尾:0,杂色鸢尾:1,弗吉尼亚鸢尾:2

2.2. python中构建一棵CART决策树

下面使用python的sklearn包来构建一棵CART决策树,具体代码如下:

from sklearn.datasets import load_iris
from sklearn import tree
#----------------数据准备--------------------
iris = load_iris()                                 # 加载数据
#---------------模型训练---------------------
clf = tree.DecisionTreeClassifier()                # sk-learn的决策树模型
clf = clf.fit(iris.data, iris.target)              # 用数据训练树模型构建()
r = tree.export_text(clf, feature_names=iris['feature_names'])

#---------------模型预测结果------------------
text_x = iris.data[[0,1,50,51,100,101], :]
pred_target_prob = clf.predict_proba(text_x)        # 预测类别概率
pred_target = clf.predict(text_x)                   # 预测类别

#---------------打印结果---------------------
print("\n===模型======")
print(r)
print("\n===测试数据:=====")
print(text_x)
print("\n===预测所属类别概率:=====")
print(pred_target_prob)
print("\n===预测所属类别:======")
print(pred_target)

运行结果如下:
构建好的决策树模型:
在这里插入图片描述
预测结果:
在这里插入图片描述
可以看到模型的预测结果是正确的。

三、如何将决策树可视化

要绘画出决策树的模型结构,可以使用graphviz 包,下面是一个代码示例与实现效果。

from sklearn.datasets import load_iris
from sklearn import tree
import graphviz 
#----------------数据准备----------------------------
iris = load_iris()                          # 加载数据
#---------------模型训练----------------------------------
clf = tree.DecisionTreeClassifier()         # sk-learn的决策树模型
clf = clf.fit(iris.data, iris.target)       # 用数据训练树模型构建()
r = tree.export_text(clf, feature_names=iris['feature_names'])
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 = graphviz.Source(dot_data)  
graph                                    # 显示图形。(如果没显示,则需要独立运行这一句)
#graph.render("iris")                    # 将图形保存为iris.pdf文件。
#graph.view()                            # 直接打开pdf文件展示

运行后就可以打印出决策树的模型结构,如下:
决策树可视化
上面的图比较丑,是graphviz 的默认图案。实际上graphviz 是非常强大的,可以按自己的喜爱设置得更加好看。
特别说明的是,软件中一般都只实现CART决策树, 如果要实现ID3或C4.5决策树,就需要自己仔细地去按原理重新实现了。


相关链接:

《老饼讲解-机器学习》:老饼讲解-机器学习教程-通俗易懂
《老饼讲解-神经网络》:老饼讲解-matlab神经网络-通俗易懂
《老饼讲解-神经网络》:老饼讲解-深度学习-通俗易懂

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/744820.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt:2.环境搭建

目录 1.搭建需要的三个组件: 2.下载Qt安装包: 3.安装qt: 4.配置环境变量: 1.搭建需要的三个组件: C编译器(gcc,cl.exe等)Qt的SDK:软件开发工具包,Windows…

java复习宝典,jdbc与mysql数据库

一.java 1.面向对象知识 (1)类和对象 类:若干具有相同属性和行为的对象的群体或者抽象,类是创建对象的模板,由属性和行为两部分组成。 类是对象的概括或者抽象,对象是类的实例化。 举例:例如车有很多类型&#xf…

从传统到智能:视频汇聚EasyCVR+AI视频监控如何助力仓储的智能化转型

随着物流行业的快速发展和市场竞争的加剧,仓储管理对于保证货物安全、提高运营效率显得尤为重要。传统的仓储监控方式已难以满足现代仓储管理的需求,因此,仓储视频智能监控解决方案应运而生。方案通过集成先进的视频监控技术、智能分析算法、…

xhs 旋转验证码剖析和协议算法实现

【作者主页】:小鱼神1024 【擅长领域】:JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码&#…

Vue + SpringBoot 实现文件的断点上传、秒传,存储到Minio

一、前端 1. 计算文件的md5值 前端页面使用的elment-plus的el-upload组件。 <el-upload action"#" :multiple"true" :auto-upload"false" :on-change"handleChange" :show-file-list"false"><FileButton content&…

【系统架构设计师】六、信息系统基础知识(定义|分类|企业信息化系统|生命周期|建设原则|开发方法)

目录 一、信息系统的定义 二、信息系统的分类 三、企业使用的信息化系统 四、信息系统的生命周期 五、信息系统建设原则 六、信息系统的开发方法 6.1 结构化方法 6.2 原型法 6.3 构件化开发方法 6.4 面向服务的方法 6.5 面向对象的方法 6.6 敏捷方法 历年真题考情&#x…

Linux基础 - 存储结构与管理硬盘

目录 零. 简介 一. 文件系统 Ubuntu 文件系统结构&#xff1a; 路径: 二. 硬盘管理 零. 简介 Linux 文件系统是一种用于组织和存储文件、目录以及相关数据的架构。 常见的 Linux 文件系统有&#xff1a; Ext4&#xff08;Fourth Extended File System&#xff09;&#…

Java中Stream的特性

Stream新特性 被称之为Stream流&#xff0c;用于操作集合或者数组中的数据 优势&#xff1a;Stream流大量的结合了Lambda的语法风格&#xff0c;代码更简洁&#xff0c;可读性更好 使用步骤 先获取数据源&#xff0c;获取Stream流 Collect…

S_LOVE多端恋爱小站小程序源码 uniapp多端

S_LOVE多端恋爱小站小程序源码&#xff0c;采用uniapp多端开发框架进行开发&#xff0c;目前已适配H5、微信小程序版本。 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89421726 更多资源下载&#xff1a;关注我。

【arduino】使用最新版本的软件2.3版本,安装设备驱动,成功上传设备到ESP32中,使用超便宜的主板16元的arduino就可以进行开发

1&#xff0c;下载软件 https://www.arduino.cc/en/software 购买硬件设备超级便宜&#xff1a; https://detail.1688.com/offer/607729642347.html?spma26352.13672862.offerlist.121.7af9638afU2nu2 https://detail.1688.com/offer/574143571194.html?_t1719333276237&…

基于ESP8266串口WIFI模块ESP-01S在AP模式(即发射无线信号( WiFi))下实现STC单片机与手机端网路串口助手相互通信功能

基于ESP8266串口WIFI模块ESP-01S在AP模式(即发射无线信号( WiFi))下实现STC单片机与手机端网路串口助手相互通信功能 ESP8266_01S引脚功能图ESP8266_01S原理图ESP8266_01S尺寸图检验工作1、USB-TTL串口工具(推荐使用搭载CP2102芯片的安信可USB-T1串口)与ESP8266_01S WiFi…

如何给小语种视频生成字幕

目前我们常看的有视频有中、英、日、韩这四种语言&#xff0c;如果我们想给其他的不常用的语言生成字幕怎么办&#xff1f;今天教大家如何给其他语言生成视频字幕文件 打开智游剪辑&#xff08;zyjj.cc&#xff09;搜索字幕生成&#xff0c;选择多语种那个就可以了 然后上传我们…

学习TTS遇到的问题2 什么是TCN模型

学习TTS遇到的问题2 什么是TCN模型 什么是TCN模型怎么理解 TCN中的 dilation&#xff1f;什么是 Dilation具体例子数学表达作用例子代码示例 什么是TCN模型 https://juejin.cn/post/7262269863343079479 https://blog.csdn.net/weixin_57726558/article/details/132163074 由下…

外媒新闻发稿:2024年度国外主流新闻媒体和海外媒体软文分发平台有哪些?

2024年度主流海外媒体新闻发稿和海外媒体软文分发平台有很多&#xff0c;下面是一些常见的和广受认可的平台&#xff1a; 主流新闻媒体 CNN - 美国知名新闻网络&#xff0c;覆盖广泛的国际新闻。BBC - 英国广播公司&#xff0c;提供全球新闻和深入报道。纽约时报 - 美国主流报…

数字逻辑课程设计报告

##汽车尾灯控制器设计 ##简单交通灯控制器设计 ##运算器设计 。。。。。。。。 如果对上述报告感兴趣后台私信我

ICMAN液位检测——WS003B管道检测模组

ICMAN液位检测之WS003B管道检测模组 体积小&#xff0c;成本低&#xff0c; 液位检测精度高&#xff0c; 有水输出低电平无水高电平&#xff0c; 适用于饮水机、咖啡机、扫地机器人、洗地机等&#xff0c; 有需要朋友快联系我吧&#xff01; AWE展会不容错过的ICMAN检测模组…

基于weixin小程序的民宿短租系统的设计与实现

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;房主管理&#xff0c;房间类型管理&#xff0c;用户管理&#xff0c;民宿信息管理&#xff0c;民宿预订管理&#xff0c;系统管理 小程序功能包括&#xff1a;系统首页&#xff0c;民宿信息&#xff0c…

螺栓的拧紧扭矩计算

对于采用控制扭矩方式拧紧的螺栓连接而言&#xff0c;螺栓扭矩是一个非常重要的参数&#xff0c;扭矩的大小决定了螺栓预紧力的大小&#xff0c;而螺栓预紧力又是预紧型螺栓连接的灵魂。前文讨论了螺栓扭矩的校验&#xff0c;即如何验证螺栓扭矩是否满足设计要求&#xff0c;与…

代码随想录——买股票的最佳时机Ⅱ(Leecode122)

添加链接描述 贪心 局部最优&#xff1a;手机每天的正利润 全局最优&#xff1a;求最大利润 class Solution {public int maxProfit(int[] prices) {int res 0;for(int i 1; i < prices.length; i){res Math.max(prices[i] - prices[i - 1], 0);}return res;} }

出现 defineProps is a compiler macro and no longer needs to be imported. 解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 执行前端代码的时候,出现如下问题: [@vue/compiler-sfc] defineProps is a compiler macro and no longer needs to be imported.[@vue/compiler-sfc] defineEmits is a compiler macro and no longer needs to be impo…