决策树一CART算法(第四部分)

article/2025/10/15 2:08:32

决策树一CART算法(第四部分)


CART树的剪枝:算法步骤

输入:CART算法生成的决策树。
输出:最优决策树T

  1. K = 0 , T = T 0 K=0,T=T_0 K=0T=T0 ,从完整的决策树出发

    k代表迭代次数,先从完整的树开始,即k=0开始。

  2. α = + ∞ \alpha=+\infty α=+,后面会比较大小,损失函数小则可以剪枝,从大到小比较

  3. 自下而上地对各内部结点t计其 C ( T t ) , ∣ T t ∣ C(T_t),|T_t| C(Tt),Tt以及
    g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 , α = min ⁡ ( α , g ( t ) ) g(t)=\frac{C(t)-C\left(T_{t}\right)}{\left|T_{t}\right|-1}, \quad \alpha=\min (\alpha, g(t)) g(t)=Tt1C(t)C(Tt),α=min(α,g(t))
    g ( t ) g(t) g(t)代表了这个节点对应的 α \alpha α

    T t T_t Tt表示以t为根结点的子树, C ( t ) C(t) C(t) 代表单个节点的预测误差, C ( T t ) C(T_t) C(Tt)是对训练数据的预测误差, ∣ T t ∣ |T_t| Tt T t T_t Tt的叶结点个数。

    这里的预测误差与预测错误率不同,它还可以包括平方损失、基尼指数等。

  4. 自上而下地访问内部结点t,如果有 g ( t ) = α g(t)=\alpha g(t)=α,进行剪枝,并对叶结点t以多数表决法决定其类,得到树T。

  5. K = K + 1 , α k = α , T k = T K=K+1,\alpha_k=\alpha,T_k=T K=K+1,αk=α,Tk=T

  6. 如果T不是由根结点单独构成的树,则回到步骤(4)。

  7. 采用采用交叉验证法在子树序列 T 0 , T 1 , T 2 , . . . , T n T_0,T_1,T_2,... ,T_n T0,T1,T2,...,Tn中选取最优子树 T α T_\alpha Tα

损失函数

损失函数是用来度量预测错误程度的指标

原理:根据剪枝前后的 损失函数 来决定是否剪枝,剪枝后,如果损失函数减小,则意味着可以剪枝。

损失函数:
C α = C ( T ) + α ∣ T ∣ C_{\alpha}=C(T)+\alpha|T| Cα=C(T)+αT
C ( T ) C_(T) C(T)反映代价,是对训练数据的预测误差(比如基尼指数),代表模型的[拟合能力]。

α \alpha α是一个决定拟合和泛化综合效果的参数, α \alpha α反映了复杂度的程度,如果越大,说明复杂度更重要,如果为零,则只与预测误差有关

∣ T ∣ |T| T反映的是模型的复杂度,体现 [泛化能力], ∣ T ∣ |T| T表示子树上叶子结点的个数,叶子结点越多,模型越复杂。

当α=0时,模型仅由拟合决定,没有对未知数据的预测能力,得到一棵最完整的决策树,泛化能力弱。
α = + ∞ \alpha=+\infty α=+时,得到的是单结点树,对于任何数据的泛化能力很强,但拟合效果差。

α \alpha α 的取值

α \alpha α从 0到 + ∞ +\infty +划分成多个小区间。比如:
0 ≤ α 0 < α 1 < α 2 < α 3 . . . . < α n < α n + 1 < + ∞ 0\leq \alpha_0 <\alpha_1 <\alpha_2<\alpha_3 .... <\alpha_{n}<\alpha_{n+1}<+\infty 0α0<α1<α2<α3....<αn<αn+1<+
每一个 α \alpha α 就对应着一棵决策树。划成小区间:
[ α 1 , α 2 ) , [ α 2 , α 3 ) , . . . . [ α n , α n + 1 ) , [\alpha_1 ,\alpha_2),[\alpha_2 ,\alpha_3),....[\alpha_n ,\alpha_n+1), [α1,α2),[α2,α3),....[αn,αn+1),
总共有 n n n个区间,每个小区间都对应着一个决策树,我们可以记成:
T 0 , T 1 , T 2 , T 3 . . . . T n T0,T_1,T_2,T_3....T_n T0,T1,T2,T3....Tn
现在要找到最优的决策树。现在我们有一棵子树 T t T_t Tt

