决策树

简介: 分类决策树

分类决策树是一种基于树状结构的监督学习模型,主要用于对数据进行分类任务。它通过一系列规则(即树的分支)对输入数据进行递归划分,最终达到预测输出类别(即树的叶节点)的目的。分类决策树以其直观易懂、解释性强的特点被广泛应用在各种领域,如医学诊断、金融风险评估、市场营销策略制定等。下面我们对分类决策树进行更详细描述:

基本原理

分类决策树模拟人类在面对问题时进行逻辑判断和决策的过程。它通过一系列问题(基于数据的特征)逐步缩小决策范围,直至达到一个明确的结论。在数据科学和机器学习的语境下,这个过程表现为:

  • 根节点:代表整个数据集,即所有待分类的样本集合。

  • 内部节点(决策节点):每个内部节点表示一个特征测试条件。根据该特征的不同取值,数据被分割成若干子集,并沿着树的分支流向对应的子节点。

  • 分支:连接内部节点和子节点的连线,代表特征测试条件的结果导向。

  • 叶节点(终端节点):树的最底层节点,表示分类结果。每个叶节点对应一个类别标签,代表经过从根到该节点路径上的特征测试后,数据样本被归属于该类别的概率或确定性标签。

构建过程

构建分类决策树通常包括以下步骤:

特征选择

在每个内部节点,选择一个最优特征作为划分标准。最优特征通常是指根据这个特征划分后信息增益、基尼指数或类似指标的特征最优的特征,这些指标反映了根据该特征划分数据集后纯度的提升程度。

纯度:对于包含多个类别的数据集,如果类别数越多,则认为这个数据集越不纯。反之则越纯。纯度越高,分类效果越好。

信息增益

首先了解一下信息熵

信息熵

在机器学习中,信息熵(Entropy)是一个核心概念,用于量化随机变量或数据集的“不确定性”或“混乱度”。它衡量了一个随机变量可能取值的期望信息量。具体来说,信息熵越大,代表随机变量的不确定性越高,或者说数据的混乱程度越高,越混乱,证明其中所含有的标签越多,自然也就越混乱。

举个例子:在一个书架上,每本书是一个样本,当我们排列这些书时,如果它们同样高,那么排出来是美观的,如果高度都是参差不齐的,那么排出来就很乱。这就是熵低与高的区别。
熵高 -> 不一样的多 熵低 -> 一样的多

在信息论中,熵被用来衡量一个随机变量出现的期望值。它代表了在被接收之前,信号传输过程中损失的信息量,又被称为信息熵。对于离散随机变量 $X$,其信息熵 $H(X)$ 定义为:

$$ H(X) = -\sum_{x \in X} p(x) \log_2 p(x) $$

其中,$p(x)$ 是随机变量 $X$ 取值为 $x$ 的概率。这个公式计算了所有可能取值的概率与其对应的信息量(即概率的负对数)的期望值。

信息增益的计算

计算信息增益的步骤如下:

  1. 计算父节点的熵:首先,需要计算整个数据集的熵,这代表了数据集的不确定性。父节点的熵的计算公式为:
    $$ \text{Entropy}(S) = -\sum_{i=1}^{n} p(i) \log_2 p(i) $$
    其中,S代表数据集,p(i)代表数据集中第i个类别出现的概率。

  2. 计算子节点的熵以及加权平均:然后,对于每个特征,计算其划分数据集后得到的子节点的熵。这涉及到对数据集按照每个特征的不同取值进行划分,并计算每个子集的熵。

子节点熵的加权平均的公式如下:

$$ \text{Weighted Average of Child Entropies} = \sum_{j=1}^{m} \frac{|S_j|}{|S|} \times \text{Entropy}(S_j) $$

其中:

  • ( S ) 是父节点所代表的数据集。
  • ( S_j ) 是根据某个特征的第 ( j ) 个取值划分得到的子节点所代表的数据子集。
  • ( m ) 是该特征的不同取值的数量,也就是子节点的数量。
  • ( |S| ) 和 ( |S_j| ) 分别表示父节点和子节点数据集的大小(即样本数量)。
  • ( \text{Entropy}(S_j) ) 是子节点 ( S_j ) 的熵。
  1. 计算信息增益:最后,用父节点的熵减去子节点熵的加权平均,得到该特征的信息增益。
    $$ \text{Information Gain}(S, \text{feature}) = \text{Entropy}(S) - \text{Weighted Average of Child Entropies} $$

通过计算每个特征的信息增益,可以选择信息增益最大的特征作为当前节点的划分标准。这样,每次划分都能最大程度地减少数据的不确定性,从而提高分类模型的性能。

