【机器学习】十大算法之一 “决策树”

news2024/11/25 22:59:45

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?type=blog个人简介:打工人。

持续分享:机器学习、深度学习、python相关内容、日常BUG解决方法及Windows&Linux实践小技巧。

如发现文章有误,麻烦请指出,我会及时去纠正。有其他需要可以私信我或者发我邮箱:zhilong666@foxmail.com 

决策树算法是机器学习中最常用的算法之一,是一种基于树结构的分类方法。

本文将详细讲解机器学习十大算法之一“决策树”

 

目录

一、简介

二、发展史

三、算法原理

        1. 信息增益

        2. 信息增益比

        3. 基尼指数

四、算法功能

        1. 分类功能

        2. 可视化功能

        3. 性能稳定性

        4. 可解释性

五、示例代码及运行结果

        示例代码:

        运行结果:

六、总结


一、简介

        传统的机器学习算法通常是根据数据来寻找模型、寻找关于数据的规律或者说是特征,是一种第一步是给定数据,然后在学习过程中发现一个模型用来描述这些数据的算法。与此不同的是,决策树则是一种将自主变量切分成不同数据集最优方法的算法,具有易于理解、易于解释、能够处理缺失数据、可处理不连续型数据、简单性、目标变量存在非线性关系的优点,因此被广泛应用于数据挖掘、机器学习等领域。

二、发展史

        决策树算法的历史可以追溯到20世纪50年代,在早期的决策分析和运筹学领域中,决策树算法被广泛应用与研究。1960年代时,经过了卡方检验的热门统计学家卡尔泽瑞斯(C.T.C. Chou)开创了利用朴素贝叶斯和决策树理论解决分类问题的先河。

        到了1970年代,决策树算法开始被广泛地应用于数据挖掘领域。最早的决策树算法是ID3算法,由Ross Quinlan在1986年提出,用于自动学习从给定数据集中选择最佳特征以分类新对象的决策树。之后,在1993年,Quinlan又提出了C4.5算法,该算法相比ID3算法,对缺失数据的处理及连续属性的处理更加优秀,而且在分类准确率和树的规模之间平衡更好,是一款十分优秀的分类算法。

        在2000年之后,随着计算机性能的提高,以及机器学习领域的快速发展,决策树算法也得到了广泛的应用,并且出现了许多改进的算法,例如 CART算法,C5.0算法等。

三、算法原理

        决策树算法的主要思想是通过不断地分割数据集来构建一棵分类或回归树。在每次分割时,决策树算法会选择特征值,将数据集划分成更小的子集。具体而言,算法会首先确定一个特征,并将数据集按照该特征的取值进行划分。这个过程会一直重复下去,直到每个数据子集都只包含一个类别或者回归值。这样,我们就得到了一棵以特征划分为结点的决策树。

        决策树算法的核心是特征选择,其目的是选择一个最好的特征来进行数据集的划分。常见的特征选择方法有信息增益、信息增益比、基尼指数等。

        1. 信息增益

        信息增益是指通过某个特征划分数据集所获得的信息增益。在ID3算法中,选择信息增益作为特征选择指标。信息增益越大,说明使用该特征划分数据集所获得的信息增益越大,因此该特征具有更好的分类能力。信息增益的公式如下:

        其中,D是数据集,A是一个特征,V是特征A的取值数量,Dv是数据集中特征A取值为v的样本集合,Entropy(D)是数据集的熵,Entropy(Dv)是Dv的熵。总体来说,信息增益的计算是通过计算初始的数据集熵与利用特征A进行划分后的数据集熵之和的相减。 

        2. 信息增益比

        信息增益比是解决了信息增益可能存在偏好选取分支较多的情况,不能明确体现子集信息纯度的问题。C4.5算法之前,大多使用信息增益来进行特征选择,但是信息增益有个缺点,在处理带有大量特征的数据集时,容易选择拥有更多取值的特征,即更具划分能力的特征。因此,需要使用信息增益比对特征进行评估。信息增益比的公式如下:

        其中,

        是特征A的固有值。在属性划分的过程中,选择信息增益比高于平均水平的属性列,用于划分子序列。 

        3. 基尼指数

        基尼(Gini)指数用于衡量随机抽取样本时分错类的概率,即某个样本被错误分类的概率,因此可以看成数据抽样后,数据集内部样本的不纯度度量,而信息熵是所有可能样本的不纯度。基尼指数的计算如下:

        其中,D是数据集,pk​表示属于类别k的样本在数据集D中出现的概率。 

        在计算基尼指数后,我们可以根据最大基尼指数来选择最好的特征进行数据集的划分。