剪枝前的损失函数写成:
C α ( T t ) = C ( T t ) + α ∣ T t ∣ C_{\alpha}\left(T_{t}\right)=C\left(T_{t}\right)+\alpha\left|T_{t}\right| Cα(Tt)=C(Tt)+αTt
剪枝后变成了一个叶子结点,损失函数可以写成:
C α ( T t ) = C ( t ) + α C_{\alpha}\left(T_{t}\right)=C(t)+\alpha Cα(Tt)=C(t)+α
假设 α \alpha α 从 0开始逐渐变大到 + ∞ +\infty +,变化趋势为高度拟合到高度泛化,得出在高度拟合和高度泛化时,所对应的损失函数都是非常大的。

而在这变化过程中,剪枝前和剪枝后的会有一个临界值 ,在这个临界值处,[拟合] 和 [泛化] 的损失函数为最小。

联立两个方程求解:
C ( t ) + α = C ( T t ) + α ∣ T t ∣ α = C ( t ) − C ( T t ) ∣ T t ∣ − 1 C(t)+\alpha=C\left(T_{t}\right)+\alpha\left|T_{t}\right|\\ \alpha=\frac{C(t)-C\left(T_{t}\right)}{\left|T_{t}\right|-1} C(t)+α=C(Tt)+αTtα=Tt1C(t)C(Tt)


CART算法剪枝例题

按照刚开始的算法步骤:

