决策树

文章目录

  • 决策树
    • 决策树的基本思想
    • 划分选择
      • 信息增益
      • 增益率
      • 基尼指数
    • 减枝处理
    • 回归问题
      • 对连续值的处理
      • 对缺失值的处理

决策树的基本思想

决策树是基于树结构来进行决策的,通过对问题的判断与决策,得到最终决策。

一般的,决策树包括一个根结点、若干个内部节点和若干个叶结点,叶结点对应决策结果,其他每一个结点对应一个属性测试。决策树学习的目的是产生一颗泛化能力强的一棵树,其基本流程遵循简单而直观的"分而治之"(divide-and-conquer)策略.

划分选择

信息熵是度量样本集合纯度的最常用的一种指标,假定当前样本集合 D \mathcal{D} D中第 k k k类样本所占比例为 p k ( k = 1 , 2 , ⋯ , ∣ Y ∣ ) p_k\left(k=1,2,\cdots,|\mathcal{Y}|\right) pk(k=1,2,,Y),则 D \mathcal{D} D的信息熵定义为:

Ent ( D ) = − ∑ k = 1 ∣ Y ∣ p k log ⁡ 2 p k \text{Ent}(\mathcal{D})=-\sum_{k=1}^{|\mathcal{Y}|}p_k\log_2p_k Ent(D)=k=1Ypklog2pk

信息熵越小,则$
\mathcal{D}$纯度越高。

信息增益

假定离属性 a a a上有 V \mathcal{V} V个可能的取值 { a 1 , a 2 , ⋯ , a V } \{a^1,a^2,\cdots,a^\mathcal{V}\} {a1,a2,,aV},若使用 a a a来对样本集进行划分,就会产生 V \mathcal{V} V个分支节点,其中第 v \mathcal{v} v个分支节点包含了 D \mathcal{D} D中所有在属性 a a a上取值为 a v a^{\mathcal{v}} av的样本记为 D v \mathcal{D^v} Dv,通过对不同节点的按样本量占比赋予权重,可以最终得到信息增益:

Gain ( D , a ) = Ent ( D ) − ∑ v = 1 V ∣ D v D ∣ Ent ( D v ) \text{Gain}(\mathcal{D},a)=\text{Ent}(\mathcal{D})-\sum_{\mathcal{v}=1}^{\mathcal{V}}\left|\frac{\mathcal{D^v}}{\mathcal{D}}\right|\text{Ent}(\mathcal{D^v}) Gain(D,a)=Ent(D)v=1V DDv Ent(Dv)

一般而言,信息增益越大代表划分纯度越高。

增益率

由于信息增益对可取值较多的属性有所偏好,为了减少由于这种偏好的不利影响,可以采取增益率作为最优划分:

