决策树算法总结

news/2025/3/15 15:54:51/文章来源:https://www.cnblogs.com/luweiseu/p/18773789

决策树算法总结

决策树算法总结

基本概念

决策树是一种基本的分类与回归方法,通过对特征空间进行划分构建树形结构以实现决策。它由节点和有向边构成,内部节点代表一个特征或属性,分支是该特征的不同取值,叶节点表示类别或值。其核心思想是依据特征的不同取值对数据集进行递归划分,直至满足停止条件。

信息论相关概念

熵(Entropy):用于衡量随机变量不确定性的指标。对于离散随机变量 \(X\),其取值为 \(x_1, x_2, \cdots, x_n\),概率分布为 \(P(X = x_i)=p_i\)\(i = 1, 2, \cdots, n\),则 \(X\) 的熵 \(H(X)\) 定义为:

\(H(X)=-\sum_{i = 1}^{n}p_i\log_2 p_i\)

条件熵(Conditional Entropy):在已知随机变量 \(X\) 的条件下,随机变量 \(Y\) 的不确定性。计算公式为:

\(H(Y|X)=\sum_{i = 1}^{n}p(x_i)H(Y|X = x_i)\)

其中 \(p(x_i)\)\(X\) 取值为 \(x_i\) 的概率,\(H(Y|X = x_i)\) 是在 \(X = x_i\) 条件下 \(Y\) 的熵。

信息增益(Information Gain):得知特征 \(A\) 的信息使类 \(D\) 的信息不确定性减少的程度,计算公式为:

\(g(D, A)=H(D)-H(D|A)\)

其中,\(H(D)\) 代表数据集 \(D\) 的熵,它用于衡量不同分类类别所具有的不确定性,与所选取的特征无关,体现的是整体分类的不确定性。举例来说,若数据集中存在两类样本,数量分别为 6 和 9,那么样本总数为 15,计算得到 \(p_1 = \frac{6}{15}\)\(p_2 = \frac{9}{15}\),据此便可计算出相应的熵值。

\(H(D|A)\) 是在特征 \(A\) 给定条件下,数据集 \(D\) 的条件熵。仅考虑特征 \(A\),在 \(A\) 不同取值的分组下,计算各组内不同的分类带来的不确定性,随后将各组的不确定性加权求和,此即 “给定条件 \(A\) 下” 分类的不确定性。

信息增益比(Information Gain Ratio):为克服信息增益偏向选择取值较多特征的问题而提出,计算公式为:

\(gr(D, A)=\frac{g(D, A)}{H_A(D)}\)

其中 \(H_A(D)\) 是特征 \(A\) 本身的熵,不关心分类情况,只看特征的取值是否稳定,能表示特征 \(A\) 取值的不确定性,就像一个内核稳定的人,其行为和决策往往有着相对固定的模式,较少受到外界因素的干扰,使得其行为的不确定性较低 。

决策树算法

ID3 算法

原理:以信息增益为准则选择划分特征,每次选取信息增益最大的特征作为当前节点的划分特征,递归构建决策树。

步骤

计算数据集 \(D\) 的熵 \(H(D)\)

针对每个特征 \(A\),计算其条件熵 \(H(D|A)\) 和信息增益 \(g(D, A)\)

挑选信息增益最大的特征作为当前节点的划分特征。

依据该特征的不同取值将数据集 \(D\) 划分为若干子集,对每个子集递归重复上述步骤,直到满足停止条件(如所有样本属于同一类、无特征可划分等)。

缺点:倾向于选择取值较多的特征,易导致过拟合。

C4.5 算法

原理:以信息增益比为准则选择划分特征,克服了 ID3 算法的缺点。

步骤:与 ID3 算法类似,只是选择划分特征时使用信息增益比而非信息增益。

优点:减少对取值较多特征的偏好,提升模型的泛化能力。

损失函数

决策树的损失函数一般是正则化的极大似然函数,形式为:

\(C_{\alpha}(T)=C(T)+\alpha|T|\)

其中:

\(C(T)\) 是决策树 \(T\) 对训练数据的预测误差,计算公式为:

\(C(T)=-\sum_{i = 1}^{L}\sum_{k = 1}^{K}\frac{N_{ik}}{N}\log_2\frac{N_{ik}}{N_i}\)

假设决策树 \(T\)\(L\) 个叶节点,第 \(i\) 个叶节点包含 \(N_i\) 个样本,其中属于第 \(k\) 类的样本有 \(N_{ik}\) 个,总样本数为 \(N\)\(K\) 是类别总数。该公式先计算每个叶节点的熵,再用每个叶节点样本数占总样本数的比例作为权重,对所有叶节点的熵加权求和得到 \(C(T)\)

从直观上看,\(C(T)\) 用于衡量结果树中各节点的不纯度。

\(\alpha\) 是正则化参数,用于控制模型复杂度。