第一轮判断剪枝:

  1. **设 K = 0 , T = T 0 K=0,T=T_0 K=0T=T0 **

  2. α = ∞ \alpha=\infty α= ,图中有3个内部结点,分别是 T 0 、 T 1 、 T 2 T_0 、T_1、T_2 T0T1T2记为t=0,t=1,t=2,对应的叶子结点有4个。绿色 表示正类,红色表示负类

  3. 计算:

    自下而上地对各内部结点t计其 C ( T t ) , ∣ T t ∣ C(T_t),|T_t| C(Tt),Tt以及
    g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 , α = min ⁡ ( α , g ( t ) ) g(t)=\frac{C(t)-C\left(T_{t}\right)}{\left|T_{t}\right|-1}, \quad \alpha=\min (\alpha, g(t)) g(t)=Tt1C(t)C(Tt),α=min(α,g(t))
    g ( t ) g(t) g(t)代表了这个节点对应的$\alpha $值

    T t T_t Tt表示以t为根结点的子树, C ( t ) C(t) C(t) 代表单个节点的预测误差, C ( T t ) C(T_t) C(Tt)是对训练数据的预测误差, ∣ T t ∣ |T_t| Tt T t T_t Tt的叶结点个数。选用的是预测错误率来计算。

    T 0 子 树 T_0子树 T0

    样本总数为20个,8个负类,12个负类,权重为:子树中的样本点占总体的个数。按照多数表决法来设置单结点的话,那么应该设为负类
    C 0 = 20 20 × 8 20 = 8 20 C_0=\frac{20}{20}\times\frac{8}{20}=\frac{8}{20} C0=2020×208=208
    C ( T 0 ) C(T0) C(T0)中只有一个误判,因此 C ( T 0 ) = 1 20 C(T_0)=\frac{1}{20} C(T0)=201

    带入计算:
    g ( 0 ) = C ( 0 ) − C ( T 0 ) ∣ T 0 ∣ − 1 = 8 20 − 1 20 4 − 1 = 7 60 g(0)=\frac{C(0)-C\left(T_{0}\right)}{\left|T_{0}\right|-1}=\frac{\frac{8}{20}-\frac{1}{20}}{4-1}=\frac{7}{60} g(0)=T01C(0)C(T0)=41208201=607
    取:
    α = min ⁡ ( α , g ( 0 ) ) = min ⁡ ( + ∞ , 7 60 ) = 7 60 \alpha=\min (\alpha, g(0))=\min(+\infty,\frac{7}{60})=\frac{7}{60} α=min(α,g(0))=min(+,607)=607
    T 1 子 树 T_1子树 T1

    样本总数为9个,7个正类,2个负类,权重为:子树中的样本点占总体的个数。按照多数表决法来设置单结点的话,那么应该设为正类
    C 0 = 9 20 × 2 9 = 1 10 C_0=\frac{9}{20}\times\frac{2}{9}=\frac{1}{10} C0=209×92=101
    C ( T 1 ) C(T_1) C(T1)中没有误判,因此 C ( T 1 ) = 0 C(T_1)=0 C(T1)=0

    带入计算:
    g ( 1 ) = C ( 0 ) − C ( T 0 ) ∣ T 0 ∣ − 1 = 1 10 − 0 3 − 1 = 1 20 g(1)=\frac{C(0)-C\left(T_{0}\right)}{\left|T_{0}\right|-1}=\frac{\frac{1}{10}-0}{3-1}=\frac{1}{20} g(1)=T01C(0)C(T0)=311010=201
    取:
    α = min ⁡ ( α , g ( 1 ) ) = min ⁡ ( 7 60 , 1 20 ) = 1 20 \quad \alpha=\min (\alpha, g(1))=\min(\frac{7}{60},\frac{1}{20})=\frac{1}{20} α=min(α,g(1))=min(607,201)=201

    T 3 子 树 T_3子树 T3

    样本总数为8个,7个正类,2个负类,权重为:子树中的样本点占总体的个数。按照多数表决法来设置单结点的话,那么应该设为正类
    C 0 = 8 20 × 1 8 = 1 20 C_0=\frac{8}{20}\times\frac{1}{8}=\frac{1}{20} C0=208×81=201
    C ( T 0 ) C(T0) C(T0)中只有一个误判,因此 C ( T 0 ) = 0 C(T_0)=0 C(T0)=0

    带入计算:
    g ( 2 ) = C ( 0 ) − C ( T 0 ) ∣ T 0 ∣ − 1 = 2 20 − 0 2 − 1 = 1 20 g(2)=\frac{C(0)-C\left(T_{0}\right)}{\left|T_{0}\right|-1}=\frac{\frac{2}{20}-0}{2-1}=\frac{1}{20} g(2)=T01C(0)C(T0)=212020=201
    取:
    α = min ⁡ ( α , g ( 2 ) ) = min ⁡ ( 1 20 , 1 20 ) = 1 20 \alpha=\min (\alpha, g(2))=\min(\frac{1}{20},\frac{1}{20})=\frac{1}{20} α=min(α,g(2))=min(201,201)=201
    由于 g ( 1 ) = g ( 2 ) = 1 20 g(1)=g(2)=\frac{1}{20} g(1)=g(2)=201,因此可以对内部节点 T 2 T_2 T2子树剪枝
    第一轮剪枝后的决策树,称为Tree1决策树

第二轮判断剪枝:

按照上面的思路对 T 0 和 T 1 T_0和T_1 T0T1内部几点进行迭代运算

T 0 子 树 T_0子树 T0

样本总数为20个,8个负类,12个负类,权重为:子树中的样本点占总体的个数。按照多数表决法来设置单结点的话,那么应该设为负类
C 0 = 20 20 × 8 20 = 8 20 C_0=\frac{20}{20}\times\frac{8}{20}=\frac{8}{20} C0=2020×208=208
剪枝之后, C ( T 0 ) C(T_0) C(T0)对应的3个叶子节点钟误判个数为2个,因此 C ( T 0 ) = 2 20 C(T_0)=\frac{2}{20} C(T0)=202