KaTeX parse error: Expected 'EOF', got '_' at position 11: \text{Gain_̲ratio}(\mathcal…

其中:

IV ( a ) = − ∑ v = 1 V ∣ D v D ∣ log ⁡ 2 ∣ D v D ∣ \text{IV}(a)=-\sum_{\mathcal{v}=1}^{\mathcal{V}}\left|\frac{\mathcal{D^v}}{\mathcal{D}}\right|\log_2\left|\frac{\mathcal{D^v}}{\mathcal{D}}\right| IV(a)=v=1V DDv log2 DDv

称为属性 a a a的固有值。

基尼指数

基尼值定义为;

Gini ( D ) = ∑ k = 1 ∣ Y ∣ ∑ k ′ ≠ k p k p k ′ \text{Gini}(\mathcal{D})=\sum_{k=1}^{|\mathcal{Y}| }\sum_{k^{\prime}\ne k}p_kp_{k^\prime} Gini(D)=k=1Yk=kpkpk

基尼指数定义为:

KaTeX parse error: Expected 'EOF', got '_' at position 12: \text{Gini_̲index}(\mathcal…

减枝处理

减枝(pruning)是决策树学习算法中应对过拟合的主要手段。减枝有两种方式:预剪枝(prepruning)和后减枝(postpruning)。

预剪枝是指在决策树生成过程中,对每个结点在划分前先进行评估,若当前划分不能带来模型泛化能力提升(比如通过验证集精度、信息增益等指标判断 ),就直接将当前结点标记为叶结点,停止该分支的进一步划分生长。

后剪枝是指先不做干预,让决策树完整生长至叶子结点(即按常规构建流程生成一棵尽可能复杂的树 ),之后再从树的底层向上(或自顶向下等方式 )遍历结点,评估将某个分支剪掉(即把该分支替换为叶结点,类别按分支中样本多数类等方式确定 )后,模型在验证集上的泛化能力是否提升,若提升则剪枝,直至无法通过剪枝改善性能。

预剪枝是生成树过程中提前叫停分支生长,后剪枝是生成完整树后再反向优化 ,实际应用里需结合数据、计算资源等,选择合适策略平衡模型效果与效率 。相比预剪枝,后剪枝更能精准去除过拟合的分支,模型欠拟合风险低,但由于要先构建完整树,计算成本通常更高 。

回归问题

上面的讨论是基于离散属性对分类问题进行的决策树生成,现在对于连续性特征就不可以直接进行划分。

对连续值的处理

给定样本集合 D \mathcal{D} D和连续属性 a a a,假定 a a a D \mathcal{D} D上出现了 n n n个不同的取值,将这些值域大小排列记为 { a 1 , a 2 , … , a n } \{a^1, a^2, \dots, a^n\} {a1,a2,,an}

然后,为构造候选的划分阈值,取每两个相邻不同取值的中点作为候选划分点。

具体来说,对于第 i i i 个和第 i + 1 i + 1 i+1 个取值( i = 1 , 2 , … , n − 1 i = 1, 2, \dots, n - 1 i=1,2,,n1 ),计算中点 t i = a i + a i + 1 2 t_i = \frac{a^i + a^{i + 1}}{2} ti=2ai+ai+1 ,这样就得到 n − 1 n - 1 n1 个候选划分点,构成候选划分点集合 T a = { t 1 , t 2 , … , t n − 1 } T_a = \{t_1, t_2, \dots, t_{n - 1}\} Ta={t1,t2,,tn1}

有了候选划分点集合 T a T_a Ta 后,对于每个候选划分点 t ∈ T a t \in T_a tTa,可将样本集合 D \mathcal{D} D 中所有样本依据属性 a a a 的取值,二分为两部分

  • 一部分是在属性 a a a 上取值小于等于 t t t 的样本,记为 D t − \mathcal{D}_t^- Dt
  • 另一部分是在属性 a a a 上取值大于 t t t 的样本,记为 D t + \mathcal{D}_t^+ Dt+

这就把对连续属性的处理,转化为类似离散属性的“划分选择”问题——从 T a T_a Ta 中选一个最优的划分点 t ∗ t_* t ,使得按 t ∗ t_* t 划分后,能达到最优的划分效果(比如用信息增益、信息增益比、基尼指数等指标衡量,和离散属性选最优划分的逻辑一致,只是候选划分是基于连续值构造的“二分点” )。

例如:

Gain ( D , a ) = max ⁡ t ∈ T α Gain ( D , a , t ) = max ⁡ t ∈ T α Ent ( D ) − ∑ λ ∈ { − , + } ∣ D t λ D ∣ Ent ( D t λ ) \text{Gain}(\mathcal{D},a)=\underset{t\in T_\alpha}{\max}\text{Gain}(\mathcal{D},a,t)=\underset{t\in T_\alpha}{\max}\text{Ent}(\mathcal{D})-\sum_{\lambda\in \{-,+\}}\left|\frac{\mathcal{D}^{\lambda}_t}{\mathcal{D}}\right|\text{Ent}(\mathcal{D}_t^\lambda) Gain(D,a)=tTαmaxGain(D,a,t)=tTαmaxEnt(D)λ{,+} DDtλ Ent(Dtλ)

对缺失值的处理

对于数据集中的缺失值,我们需要解决以下两个问题:

  1. 如何在属性缺失的情况下进行划分属性选择?
  2. 给定划分属性,若样本在该属性上值缺失,如何对样本进行划分?

对于问题一,解决的核心思路是:

只利用 “无缺失值样本” 计算划分指标(如信息增益、增益率等 ),并对指标按 “无缺失值样本占总样本的比例” 加权,最终选加权后最优的属性作为划分属性.

对于问题二,解决的核心思路是:

让缺失值样本 “以不同概率,划入所有可能的分支”.

给定训练集 D D D 和属性 a a a,令 D ~ \tilde{D} D~ 表示 D D D 中在属性 a a a 上没有缺失值的样本子集。
对问题(1),仅可根据 D ~ \tilde{D} D~ 判断属性 a a a 的优劣。假定属性 a a a V V V 个可取值 { a 1 , a 2 , … , a V } \{a^1, a^2, \ldots, a^V\} {a1,a2,,aV},令:

  • D ~ v \tilde{D}^v D~v 表示 D ~ \tilde{D} D~ 中在属性 a a a 上取值为 a v a^v av 的样本子集;
  • D ~ k \tilde{D}_k D~k 表示 D ~ \tilde{D} D~ 中属于第 k k k 类( k = 1 , 2 , … , ∣ Y ∣ k = 1, 2, \ldots, |\mathcal{Y}| k=1,2,,Y)的样本子集;

显然满足集合关系:
D ~ = ⋃ k = 1 ∣ Y ∣ D ~ k , D ~ = ⋃ v = 1 V D ~ v \tilde{D} = \bigcup_{k=1}^{|\mathcal{Y}|} \tilde{D}_k, \quad \tilde{D} = \bigcup_{v=1}^{V} \tilde{D}^v D~=k=1YD~k,D~=v=1VD~v

为每个样本 x \boldsymbol{x} x 赋予权重 w x w_{\boldsymbol{x}} wx,并定义以下指标:

ρ = ∑ x ∈ D ~ w x ∑ x ∈ D w x \rho = \frac{\sum_{\boldsymbol{x} \in \tilde{D}} w_{\boldsymbol{x}}}{\sum_{\boldsymbol{x} \in D} w_{\boldsymbol{x}}} ρ=xDwxxD~wx

p ~ k = ∑ x ∈ D ~ k w x ∑ x ∈ D ~ w x ( 1 ≤ k ≤ ∣ Y ∣ ) \tilde{p}_k = \frac{\sum_{\boldsymbol{x} \in \tilde{D}_k} w_{\boldsymbol{x}}}{\sum_{\boldsymbol{x} \in \tilde{D}} w_{\boldsymbol{x}}} \quad (1 \leq k \leq |\mathcal{Y}|) p~k=xD~wxxD~kwx(1kY)

r ~ v = ∑ x ∈ D ~ v w x ∑ x ∈ D ~ w x ( 1 ≤ v ≤ V ) \tilde{r}_v = \frac{\sum_{\boldsymbol{x} \in \tilde{D}^v} w_{\boldsymbol{x}}}{\sum_{\boldsymbol{x} \in \tilde{D}} w_{\boldsymbol{x}}} \quad (1 \leq v \leq V) r~v=xD~wxxD~vwx(1vV)

直观地看,对属性 a a a

  • ρ \rho ρ 表示无缺失值样本所占的比例;
  • p ~ k \tilde{p}_k p~k 表示无缺失值样本中第 k k k 类所占的比例;
  • r ~ v \tilde{r}_v r~v 表示无缺失值样本中在属性 a a a 上取值 a v a^v av 的样本所占的比例。

显然满足归一化条件:
∑ k = 1 ∣ Y ∣ p ~ k = 1 , ∑ v = 1 V r ~ v = 1 \sum_{k=1}^{|\mathcal{Y}|} \tilde{p}_k = 1, \quad \sum_{v=1}^{V} \tilde{r}_v = 1 k=1Yp~k=1,v=1Vr~v=1

基于上述定义,信息增益的计算式可推广为:
Gain ( D , a ) = ρ × Gain ( D ~ , a ) = ρ × ( Ent ( D ~ ) − ∑ v = 1 V r ~ v ⋅ Ent ( D ~ v ) ) \begin{aligned} \text{Gain}(D, a) &= \rho \times \text{Gain}(\tilde{D}, a) \\ &= \rho \times \left( \text{Ent}(\tilde{D}) - \sum_{v=1}^{V} \tilde{r}_v \cdot \text{Ent}(\tilde{D}^v) \right) \end{aligned} Gain(D,a)=ρ×Gain(D~,a)=ρ×(Ent(D~)v=1Vr~vEnt(D~v))

其中,由信息熵的基本定义:

Ent ( D ~ ) = − ∑ k = 1 ∣ Y ∣ p ~ k log ⁡ 2 p ~ k \text{Ent}(\tilde{D}) = -\sum_{k=1}^{|\mathcal{Y}|} \tilde{p}_k \log_2 \tilde{p}_k Ent(D~)=k=1Yp~klog2p~k

对问题(2),样本划分规则如下:

  • 若样本 x \boldsymbol{x} x 在划分属性 a a a 上的取值已知,则将 x \boldsymbol{x} x 划入与其取值对应的子结点,且样本权值在子结点中保持为 w x w_{\boldsymbol{x}} wx
  • 若样本 x \boldsymbol{x} x 在划分属性 a a a 上的取值未知,则将 x \boldsymbol{x} x 同时划入所有子结点,且样本权值在与属性值 a v a^v av 对应的子结点中调整为 r ~ v ⋅ w x \tilde{r}_v \cdot w_{\boldsymbol{x}} r~vwx

直观地看,这就是让同一个样本以不同的概率划入到不同的子结点中去。

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

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

相关文章

基于若依前后分离版-用户密码错误锁定

sys_config配置参数 user.password.maxRetryCount:最大错误次数 user.password.lockTime:锁定时长 //SysLoginController//登录 PostMapping("/login") public AjaxResult login(RequestBody LoginBody loginBody) {AjaxResult ajax AjaxR…

Java线程安全集合类

Java线程安全集合类全面解析 目录 并发集合概述List线程安全实现Set线程安全实现Map线程安全实现Queue线程安全实现总结 并发集合概述 Java提供了多种线程安全的集合类,主要分为两大类: 传统同步集合:通过synchronized关键字实现线程安全…

汇川变频器MD600S-4T-5R5为什么要搭配GRJ9000S-10-T滤波器?

一、变频器的工作原理与电磁干扰 汇川MD600S-4T-5R5变频器是一款紧凑型高性能变频器,适用于三相380V-480V电网,额定电流5.5A,支持矢量控制和多种编码器接口,适用于需要高精度速度和转矩控制的场景,如机器人、电梯、纺…

数学运算在 OpenCV 中的核心作用与视觉效果演示

在计算机视觉中,图像不仅仅是我们肉眼所见的内容,它其实是由数值矩阵组成的“数据”。而在 OpenCV(Open Source Computer Vision Library)中,正是数学运算赋予了图像处理无限的可能——从基本的滤波、增强到复杂的特征…

【快速预览经典深度学习模型:CNN、RNN、LSTM、Transformer、ViT全解析!】

🚀快速预览经典深度学习模型:CNN、RNN、LSTM、Transformer、ViT全解析! 📌你是否还在被深度学习模型名词搞混?本文带你用最短时间掌握五大经典模型的核心概念和应用场景,助你打通NLP与CV的任督二脉&#xf…

springboot mysql/mariadb迁移成oceanbase

前言&#xff1a;项目架构为 springbootmybatis-plusmysql 1.部署oceanbase服务 2.springboot项目引入oceanbase依赖&#xff08;即ob驱动&#xff09; ps&#xff1a;删除原有的mysql/mariadb依赖 <dependency> <groupId>com.oceanbase</groupId> …

电网“逆流”怎么办?如何实现分布式光伏发电全部自发自用?

2024年10月9日&#xff0c;国家能源局综合司发布了《分布式光伏发电开发建设管理办法&#xff08;征求意见稿&#xff09;》&#xff0c;意见稿规定了户用分布式光伏、一般工商业分布式光伏以及大型工商业分布式光伏的发电上网模式&#xff0c;当选择全部自发自用模式时&#x…

C语言之编译器集合

C语言有多种不同的编译器&#xff0c;以下是常见的编译工具及其特点&#xff1a; 一、主流C语言编译器 GCC&#xff08;GNU Compiler Collection&#xff09; 特点&#xff1a;开源、跨平台&#xff0c;支持多种语言&#xff08;C、C、Fortran 等&#xff09;。 使用场景&…

负载均衡将https请求转发后端http服务报错:The plain HTTP request was sent to HTTPS port

https请求报错&#xff1a;The plain HTTP request was sent to HTTPS port 示例背景描述&#xff1a; www.test.com:11001服务需要对互联网使用https提供服务后端java服务不支持https请求&#xff0c;且后端程序无法修改&#xff0c;仅支持http请求 问题描述&#xff1a; 因…

(3)Playwright自动化-3-离线搭建playwright环境

1.简介 如果是在公司局域网办公&#xff0c;或者公司为了安全对网络管控比较严格这种情况下如何搭建环境&#xff0c;我们简单来看看 &#xff08;第一种情况及解决办法&#xff1a;带要搭建环境的电脑到有网的地方在线安装即可。 &#xff08;第二种情况及解决办法&#xf…

【Fiddler抓取手机数据包】

Fiddler抓取手机数据包的配置方法 确保电脑和手机在同一局域网 电脑和手机需连接同一Wi-Fi网络。可通过电脑命令行输入ipconfig查看电脑的本地IP地址&#xff08;IPv4地址&#xff09;&#xff0c;手机需能ping通该IP。 配置Fiddler允许远程连接 打开Fiddler&#xff0c;进入…

PublishSubject、ReplaySubject、BehaviorSubject、AsyncSubject的区别

python容易编辑&#xff0c;因此用pyrx代替rxjava3做演示会比较快捷。 pyrx安装命令&#xff1a; pip install rx 一、Subject&#xff08;相当于 RxJava 的 PublishSubject&#xff09; PublishSubject PublishSubject 将对观察者发送订阅后产生的元素&#xff0c;而在订阅前…

BLE中心与外围设备MTU协商过程详解

一、MTU基础概念​​ 1. ​​MTU定义​​ ​​最大传输单元&#xff08;MTU&#xff09;​​ 指单次数据传输中允许的最大字节数&#xff0c;包含协议头部&#xff08;3字节&#xff09;和有效载荷&#xff08;最多517字节&#xff09;。BLE默认MTU为​​23字节​​&a…

【华为云Astro-服务编排】服务编排使用全攻略

目录 概述 为什么使用服务编排 服务编排基本能力 拖拉拽式编排流程 逻辑处理 对象处理 服务单元组合脚本、原生服务、BO、第三方服务 服务编排与模块间调用关系 脚本 对象 标准页面 BPM API接口 BO 连接器 如何创建服务编排 创建服务编排 如何开发服务编排 服…

centos实现SSH远程登录

1. 生成SSH密钥对 首先&#xff0c;你需要在客户端机器上生成一个SSH密钥对。打开终端&#xff0c;执行以下命令 ssh-keygen 或ssh-keygen -t rsa -b 2048&#xff08;效果相同&#xff09; 按照提示操作&#xff0c;可以按回车键接受默认的文件名&#xff08;通常是~/.ssh/id_…

定制开发开源AI智能名片S2B2C商城小程序在无界零售中的应用与行业智能升级示范研究

摘要&#xff1a;本文聚焦无界零售背景下京东从零售产品提供者向零售基础设施提供者的转变&#xff0c;探讨定制开发开源AI智能名片S2B2C商城小程序在这一转变中的应用。通过分析该小程序在商业运营成本降低、效率提升、用户体验优化等方面的作用&#xff0c;以及其与京东AI和冯…

ZooKeeper 安装教程(Windows + Linux 双平台)

ZooKeeper 安装教程(Windows + Linux 双平台) Zookeeper 和 Kafka 版本与 JDK 要求 一、安装前准备 系统要求 Java 环境(JDK17+)开放端口:2181(客户端),2888(集群通信),3888(选举)安装 Java Linux(Ubuntu/CentOS) # Ubuntu

【Git系列】如何同步原始仓库的更新到你的fork仓库?

&#x1f389;&#x1f389;&#x1f389;欢迎来到我们的博客&#xff01;无论您是第一次访问&#xff0c;还是我们的老朋友&#xff0c;我们都由衷地感谢您的到来。无论您是来寻找灵感、获取知识&#xff0c;还是单纯地享受阅读的乐趣&#xff0c;我们都希望您能在这里找到属于…

Could not obtain transaction-synchronized Session for current thread

背景 写了一个函数&#xff0c;分别支持手动调用和定时任务调用。 测试的时候一直用手动点击按钮触发函数&#xff0c;功能可用 等到了测试定时任务的时候&#xff0c;后台报错 Could not obtain transaction-synchronized Session for current thread错误分析 事务管理不匹…

linux nm/objdump/readelf/addr2line命令详解

我们在开发过程中通过需要反汇编查看问题&#xff0c;那么我们这里使用rk3568开发板来举例nm/objdump/readelf/addr2line 分析动态库和可执行文件以及.o文件。 1&#xff0c;我们举例nm/objdump/readelf/addr2line解析linux 内核文件vmlinux &#xff08;1&#xff09;,addr2…