10.【机器学习】十大算法之一决策树(Decision tree)算法原理讲解

【机器学习】十大算法之一决策树(Decision tree)算法原理讲解

一·摘要

决策树是一种广泛应用于机器学习和数据分析领域的算法,它特别适用于分类和回归问题。作为一种监督学习算法,决策树通过模仿人类决策过程来构建预测模型。它的核心思想是从数据特征中选择最优的属性作为决策节点,然后根据这个属性的值将数据分成几个子集,这个过程递归地在每个子集上重复,直到满足某个停止条件。

决策树的结构可以形象地看作是一棵树,其中根节点代表整个数据集,内部节点代表数据的一个特征属性,叶节点则代表最终的决策结果。从根节点到叶节点的每条路径都代表一个规则,这些规则合在一起就形成了一个完整的决策过程。在分类问题中,决策树通过一系列的问题将数据分到不同的类别中;而在回归问题中,决策树则预测一个连续的数值。

构建决策树的过程通常包括特征选择、决策节点的确定、树的生成和剪枝。特征选择的目的是找到数据中最具区分能力的特征,决策节点的确定则是基于这个特征将数据集分割成更小的、更同质的子集。树的生成是递归地应用特征选择和决策节点确定的过程,直到满足停止条件,比如达到某个树深度、所有数据点都属于同一类别或某一类的误差低于预设阈值。剪枝是决策树的优化过程,目的是防止过拟合,通过移除或合并一些节点来简化树的结构。

二·个人简介

🏘️🏘️个人主页:以山河作礼

🎖️🎖️:Python领域新星创作者,CSDN实力新星认证,CSDN内容合伙人,阿里云社区专家博主,新星计划导师,在职数据分析师。

💕💕悲索之人烈焰加身,堕落者不可饶恕。永恒燃烧的羽翼,带我脱离凡间的沉沦。


🐘 希望大家能持续支持,共同向前迈进!😁 如果您觉得文章有价值, 欢迎留言💬,点赞👍,收藏🔖并关注我们➕🤝。 🪐💫💫💫💫💫💫💫热门专栏💫💫💫💫💫💫💫🪐

类型 专栏
Python基础 Python基础入门---详解版
Python进阶 Python基础入门---模块版
Python高级 Python网络爬虫从入门到精通🔥🔥🔥
Web全栈开发 Django基础入门
Web全栈开发 HTML与CSS基础入门
Web全栈开发 JavaScript基础入门
Python数据分析 Python数据分析项目🔥🔥
机器学习 机器学习算法🔥🔥
人工智能 人工智能

三·什么是决策树

决策树是一种直观且强大的机器学习算法,用于通过一系列的问题将数据分类到不同的类别中,或者预测一个连续的数值。它模仿了人类决策过程,通过树形结构进行决策,其中每个内部节点代表一个特征属性上的判断,每个分支代表判断的结果,而每个叶节点则代表最终的决策结果。决策树的构建过程从根节点开始,根节点代表整个数据集,然后基于数据集中某个特征的最佳分割点,递归地将数据集分割成越来越小的子集,直到满足特定的停止条件,如达到预设的最大深度、所有数据点属于同一类别或分类误差低于某个阈值。

决策树算法的核心在于特征选择,即在每个节点上选择哪个特征进行分割,以使得数据集的分类尽可能清晰。特征选择的方法有多种,如信息增益、基尼不纯度等,它们帮助算法确定哪个特征对分类最有区分能力。随着树的不断生长,可能会产生过拟合的问题,即模型对训练数据拟合得过于完美,以至于失去了泛化能力。为了避免这种情况,决策树通常需要进行剪枝,剪枝通过减少树的大小来防止过拟合,提高模型的泛化能力。

决策树的优势在于模型的可解释性,我们可以很容易地理解模型是如何做出预测的。此外,决策树能够处理各种类型的数据,包括数值型和类别型,并且对数据的准备要求相对较低。然而,决策树也有一些局限性,比如容易受到数据中噪声和异常值的影响,以及在某些情况下可能会偏向于过于复杂的模型。