信息增益率(Information Gain Ratio)是信息增益的一个改进版本,它考虑了特征取值数量的影响,以避免选择取值较多的特征(比如读取数据时把id也读取了)。信息增益率的计算公式为:
$$ \text{Information Gain Ratio} = \frac{\text{Information Gain}}{\text{Intrinsic Value of Feature}} $$

基尼指数

基尼指数(Gini Index)在机器学习和数据挖掘中,是一个用于衡量数据集合纯度的指标。与熵相似,基尼指数越小,表示集合的纯度越高。在构建决策树时,基尼指数被用来选择划分数据集的最优特征,以便将数据集划分为更纯的子集。

基尼指数的计算公式如下:

$$\text{Gini Index}(S) = 1 - \sum_{i=1}^{m} p_i^2$$

其中:

  • (S) 是要计算基尼指数的数据集。
  • (m) 是数据集中类别的数量。
  • (p_i) 是数据集中第 (i) 个类别出现的概率。

这个公式衡量的是从数据集中随机选择一个样本,然后错误地将其分类到其他类别的概率。当数据集完全属于一个类别时(即纯度最高),基尼指数达到最小值0;当数据集中的类别分布均匀时,基尼指数达到最大值(1 - \frac{1}{m})。

属性的基尼指数它用于评估按照某个属性(或特征)的不同取值划分数据集后,所得子集的纯度和不确定性。基尼指数越小,表示按照该属性划分后的子集纯度越高。

计算属性的基尼指数的基本步骤如下:

  1. 确定数据集:首先,确定要计算基尼指数的数据集,以及用于划分的属性。

  2. 划分数据集:根据属性的不同取值,将数据集划分为多个子集(或称为子节点)。

  3. 计算每个子集的基尼指数:对于每个子集,计算其基尼指数。基尼指数的计算公式为:

    $$\text{Gini Index}(S) = 1 - \sum_{i=1}^{m} p_i^2$$

    其中,(S) 是子集,(m) 是子集中类别的数量,(p_i) 是子集中第 (i) 个类别出现的概率。

  4. 计算加权基尼指数:由于不同子集的大小(即样本数量)可能不同,因此需要计算加权基尼指数,以考虑不同子集对数据集整体纯度的影响。加权基尼指数是每个子集的基尼指数与其样本数量占数据集总样本数量的比例的乘积之和。

    $$\text{Weighted Gini Index} = \sum_{j=1}^{n} \frac{|S_j|}{|S|} \times \text{Gini Index}(S_j)$$

    其中,(S_j) 是根据属性划分得到的第 (j) 个子集,(n) 是子集的数量,(|S_j|) 是子集 (S_j) 的样本数量,(|S|) 是数据集的总样本数量。

  5. 选择最优属性:比较不同属性的加权基尼指数,选择使得加权基尼指数最小的属性作为划分标准。这样,每次划分都能使得数据集的纯度得到最大提升。

属性的基尼指数在决策树构建过程中起着关键作用,它帮助我们选择能够最大程度提升数据集纯度的属性作为划分依据,从而构建出性能更优的分类模型。

决策树生长

选定我们要分类的特征后,就可以开始构建决策树。决策树的生长过程就是从根节点开始,递归地对数据集进行划分,生成一系列的内部节点和叶节点。

基于选定的最优特征及其阈值(对于连续特征[回归决策树(解决回归问题)])或类别(对于离散特征的普通决策树),将数据集划分为多个子集,并为每个子集生成新的节点。这一过程递归地在每个子节点上重复,直到满足停止条件为止。常见的停止条件包括:

节点包含的样本数小于预设阈值:当节点内样本数量过少时,继续划分可能带来过拟合风险,此时停止生长。
所有样本属于同一类别:该节点无需再划分,其类别已经一致。
没有更多特征可供划分:所有特征已用于划分,或剩余特征无法有效提高模型性能。
达到预设的最大深度或节点数:防止过深的树导致模型过于复杂,降低泛化能力。

决策树剪枝

生长得到的原始决策树可能存在过拟合现象,即对训练数据拟合得过于复杂,不利于泛化到未知数据。剪枝旨在简化树结构,提高模型的泛化能力。常见的剪枝方法包括:

预剪枝:在生长过程中提前终止树的生长,如设定最大深度、最小样本数等阈值。
后剪枝:先生成完整的决策树,然后自底向上考察各内部节点,若将其替换为叶节点能带来整体性能的提升(如根据验证集计算的精度提高),则进行剪枝。