带入计算:
g ( 0 ) = C ( 0 ) − C ( T 0 ) ∣ T 0 ∣ − 1 = 8 20 − 2 20 3 − 1 = 3 20 g(0)=\frac{C(0)-C\left(T_{0}\right)}{\left|T_{0}\right|-1}=\frac{\frac{8}{20}-\frac{2}{20}}{3-1}=\frac{3}{20} g(0)=T01C(0)C(T0)=31208202=203
取: 这里的比较的 α \alpha α是第一轮中的结果,也就是 1 20 \frac{1}{20} 201
α = min ⁡ ( α , g ( 0 ) ) = min ⁡ ( 1 20 , 3 20 ) = 1 20 \alpha=\min (\alpha, g(0))=\min(\frac{1}{20},\frac{3}{20})=\frac{1}{20} α=min(α,g(0))=min(201,203)=201
T 1 子 树 T_1子树 T1

样本总数为9个,7个正类,2个负类,权重为:子树中的样本点占总体的个数。按照多数表决法来设置单结点的话,那么应该设为正类
C 0 = 9 20 × 2 9 = 1 10 C_0=\frac{9}{20}\times\frac{2}{9}=\frac{1}{10} C0=209×92=101
C ( T 1 ) C(T_1) C(T1)子树中2个节点误判了一个,因此 C ( T 1 ) = 1 20 C(T_1)=\frac{1}{20} C(T1)=201

带入计算:
g ( 1 ) = C ( 0 ) − C ( T 0 ) ∣ T 0 ∣ − 1 = 2 20 − 1 20 2 − 1 = 1 20 g(1)=\frac{C(0)-C\left(T_{0}\right)}{\left|T_{0}\right|-1}=\frac{\frac{2}{20}-\frac{1}{20}}{2-1}=\frac{1}{20} g(1)=T01C(0)C(T0)=21202201=201
取:
α = min ⁡ ( α , g ( 1 ) ) = min ⁡ ( 1 20 , 1 20 ) = 1 20 \quad \alpha=\min (\alpha, g(1))=\min(\frac{1}{20},\frac{1}{20})=\frac{1}{20} α=min(α,g(1))=min(201,201)=201
可以看出 T 1 T_1 T1子树对应 α \alpha α是最小值,意味着对 T 1 T_1 T1剪枝

第二轮剪枝后的决策树,Tree2决策树
第三轮判断剪枝:

按照上面的思路对 T 0 T_0 T0节点进行迭代运算

T 0 子 树 T_0子树 T0

样本总数为20个,8个负类,12个负类,权重为:子树中的样本点占总体的个数。按照多数表决法来设置单结点的话,那么应该设为负类
C 0 = 20 20 × 8 20 = 8 20 C_0=\frac{20}{20}\times\frac{8}{20}=\frac{8}{20} C0=2020×208=208
剪枝之后, C ( T 0 ) C(T_0) C(T0)对应的2个叶子节点钟误判个数为3个,因此 C ( T 0 ) = 3 20 C(T_0)=\frac{3}{20} C(T0)=203

带入计算:
g ( 0 ) = C ( 0 ) − C ( T 0 ) ∣ T 0 ∣ − 1 = 8 20 − 3 20 2 − 1 = 5 20 g(0)=\frac{C(0)-C\left(T_{0}\right)}{\left|T_{0}\right|-1}=\frac{\frac{8}{20}-\frac{3}{20}}{2-1}=\frac{5}{20} g(0)=T01C(0)C(T0)=21208203=205
取: 这里的比较的 α \alpha α是第二轮中的结果,也就是 1 20 \frac{1}{20} 201
α = min ⁡ ( α , g ( 0 ) ) = min ⁡ ( 1 20 , 5 20 ) = 1 20 \alpha=\min (\alpha, g(0))=\min(\frac{1}{20},\frac{5}{20})=\frac{1}{20} α=min(α,g(0))=min(201,205)=201
由结果可知, T 0 T_0 T0子树对应的不是最小的 α \alpha α,所以不剪枝。同时,根节点满足了两个叶子结点的停止条件,[剪枝结束]。