四·什么是树

树是 个结点的有限集合,若 ,则该树为空树,该集合需要满足以下条件才能被称为树:

对于任意一个非空树,

(1)有且仅有一个根结点,也就是第一层只有一个结点

(2)当结点数量大于1时,根结点以外的结点可分为互不相交的有限集合,每一个集合本身也是一个棵

树,并称为根结点的子树

下图所示是一个完全二叉树,用于理解层次、深度等名词的概念,其中A、B结点有两颗子树,其深度为2,无

子树的结点,其深度为0

4.1 二叉树

二叉树是一种特殊的树,具有如下特点:

1.每个结点最多有两棵子树,深度只能为0、1、2

2.二叉树的子树是区分左右的,即使结点只有一颗子树,也要区分它是左子树还是右子树

二叉树的五种基本形态:

(1)空子树,没有编号的圆圈表示,实际无结点

(2)只有一个根结点

(3)根结点只有左子树

(4)根结点只有右子树

(5)根结点既有左子树也有右子树

4.1.1 特殊的二叉树:

	1.完全二叉树
			除了最下层,其余每层的结点数都达到了最大值,且最下层的叶子结点从最左位置开始排列
	2.满二叉树
			每层的结点数都达到了最大值,满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树
			![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/622e28965e7748e4adb1bc384a70ea67.png)

4.1.2 举例说明

比如:你母亲要给你介绍男朋友,是这么来对话的:

女儿:多大年纪了?

母亲:26

女儿:长的帅不帅?

母亲:挺帅的

女儿:收入高不?

母亲:不算很高,中等情况

女儿:是公务员不?

母亲:是,在税务局上班呢

女儿:那好,我去见见

下图完整表达了这个女孩决定是否见一个约会对象的策略

绿色结点表示判断条件,橙色结点表示决策结果

应用场景

一个叫做二十个问题的游戏,游戏的规则很简单:

参与游戏的一方在脑海中想某个事物,其他参与者向他提问,只允许提 20 个问题,问题的答案也只能

用对或错回答

问问题的人通过推断分解,逐步缩小待猜测事物的范围,最后得到游戏的答案

一个邮件分类系统,大致工作流程如下:

首先检测发件人的邮箱地址,如果是公司邮箱的域名, 则将其归类为需要及时处理的邮件,如果不是来自

这个域名,则检测邮件内容是否包含指定的关键词,如篮球、科技、新闻等,如果包含则将其归类为空

闲时阅读的邮件,如果不包含则将其归类为无需阅读的垃圾邮件。

五·决策树的优缺点

5.1 优点

  1. 决策树易于理解和解释,可以可视化分析,容易提取出规则;
  2. 可以同时处理标称型和数值型数据;
  3. 比较适合处理有缺失属性的样本;
  4. 能够处理不相关的特征;
  5. 测试数据集时,运行速度比较快;
  6. 在相对短的时间内能够对大型数据源做出可行且效果良好的结果。

5.2 缺点

  1. 容易发生过拟合(随机森林可以很大程度上减少过拟合);
  2. 容易忽略数据集中属性的相互关联;
  3. 对于那些各类别样本数量不一致的数据,在决策树中,进行属性划分时,不同的判定准则会带来不同的属性选择倾向;信息增益准则对可取数目较多的属性有所偏好(典型代表ID3算法),而增益率准则(CART)则对可取数目较少的属性有所偏好,但CART进行属性划分时候不再简单地直接利用增益率尽心划分,而是采用一种启发式规则)(只要是使用了信息增益,都有这个缺点,如RF)。
  4. ID3算法计算信息增益时结果偏向数值比较多的特征。 帮我重新整合上述内容

六·算法原理

决策树是一种树形结构(二叉树或非二叉树),由结点(node)和有向边(directed edge)组成,结点有两

种类型:内部结点(internal node)和叶子结点(leaf node),内部结点表示一个特征或属性

(features),叶子结点表示一个类别(labels)