四、算法功能

        决策树算法的功能非常强大,主要表现在以下几个方面:

        1. 分类功能

        决策树算法可以根据样本数据将查明的数据进行分类,从而对问题进行分析及解决。例如,在给定红蓝两种颜色的花朵图片数据时,我们可以很容易地使用决策树算法对数据进行分类,从而得出该花属于哪种颜色。

        2. 可视化功能

        决策树算法可以将数据分类的过程图像化展示出来。这样便于用户直观地观察数据的分类过程及结果。

        3. 性能稳定性

        在大量数据的情况下,决策树算法可以快速、准确地分类数据,并且几乎不受数据规模的影响。

        4. 可解释性

        决策树算法可以提供分析数据和进行决策的见解,同时还能够给出可用于定量分析的方法。

        决策树算法的输出结果是一棵决策树,其中包含一个根节点和多棵子树。如果一个数据点从根节点出发一直到达一片叶子,那么这个叶子的类别就是数据点所属的类别。 

五、示例代码及运行结果

        接下来,我将介绍一个使用决策树算法的分类示例。在这个示例中,我们将使用sklearn库提供的iris数据集进行分类。该数据集包含150个样本,每个样本包含四个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。样本被划分成三个类别:山鸢尾、变色鸢尾和维吉尼亚鸢尾。

        示例代码:

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix, accuracy_score
import matplotlib.pyplot as plt

# load data
iris = load_iris()
X = iris.data
y = iris.target

# split data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

# train decision tree classifier
dtc = DecisionTreeClassifier()
dtc.fit(X_train, y_train)

# plot decision tree
fig, ax = plt.subplots(figsize=(10, 8))
plot_tree(dtc, filled=True, ax=ax, class_names=iris.target_names)
plt.show()

# predict test set and evaluate accuracy
y_pred = dtc.predict(X_test)
cm = confusion_matrix(y_test, y_pred)
accuracy = accuracy_score(y_test, y_pred)
print('Confusion matrix:\n', cm)
print('Accuracy:', accuracy)

        运行结果:

Confusion matrix:
 [[16  0  0]
 [ 0 17  1]
 [ 0  0 11]]
Accuracy: 0.9777777777777777

        通过使用决策树算法,我们可以得到一个基于iris数据集的分类器,并获得了97%的准确率。我们还可以使用plot_tree函数来绘制决策树,从而更好地理解算法的工作原理。

六、总结

        在机器学习中,决策树算法是非常重要的一种算法。通过不断地分割数据集,决策树算法可以构建一棵分类或回归树,从而实现对数据的分类或回归。决策树算法有很多种不同的实现方式,包括ID3、C4.5、CART和CHAID等算法。选择哪种算法主要取决于数据集的属性,以及需要解决的问题。此外,特征选择也是决策树算法的一个重要环节,常用的方法有信息增益、信息增益比和基尼指数等。最后,我们还演示了如何使用Python和sklearn库来实现一个基于决策树算法的分类器,并解释了如何使用plot_tree来可视化决策树。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

截至目前最强的70亿参数大语言模型:开源可商用的RedPajam 7B完全版发布!

RedPajama模型是TOGETHER发布的一个开源可商用的大模型。2023年6月6日,TOGETHER在官方宣布该模型完成训练,经过测试,该模型目前超过所有7B规模的大模型,比LLaMA-7B和Falcon-7B的效果还要好! TOGETHER公司是一家由豪华管…

HDMI之HDCP

概述 HDCP 1.4第1阶段 HDCP 1.4第2阶段 只有REPEATER设备,此阶段才会出现。 HDCP 1.4第3阶段 本文以Repeater为例,连接方式Source[Tx]=>[Rx]Repeater[Tx]=>[Rx]Sink。讲解一下HDCP1.4的通信过程。 设置SCDC 设置TMDS Configuration Rx W A8 20 00 Rx W A8 20 R …

云安全与云渗透

一、引言 随着技术的进步,云计算已成为信息技术领域的主流趋势。企业和个人都在利用云服务实现数据存储和处理的便利,但同时也带来了一系列的安全问题。对于这些问题,我们需要深入理解云安全和云渗透的重要性。本文将详细探讨这两个主题。 …

Leetcode之哈希查找

1. 哈希查找 本质上就是个搜索,但是可以将在一个集合中查找一个元素的时间复杂度降低到O(1)。python中常用的有以下方式: setdict数组模拟 2. 相关算法题 2.1. Leetcode 771 宝石与石头 题目链接题目描述 给你一个字符串 jewels 代表石头中宝石的类…

Java 图片渲染到前端,向前端一次返回多张Base64图片

文章目录 前言图片渲染到前端向前端一次返回多张Base64图片 前言 当我们从服务器读取的图片链接返回给前端,前端可以很轻松的下载和展示,但是对于临时文件,我们不需要保存到服务器,比如PPT转图片,PDF转图片等等&#…

数据结构--》从线性表说起,掌握常用基础算法