\(|T|\) 是决策树 \(T\) 的叶节点个数,反映树的大小。树越大,模型越复杂,越易过拟合。通过调整 \(\alpha\) 的值,可在模型拟合能力和复杂度间权衡。\(\alpha\) 较小时,注重模型对训练数据的拟合,可能得到较复杂的树;\(\alpha\) 较大时,倾向选择简单的树以避免过拟合。

CART

CART算法(Classification and Regression Tree,分类与回归树)中回归树相关知识总结如下:

  1. 回归树模型表示:假设输入变量为X,输出变量为Y且Y是连续变量,给定训练数据集。一棵回归树对应输入空间(特征空间)的划分及划分单元上的输出值。若输入空间已划分为M个单元\(R_1, R_2, \cdots, R_M\),每个单元\(R_m\)上有固定输出值\(c_m\),则回归树模型可表示为\(\hat{f}(x)=\sum_{m = 1}^{M}c_mI(x \in R_m)\)
  2. 预测误差衡量与最优输出值求解:当输入空间划分确定时,用平方误差\(\sum_{x_i \in R_m}(y_i - c_m)^2\)表示回归树对训练数据的预测误差。单元\(R_m\)上的\(c_m\)最优值\(\hat{c}_m\)\(R_m\)上所有输入实例\(x_i\)对应的输出\(y_i\)的均值,即\(\hat{c}_m = \frac{1}{N_m}\sum_{x_i \in R_m}y_i\),其中\(N_m\)\(R_m\)中样本的数量。
  3. 输入空间划分方法:采用启发式方法,选择第\(j\)个变量\(x^{(j)}\)和它取的值\(s\)作为切分变量和切分点,并定义两个区域\(R_1(j, s)=\{x|x^{(j)} \leq s\}\)\(R_2(j, s)=\{x|x^{(j)} > s\}\)。然后寻找最优切分变量\(j\)和最优切分点\(s\),具体是求解\(\min_{j, s}[\min_{c_1}\sum_{x_i \in R_1(j, s)}(y_i - c_1)^2 + \min_{c_2}\sum_{x_i \in R_2(j, s)}(y_i - c_2)^2]\)。对于固定的输入变量\(j\)可以找到最优切分点\(s\),即\(\hat{s}_j = \arg\min_{s}[\min_{c_1}\sum_{x_i \in R_1(j, s)}(y_i - c_1)^2 + \min_{c_2}\sum_{x_i \in R_2(j, s)}(y_i - c_2)^2]\) ,再遍历所有输入变量,找到最优的切分变量\(j\),构成一个对\((j, s)\),依此将输入空间划分为两个区域。
  4. 回归树生成过程:对每个区域重复上述输入空间划分过程,直到满足停止条件为止,这样生成的回归树通常称为最小二乘回归树。

以下是整理后的最小二乘回归树生成算法:

算法名称:最小二乘回归树生成算法

输入:训练数据集 \(D = \{(x_1, y_1), (x_2, y_2), \cdots, (x_N, y_N)\}\),其中 \(x_i\) 为输入特征向量,\(y_i\) 为连续型输出值。

输出:回归树 \(f(x)\)

算法步骤

  1. 选择最优切分变量和切分点
    • 在训练数据集所在的输入空间中,遍历所有的特征变量 \(j\)(假设特征变量共有 \(n\) 个,\(j = 1, 2, \cdots, n\))。
    • 对于固定的切分变量 \(j\),扫描所有可能的切分点 \(s\)(可以是该特征变量取值范围内的所有值)。
    • 计算并求解 \(\min_{j, s}[\min_{c_1}\sum_{x_i \in R_1(j, s)}(y_i - c_1)^2 + \min_{c_2}\sum_{x_i \in R_2(j, s)}(y_i - c_2)^2]\),其中 \(R_1(j, s)=\{x|x^{(j)} \leq s\}\)\(R_2(j, s)=\{x|x^{(j)} > s\}\)\(c_1\) 是区域 \(R_1(j, s)\) 上的输出值,\(c_2\) 是区域 \(R_2(j, s)\) 上的输出值。
    • 选择使上述式子达到最小值的变量 \(j\) 和切分点 \(s\) 组成的对 \((j, s)\)
  2. 划分区域并确定输出值
    • 根据选定的对 \((j, s)\),将当前区域划分为两个子区域 \(R_1(j, s)\)\(R_2(j, s)\)
    • 计算区域 \(R_1(j, s)\) 上的输出值 \(c_1 = \frac{1}{N_1}\sum_{x_i \in R_1(j, s)}y_i\),其中 \(N_1\) 是区域 \(R_1(j, s)\) 中样本的数量;计算区域 \(R_2(j, s)\) 上的输出值 \(c_2 = \frac{1}{N_2}\sum_{x_i \in R_2(j, s)}y_i\),其中 \(N_2\) 是区域 \(R_2(j, s)\) 中样本的数量。
  3. 递归划分
    • 对步骤 2 中得到的两个子区域,分别递归调用步骤 1 和步骤 2,即继续在每个子区域内寻找最优切分变量和切分点,进行区域划分并确定输出值。
    • 递归过程持续进行,直到满足预先设定的停止条件。停止条件可以是:达到预设的树的最大深度、子区域内样本数量小于某个阈值、子区域内的样本输出值方差小于某个阈值等。
  4. 生成回归树
    • 经过上述递归划分后,将输入空间划分为 \(M\) 个区域 \(R_1, R_2, \cdots, R_M\)
    • 生成决策树 \(f(x)=\sum_{m = 1}^{M}c_mI(x \in R_m)\),其中 \(c_m\) 是区域 \(R_m\) 上的输出值,\(I(x \in R_m)\) 是指示函数,当 \(x\) 属于区域 \(R_m\) 时,\(I(x \in R_m) = 1\),否则 \(I(x \in R_m) = 0\)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