决策树的决策过程:从根结点开始,对实例的某一特征进行测试,并根据测试结果,将实例分配到其子结

点,每个子结点对应该特征的一个取值,如此递归地对实例进行测试并分配,直到到达叶子结点,最后将叶

子结点的类别作为决策结果

如何将数据集最好地划分为不同的类别?如何设定数据集的划分准则:先以哪个特征来划分?后以哪个特征

来划分?

那么就涉及到信息熵和信息增益的重要概念

数据集的划分原则:将无序的数据变得更加有序,将不确定的数据变得更加确定

决策树停止生成的条件,即数据集停止划分的条件:

(1)当前结点包含的样本全属于同一类别,无需划分

(2)当前属性集(即特征)为空,或是所有样本在所有属性(即特征)上取值相同,无法划分

(3)当前结点包含的样本集合为空,不能划分

思考:女孩相亲为何优先判断年龄?如何衡量年龄这个特征的重要性?就是决策树要解决的核心问题

七·信息熵

信息论(information theory)中的熵(entropy)

1948年,香农提出了信息熵的概念,解决了对信息的量化度量问题,也称香农熵,简称熵

一条信息的信息量大小和它的不确定性有直接的关系。比如说,我们要搞清楚一件非常非常不确定的

事,或是我们一无所知的事情,就需要了解大量的信息。相反,如果我们对某件事已经有了较多的了

解,我们不需要太多的信息就能把它搞清楚。所以,从这个角度,我们可以认为,信息量的度量就等于

不确定性的多少

设数据集 中第 类样本所占比例为 ,则 的信息熵定义为

简单来说,信息熵表示信息的混乱程度(不确定性或纯度)

信息越有序,信息熵越小,信息越无序,信息熵越大

信息熵越大越不确定,信息熵越小越确定

八·信息增益

信息增益(information gain):数据集划分前后的信息差值称为信息增益,选择信息增益最高的特征优先划

若使用特征 对数据集 进行划分,特征 有 个值,第 个分支结点的样本为 ,数据集 中第 个分支结点

的样本所占比例为 ,那么特征 对数据集 进行划分所获得的信息增益为:

ID3算法以信息增益为准则划分,划分后的剩余数据集再以信息增益为准则接着划分,以此递归,直到所有数

据集划分完毕,最终得到整个决策树.

九·信息增益率

信息增益准则偏好取值较多的特征,可能导致过拟合,而无法对新样本有效预测

C4.5算法不直接使用信息增益,而是以信息增益率为准则划分,信息增益率定义为:

注意:信息增益率准则偏好取值较少的特征,因此C4.5算法并不是直接选择信息增益率最高的特征优先划

分,而是从信息增益高于平均水平的特征中,选择信息增益率最高的特征划分.

十·基尼指数

基尼指数:越大越不确定(纯度越低),越小越确定(纯度越高),选择基尼指数最小的特征优先划分

CART算法以基尼指数为准则划分,基尼指数定义为:

十一·如何学习决策树

决策树学习是一个将数据转换为决策树模型的过程,通常包括三个主要步骤:特征选择、决策树的生成和决策树的剪枝。

  1. 特征选择是决策树学习中的第一步,它涉及从数据集中众多特征中选择一个最具信息量的特征作为节点分裂的依据。特征选择的目的是找到一个特征,使得基于该特征的数据分割能够最大化类别的分离度,即让分割后的数据子集尽可能地纯净,包含同一类别的样本尽可能多,不同类别的样本尽可能少。特征选择的方法通常包括信息增益、基尼不纯度等,这些方法通过计算每个特征的不纯度来评估其对分类的贡献度。
  2. 决策树的生成是基于特征选择的结果,递归地构建树的过程。从根节点开始,使用特征选择得到的最佳特征对数据集进行分割,然后对分割后的每个子集重复这一过程,继续寻找子集中的最佳特征进行进一步的分割,直到满足停止条件,比如子集中的样本全部属于同一类别、没有更多特征可供选择或者达到了预设的最大深度。这个过程中,每个内部节点代表了一个特征的测试,而每个分支代表测试的一个结果,叶节点则代表最终的决策或预测结果。
  3. 决策树的剪枝是为了解决过拟合问题而采取的一种技术。过拟合意味着决策树过于复杂,对训练数据的噪声过于敏感,导致模型在未知数据上的泛化能力下降。剪枝通过移除或合并一些节点来简化决策树的结构,减少树的复杂度。剪枝可以是预剪枝,即在生成过程中提前停止树的生长;也可以是后剪枝,即先生成一个完整的树,然后自底向上地剪除对整体性能没有贡献或贡献很小的分支。剪枝的目的是找到一棵既能很好地拟合训练数据,又具有较强泛化能力的决策树。