总结:对于树形结构比较复杂的决策树而言,可以继续增加迭代次数,最终采用交叉验证法将原始的决策树和每轮生成的Tree1、Tree2…等决策树中选取最优树形


http://chatgpt.dhexx.cn/article/36tiOhW0.shtml

相关文章

决策树算法

决策树 决策树(Decision Tree)首先对数据进行处理,利用归纳算法生成可读的规则和决策树,然后使用决策对新数据进行分析,本质上是通过一系列规则对数据进行分类的过程 决策树是一种典型的分类方法。其中: 每个内部结点表示一个属性上的判断每个分支代表一个判断结果的输出每…

决策树ID3、C4.5和CART算法例子详解

决策树 决策树是附加概率结果的一个树状的决策图&#xff0c;是直观的运用统计概率分析的图法。机器学习中决策树是一个预测模型&#xff0c;它表示对象属性和对象值之间的一种映射&#xff0c;树中的每一个节点表示对象属性的判断条件&#xff0c;其分支表示符合节点条件的对…

决策树算法原理及案例

机器学习在各个领域都有广泛的应用&#xff0c;特别在数据分析领域有着深远的影响。决策树是机器学习中最基础且应用最广泛的算法模型。本文介绍了机器学习的相关概念、常见的算法分类和决策树模型及应用。通过一个决策树案例&#xff0c;着重从特征选择、剪枝等方面描述决策树…

通过实例理解决策树算法(ID3,C4.5,Cart算法)

&#xff08;一&#xff09;实例&#xff1a;使用ID3算法给出“好苹果”的决策树 &#xff08;二&#xff09;决策树的工作原理 我们在做决策树的时候&#xff0c;会经历两个阶段&#xff1a;构造和剪枝。 构造原理——构造的过程就是选择什么属性作为节点的过程&#xff0c;…

数据挖掘之C4.5决策树算法

1.决策树算法实现的三个过程&#xff1a; 特征选择&#xff1a;选择哪些特征作为分类的标准是决策树算法的关键&#xff0c;因此需要一种衡量标准来进行特征的确定&#xff0c;不同的决策树衡量标准不同。例如C4.5决策树就是以信息增益率来作为衡量标准。决策树的生成&#xf…

决策树ID3例题

表格里统计了14天的气象数据&#xff0c;特征属性包括outlook,temperature,humidity,windy&#xff0c;类别属性为是否打球(play),用ID3算法生成决策树。 解答过程&#xff1a;

决策树算法与案例

决策树算法介绍 树模型 决策树&#xff1a;从根节点开始一步步走到叶子节点&#xff08;决策&#xff09;。所有的数据最终都会落到叶子节点&#xff0c;既可以做分类也可以做回归 树的组成 根节点&#xff1a;第一个选择点&#xff1b;非叶子节点与分支&#xff1a;中间过程…

数据挖掘--决策树ID3算法(例题)

决策树分类算法 决策树分类算法通常分为两个步骤&#xff1a;决策树生成和决策树修剪。 决策树生成算法的输入参数是一组带有类别标记的样本&#xff0c;输出是构造一颗决策树&#xff0c;该树可以是一棵二叉树或多叉树。二叉树的内部结点&#xff08;非叶子结点&#xff09;…

决策树算法原理+例题练习

一、决策树的优缺点 优点&#xff1a;计算复杂度不高&#xff0c;输出结果易于理解&#xff0c;对中间值的缺失值不敏感&#xff0c;可以处理不相关特征数据。缺点&#xff1a;可能会产生过度匹配的问题。使用数据类型&#xff1a;数值型和标称型。 二、一个实例 一天&#…

高级管理学:计算题

题1&#xff1a;决策树和期望值 某企业拟开发新产品&#xff0c;现在有两个可行性方案需要决策。 方案一&#xff1a;开发新产品 A&#xff0c;需要追加投资 180 万元&#xff0c;经营期限为 5 年。此间&#xff0c;产品销路好每年可获利 170 万元&#xff1b;销路一般每年可获…

Nikto漏洞扫描工具简介