book_第2章例题

1.温度转化(符号在后) 2.温度转化(符号在前) 3.蟒蛇例题

SvelteKit 最新中文文档教程(3)—— 数据加载

前言 Svelte,一个语法简洁、入门容易,面向未来的前端框架。 从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1:Svelte 以其独特的编译时优化机制著称,具有轻量级、高性能、易上手等特性,非常适合构…

web57笔记(严格过滤-$和()来构造数字)

<?php/* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-05 20:49:30 # @Last Modified by: h1xa # @Last Modified time: 2020-09-08 01:02:56 # @email: h1xa@ctfer.com # @link: https://ctfer.com */// 还能炫的动吗? //flag in 36.php if(isset($_GE…

Contest3898 - 计科23级算法设计与分析平时作业-01

题目链接 A.DNA Sorting 题面思路 题目意思就是说,如果一个字符串中前面的字符比后面的字符大,那么它的无序度就+1,根据这个给一组字符串从最有序到最无序依次输出。那么明白题目意思之后直接模拟即可。 示例代码 #include<bits/stdc++.h>using namespace std;#define…

web56笔记(甚⾄把数字都给过滤掉了,还有部分的特殊字符)

<?php/* # -*- coding: utf-8 -*- # @Author: Lazzaro # @Date: 2020-09-05 20:49:30 # @Last Modified by: h1xa # @Last Modified time: 2020-09-07 22:02:47 # @email: h1xa@ctfer.com # @link: https://ctfer.com*/// 你们在炫技吗? if(isset($_GET[c])){$c=$_GET…

Odoo17中套件追溯

基于序列号的套件产品追溯 我们知道odoo原生的套件BOM类型并不会产生真正的库存,从而导致了某些情况下我们想要对套件进行追溯的困难性。基于这样的一个背景,我们在欧姆生产解决方案中新增了对套件产品的追溯拓展,下面我们就来看看如何使用吧。 产品设置 假设我们这里一台组…

Linux | 堆内存管理

from pixiv进程的地址空间jyy 进程的地址空间 Linux 堆内存管理深入分析如何查看Linux进程的地址空间? 答:pmap /proc/$PID/maps/proc文件系统 动态内核信息: /proc 是一个虚拟文件系统,主要提供内核和正在运行的进程的信息。它不是存储在磁盘上的真实文件,而是在运行时动…

如何使用Wled控制RGB LED

要装饰您的照明设置,WS2812B RGB led是最好的选择之一。为了控制这些可寻址的led,我们需要一个像ESP32这样的微控制器,还必须上传代码。编写代码来控制可寻址led并不难,但如果你只是想在客厅或办公室添加一些环境照明,并通过智能手机来管理它呢?目前最好的选择,毫无疑问…

将树莓派Pico变成带有触摸屏界面的USB-HID设备

将您的树莓派Pico变成带有触摸屏界面的USB-HID设备!在这个项目中,我们将在Arduino IDE中设置编程环境,为3.5”Pico Touch LCD屏蔽配置库,测试基本功能,创建简单的按钮(用于复制和粘贴),显示自定义图标,甚至使用Windows环境变量来启动程序。设置编程环境 安装Arduino IDE …

20250315

1. 20号胶 3-5的细分

语音交友app源码,优化白屏降低用户负面情绪

语音交友app源码,优化白屏降低用户负面情绪目标: 缩小打包体积,优化白屏时间路由懒加载const Home = () => import(/* webpackChunkName: "home" */"@/views/home/index.vue"); const MetricGroup = () => import(/* webpackChunkName: "met…

Visio绘制时间轴安排图的方法

本文介绍基于Visio软件绘制时间轴、日程安排图、时间进度图等的方法~本文介绍基于Visio软件绘制时间轴、日程安排图、时间进度图等的方法。在很多学习、工作场合中,我们往往需要绘制如下所示的一些带有具体时间进度的日程安排、工作流程、项目进展等可视化图表。而基于Visio软…