目录 初识线性表 线性表的基本操作 顺序表的定义 顺序表的基本操作 单链表的定义 单链表的基本操作 双链表的介绍 循环链表的介绍 静态链表的介绍 初识线性表 线性表是具有相同数据类型的 n (n0) 个数据元素的有限序列,其中n为表长,当n0时线性…

mysql 将date字段默认值设置为CURRENT_DATE

我们是否可以在mysql中,将Date字段的默认值设置为CURRENT_DATE(当前日期)? 答案是8.0之前不可以,8.0.13之后可以。 比如在5.7版本中使用如下sql创建表,将会提示语法错误: CREATE TABLE t_order (id bigi…

CentOS 7远程登录jupyter lab

使用cat /etc/redhat-release看到操作系统是CentOS Linux 7.6,使用uname -r看到内核是3.10.0-957.el7.x86_64。 python3 --version看一下python的版本,pip3 --version看一下pip的版本,这是我CentOS 7默认安装好的。 pip3 install jupyterla…

ASEMI代理光宝高速光耦LTV-M601参数,LTV-M601图片

编辑-Z LTV-M601参数描述: 型号:LTV-M601 平均正向输入电流IF:20mA 反向输入电压VR:5V 功耗PI:40mW 输出集电极电流IO:50mA 输出集电极电压VO:7V 输出集电极功耗Po:85mW 电…

【C++从入门到放弃】stack和queue的深度剖析及空间适配器的介绍

🧑‍💻作者: 情话0.0 📝专栏:《C从入门到放弃》 👦个人简介:一名双非编程菜鸟,在这里分享自己的编程学习笔记,欢迎大家的指正与点赞,谢谢! stack…

SMT车间贴片机Feeder管理方案

Feeder(飞达或供料器)是电子厂SMT车间贴片机上一个重要的部件,它的可用状态关系着贴片机生产的质量的稳定性,如何有效率的管理是每一位车间主管人员不可忽视的问题。根据行业协会大数据的分析发现导致贴片机大约30%的损失时间及1%的物料浪费都是因为Feed…

【Leetcode60天带刷】day14二叉树——144.二叉树的前序遍历,145.二叉树的后序遍历,94.二叉树的中序遍历

题目: 144. 二叉树的前序遍历 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3]示例 2: 输入:root [] 输出:[]示例 3&#x…

5.4.1 虚拟专用网VPN

5.4.1 虚拟专用网VPN 我们已经学习了因特网的路由协议(5.3.1 因特网的路由协议(一)、5.3.2 因特网的路由协议(二)基于距离向量算法的RIP协议、5.3.3 因特网的路由协议(三)OSPF协议、5.3.4 因特…

【Docker】Docker的优势、与虚拟机技术的区别、三个重要概念和架构及工作原理的详细讲解

前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 📕作者简介:热…

开利网络赋能祥兴事业集团推动乡村振兴数字化转型

近日,开利网络到访柳州祥兴实业集团,就即将举办的广西文旅大会数字化部署进行跟踪落地。以“祥兴百朋荷苑”为用户端,祥兴集团针对百朋景区实施了全流程的数字化系统构建,包含景区统一收银、景区导览导航讲解及扫码点餐、预约核销…

Winform模拟Visual Studio工具栏拖拉拽、停靠

背景 随着公司接的业务复杂度提高,软件界面设计需求也相应提升,老板不再满足于单面板的各种跳转,所以明白了吧,不提升自己就等于自愿失业或转行!!! 方案 本来想着自学自写一套控件库来实现&a…

抽象类和接口—javaSE

这里写目录标题 1.抽象类1.1概念1.2语法1.3特性1.4使用 2.接口2.1概念2.2语法2.3特性2.4重要的接口2.4.1给数组对象排序(Comparable、Comparator)2.4.2 Cloneable(浅拷贝) 2.5抽象类和接口的区别 3.object类3.1定义3.2equals3.3获…

智慧文旅-VR全景展示助力开启景区数字化管理新方式

导语: 在数字化时代,旅游业面临着新的机遇和挑战。 为了吸引更多游客并提供独特的旅行体验,结合VR全景技术和智慧文旅的创新模式已经成为不可忽视的趋势。 一.提升旅游感官体验 VR全景技术正以惊人的速度在旅游业中崭露头角。通过…

【自监督论文阅读 2】MAE

文章目录 一、摘要二、引言2.1 引言部分2.2 本文架构 三、相关工作3.1 Masked language modeling3.2 Autoencoding3.3 Masked image encoding3.4 Self-supervised learning 四、方法4.1 Masking4.2 MAE encoder4.3 MAE decoder4.4 Reconstruction target 五、主要实验5.1 不同m…

【云原生】· 一文了解docker中的网络

目录 🍒查看docker网络 🍒bridge网络 🍒none网络 🍒host网络 🍒自定义容器网络 🦐博客主页:大虾好吃吗的博客 🦐专栏地址:云原生专栏 根据前面的学习,已经对d…