十二·3种典型的决策树算法

决策树算法家族中,有三种特别典型的算法,它们分别是ID3算法、C4.5算法和CART算法,每种算法都有其独特的特点和应用场景。

12.1 ID3算法(Iterative Dichotomiser 3)

ID3算法(Iterative Dichotomiser 3)是最早的决策树算法之一,由Ross Quinlan在1986年提出。它主要用于分类问题,通过信息增益作为特征选择的依据。信息增益度量了不包含数据集中的类别信息时的熵与包含数据集中某个特征后剩余的熵之间的差值。ID3算法递归地选择最具有信息增益的特征作为节点分裂的依据,直到达到停止条件。然而,ID3算法在处理连续特征时存在困难,且对噪声数据和异常值较为敏感。

12.2 C4.5算法

C4.5算法是ID3算法的改进版,由Ross Quinlan在1993年提出。C4.5算法不仅改进了ID3在处理连续特征和缺失值的问题,还引入了树的构建后剪枝的机制,提高了模型的准确性和鲁棒性。C4.5算法使用信息增益比来选择特征,这在存在多个具有相似信息增益的特征时,能够更有效地选择特征。此外,C4.5算法能够处理不一致的数据集,并生成可理解的规则。

12.3 CART(Classification and Regression Trees)算法

CART(Classification and Regression Trees)算法是一种既可以用于分类问题也可以用于回归问题的决策树算法。CART算法的核心在于它能够处理二元分类问题,并且可以构建出不需要剪枝的决策树。CART算法使用基尼不纯度作为分裂准则,这是一种衡量数据集纯度的指标。在分类问题中,CART算法生成的树能够自动处理多类问题;在回归问题中,它使用成本函数来最小化预测误差。CART算法的另一个特点是它能够处理各种类型的数据,包括数值型和类别型,并且可以自动处理缺失值。

这三种决策树算法各有优势,ID3算法作为基础算法,为决策树的发展奠定了基础;C4.5算法在ID3的基础上进行了改进,提高了算法的健壮性;而CART算法则因其灵活性和对不同类型问题的适应性,成为了应用广泛的决策树算法。在实际应用中,选择哪种算法取决于具体问题的需求和数据的特性。随着机器学习技术的发展,这些算法也在不断地演进和优化,以适应更广泛的应用场景。

相关推荐
PieroPc13 分钟前
Python 写的 智慧记 进销存 辅助 程序 导入导出 excel 可打印
开发语言·python·excel
tinker在coding16 分钟前
Coding Caprice - Linked-List 1
算法·leetcode
古希腊掌管学习的神2 小时前
[机器学习]XGBoost(3)——确定树的结构
人工智能·机器学习
梧桐树04294 小时前
python常用内建模块:collections
python
Dream_Snowar4 小时前
速通Python 第三节
开发语言·python
海棠AI实验室5 小时前
AI的进阶之路:从机器学习到深度学习的演变(一)
人工智能·深度学习·机器学习
XH华5 小时前
初识C语言之二维数组(下)
c语言·算法
南宫生5 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
不想当程序猿_5 小时前
【蓝桥杯每日一题】求和——前缀和
算法·前缀和·蓝桥杯
IT古董5 小时前
【机器学习】机器学习的基本分类-强化学习-策略梯度(Policy Gradient,PG)
人工智能·机器学习·分类