nikto漏洞扫描工具在我的靶场上测试报告如下&#xff1a; 测试时间会很长&#xff0c;我是在虚拟环境下做的&#xff0c;给的配置不高&#xff0c;吃尽CPU&#xff0c;最后不得不强制关闭虚拟机&#xff0c;通过-o参数将结果输出到文档中。 结果显示&#xff1a; 一些黑客比较感…

wed渗透:记录kali系统下扫描工具nikto的使用

目录 前言1 工具介绍2 使用场景3 使用方法3.1 查看帮助信息3.2 Nikto插件3.3 扫描3.3.1 常规扫描3.3.2 指定端口扫描3.3.3 指定协议扫描3.3.4 指定目录扫描3.3.5 多目标扫描3.3.6 配合namp利用管道输入扫描3.3.7 利用代理扫描 3.4 Nikto扫描过程中的交互参数3.5 修改nikto配置文…

Nikto安装及使用

系统要求如下&#xff08;我自己使用的是linux&#xff0c;其它两个没有研究&#xff09;&#xff1a; 一、安装软件 第一步准备两个软件&#xff0c;如下&#xff1a; 1、nikto-master.zip&#xff08;官网下载地址&#xff1a;https://cirt.net/nikto2&#xff09; 2、libw…

Nikto详细使用教程

Nikto简介 基于perl语言开发的web页面扫描器。其特点扫描全面&#xff0c;速度快。 nikto常用命令 -upodate 升级&#xff0c;更新插件 -host 扫描目标URl -id username:password http认证接口 -list-plugins …

使用Nikto扫描网站漏洞

Nikto简介 Nikto是一个简单的开源Web服务器扫描程序&#xff0c;可以检查网站并报告它发现的可能用于利用或破解网站的漏洞。此外&#xff0c;它是业界使用最广泛的网站漏洞工具之一&#xff0c;并且在许多圈子中被认为是行业标准。 虽然这个工具非常有效&#xff0c;但它根本…

Kali工具库之Nikto

工具简介 Nikto是一个开源的WEB扫描评估软件&#xff0c;可以对Web服务器进行多项安全测试&#xff0c;能在230多种服务器上扫描出 2600多种有潜在危险的文件、CGI及其他问题。Nikto可以扫描指定主机的WEB类型、主机名、指定目录、特定CGI漏洞、返回主机允许的 http模式等。 链…

Nikto 网页服务器扫描器

一、Nikto介绍 Nikto是一款开源的&#xff08;GPL&#xff09;网页服务器扫描器&#xff0c;它可以对网页服务器进行全面的多种扫描&#xff0c;包含超过3300种有潜在危险的文件CGIs&#xff1b;超过625种服务器版本&#xff1b;超过230种特定服务器问题。扫描项和插件可以自动…

nmap和nikto扫描

先通过本机的VMware启动Kali攻击机和Metasploitable2靶机 端口扫描 使用 ip addr 或者 ifconfig 先看一下靶机的ip地址 在Kali里面使用 nmap IP 先用默认的方式对靶机进行扫描 事实上nmap的默认扫描方式就是 -sS 也就是SYN扫描&#xff0c;这种扫描方式基于TCP三次握手的前两…

4 | Nikto使用

目录 1 Nikto简介2 部署2.1 下载地址 3 操作参数4 具体使用4.1 扫描单个地址4.2 详细输出4.3 扫描多个地址4.4 使用代理进行扫描4.5 使用LibWhisker绕过IDS的检测&#xff08;10个参数 1-8、A、B&#xff09; 1 Nikto简介 发现Web服务器配置错误、插件和Web漏洞&#xff0c;支…

Nikto 扫描

0x00:简介 nikto 是一款用来发现 web 应用程序漏洞的一个工具,扫描的内容大概包括服务器软件的版本,比较版本是否为最新,现版本和最新版的差以及这个版本可能存在的漏洞。会搜索一些存在隐患的文件,例如测试文件,或者是网站备份文件等。也会去扫描服务器的配置漏洞,有没…