应用与优势

分类决策树具有以下优点:

易于理解和解释:决策树的结构清晰,决策规则直观,便于非专业人士理解模型的决策逻辑。
无需数据预处理:对于缺失值和非数值型数据有较好的适应性,通常不需要进行复杂的预处理。
可处理多输出问题:通过构建多棵树或扩展单棵树的结构,可以处理多类别或多输出的任务。
支持并行计算:在某些实现中,决策树的构建过程可以并行化,加速训练速度。

目录
相关文章
|
API Android开发 数据中心
教你如何申请免费的API接口
教你如何申请免费的API接口
2562 0
教你如何申请免费的API接口
|
3月前
|
机器学习/深度学习 安全 Serverless
【创新未发表】【故障诊断】基于连续小波变换-CNN, ResNet, CNN-SVM, CNN-BiGRU, CNN-LSTM的故障诊断研究【凯斯西储大学数据】(Matlab代码实现)
【创新未发表】【故障诊断】基于连续小波变换-CNN, ResNet, CNN-SVM, CNN-BiGRU, CNN-LSTM的故障诊断研究【凯斯西储大学数据】(Matlab代码实现)
279 0
|
4月前
|
人工智能 监控 数据可视化
新媒体内容策划看板:高效内容生产的秘密武器
新媒体内容策划看板是可视化任务管理工具,用于规划选题、排期、执行及监控内容生产全流程,解决传统管理方式效率低、协作混乱等问题。核心模块包括选题库、内容日历、制作追踪和多平台分发跟踪,支持团队高效协作与数据反馈。主流工具如飞书、Notion、板栗看板各具优势,适配不同规模团队。通过集成数据指标(阅读量、转化率等)和AI辅助(智能排期、生成建议),看板可优化内容策略并形成闭环管理。未来,看板将与AI深度结合,推动内容生产智能化。
252 0
|
10月前
|
机器学习/深度学习 算法 量子技术
《深度揭秘:拉普拉斯平滑在朴素贝叶斯算法中的关键作用与参数选择之道》
朴素贝叶斯算法在文本分类、情感分析等领域广泛应用,但常遇零概率问题,即某些特征从未与特定类别同时出现,导致条件概率为零,影响模型准确性。拉普拉斯平滑通过在计数上加一小正数(如α=1),避免了零概率问题,提升了模型的稳定性和泛化能力。选择合适的平滑参数α至关重要:经验法则通常设α=1;交叉验证可找到最优α值;根据数据规模和特征分布调整α也能有效提升模型性能。
460 19
|
7月前
|
Linux 开发工具 git
Gitea Enterprise 23.8.0 发布 - 本地部署的企业级 Git 服务
Gitea Enterprise 23.8.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
126 0
Gitea Enterprise 23.8.0 发布 - 本地部署的企业级 Git 服务
|
9月前
|
数据采集 SQL 存储
【亲测有用】数据中台数据比对管理能力演示
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
JSON 缓存 前端开发
PHP如何高效地处理JSON数据:从编码到解码
在现代Web开发中,JSON已成为数据交换的标准格式。本文探讨了PHP如何高效处理JSON数据,包括编码和解码的过程。通过简化数据结构、使用优化选项、缓存机制及合理设置解码参数等方法,可以显著提升JSON处理的性能,确保系统快速稳定运行。
|
缓存 NoSQL 数据库
构建高效后端服务:从架构设计到性能优化的实践之路
本文旨在探讨如何通过合理的架构设计和性能优化策略,构建一个既稳定又高效的后端服务。文章首先概述了后端服务开发中常见的挑战和误区,随后详细介绍了微服务架构、缓存机制、数据库优化、服务器配置以及代码审查等关键技术和方法。通过深入浅出的案例分析和实用建议,本文将为后端开发者提供一套系统化的指导方案,助力其打造出高性能的后端服务体系。
420 9
|
数据采集 SQL 安全
Minerva -- Airbnb 的大规模数据指标系统 Part 1
Minerva -- Airbnb 的大规模数据指标系统 Part 1
1330 0
Minerva -- Airbnb 的大规模数据指标系统 Part 1
|
SQL 关系型数据库 数据库
SQL 审核:基于PG数据库插件hook的SQL规范审核工具
此议题的主题是PG数据库插件和SQL规范审核相关的内容。首先了解一下hook技术的基本原理。接下来将介绍一下SQL语句在PG数据库的分析解析和执行过程。然后结合hook和SQL执行过程介绍一下SQL规范审核这个插件,聊一聊该插件的实现原理。最后做一下展望。
2871 0