决策树 | 分类树回归树:算法逻辑

目录

  • 一. 决策树(Decision Tree)
    • 1. 决策树的构建
      • 1.1 信息熵(Entropy)
        • 1.1.1 信息量&信息熵 定义
        • 1.1.2 高信息熵&低信息熵 定义
        • 1.1.3 信息熵 公式
      • 1.2 信息增益(Information Gain)
        • 1.2.1 信息增益的计算
        • 1.2.2 小节
    • 2. 小节
      • 2.1 算法分类
      • 2.2 决策树算法分割选择
      • 2.3 决策树算法的停止条件
      • 2.4 决策树算法的评估

本篇我们来开始新的话题——决策树
在正式开始讲解之前,我们先来看一个数据集:
在这里插入图片描述

上图展示了银行用于决定是否放贷的数据集。银行通过分析用户特征,预测债务偿还能力,从而决定是否放贷;

针对上面的数据,我们先给出一个决策树的模型:
在这里插入图片描述

有了这个模型后,当有新数据进入时,我们可以通过数据特征来预测用户是否有能力偿还债务

那么,我们的问题是,怎么构建上图模型?

一. 决策树(Decision Tree)

1. 决策树的构建

对于决策树的构建,我们的主要问题是:

  • 首先用哪个特征进行判断呢,即:树的根节点应该是哪个特征?
  • 第二层的节点又应该怎样确定呢?

对于节点选择问题,很明显,我们希望最有效(区分度最大)的特征作为根节点,用同样的思路,不断判断区分度最大的特征,从而依次得到下层的节点;如此反复,我们就会得到一个有效的决策树

那么,我们怎样衡量一个划分的“有效性”呢?

1.1 信息熵(Entropy)

1.1.1 信息量&信息熵 定义
  • 信息量:如果一个事件发生的概率越大, 那么该事件所蕴含的信息量越少
        比如:“地球的自转与公转” ,因为是确定事件,所以不携带任何信息量
  • 信息熵:一个系统越是有序,信息熵就越低;一个系统越是混乱,信息熵就越高
        人话版:信息熵是一个系统的有序程度的度量

信息熵用来描述系统信息量的不确定度

这里我们举一个例子:
A={1,1,1,1,1,1,2,2,2,2}
B={1,2,3,4,5,6,7,8,9,10}

A集合中元素单一化,即信息熵低(越确定,信息熵越低)
B集合中元素多样化,即信息熵高(越不确定,信息熵越高)

1.1.2 高信息熵&低信息熵 定义
  • High Entropy(高信息熵):随机变量X是均匀分布的,各种取值情况是等概率出现的

  • Low Entropy(低信息熵):随机变量X的各种取值不是等概率出现的

     对于高信息熵与低信息熵,我们讨论的前提是:1. 都有ABCD四种情况2. ABCD等概率时,信息熵高 
    

如下图:
在这里插入图片描述

左图信息熵高于右图
1.1.3 信息熵 公式

H ( X ) = − ∑ i = 1 m p i log ⁡ 2 ( p i ) H(X)=-\sum_{i=1}^{m}p_{i} \log_{2}({p_{i}}) H(X)=i=1mpilog2(pi)

公式解释:
参数:
      p i p_{i} pi表示第i个元素出现的概率
H ( X ) H(X) H(X)信息熵的大小:

  1. 与m的个数有关
  2. 与概率p是否平均有关

解释第一条:m越多,则系统越混乱,熵越大
解释第二条:p越平均,信息熵越大


例子:
存在一组数据:0.1,0.1,0.1,0.7,0.7,0.7
第一种分法:

(0.1,0.1,0.1)、(0.7,0.7,0.7)

第二种分法:

(0.1,0.1,0.7)、(0.7,0.7,0.1)

最直接的分法为第一种,该分法信息熵为0

1.2 信息增益(Information Gain)

在了解过熵的概念后,我们就可以计算第一次划分得到的信息增益

  • 信息增益:用划分之前系统的“熵”减去划分之后系统的“熵”,就是这次划分所获得的“信息增益”

一次划分所获得的“信息增益”越大,则该划分就越有效

1.2.1 信息增益的计算
	简单来说,信息增益就是计算增益的加权和

针对开篇给出的数据集,我们对树的构建方式给出具体计算解释:

系统未划分时:
系统的信息熵(偿还能力值:7是,3否)
− 3 10 log ⁡ 2 3 10 − 7 10 log ⁡ 2 7 10 = 0.88 -\frac{3}{10} \log_{2}{\frac{3}{10} } -\frac{7}{10} \log_{2}{\frac{7}{10} }=0.88 103log2103107log2107=0.88
系统划分时:

  1. 按照拥有房产情况划分
    − 0 4 log ⁡ 2 0 4 − 4 4 log ⁡ 2 4 4 = 0.0 -\frac{0}{4} \log_{2}{\frac{0}{4} } -\frac{4}{4} \log_{2}{\frac{4}{4} }=0.0 40log24044log244=0.0
    − 3 6 log ⁡ 2 3 6 − 3 6 log ⁡ 2 3 6 = 1.0 -\frac{3}{6} \log_{2}{\frac{3}{6} } -\frac{3}{6} \log_{2}{\frac{3}{6} }=1.0 63log26363log263=1.0
    若按照该特征进行划分,信息增益为:
    g a i n = 0.88 − 4 10 ∗ 0.0 − 6 10 ∗ 1.0 = 0.28 gain = 0.88-{\frac{4}{10}}*0.0-{\frac{6}{10} }*1.0=0.28 gain=0.881040.01061.0=0.28

  2. 按照婚姻状态划分
    − 2 4 log ⁡ 2 2 4 − 2 4 log ⁡ 2 2 4 = 1.0 -\frac{2}{4} \log_{2}{\frac{2}{4} } -\frac{2}{4} \log_{2}{\frac{2}{4} }=1.0 42log24242log242=1.0
    − 0 3 log ⁡ 2 0 3 − 3 3 log ⁡ 2 3 3 = 0.0 -\frac{0}{3} \log_{2}{\frac{0}{3} } -\frac{3}{3} \log_{2}{\frac{3}{3} }=0.0 30log23033log233=0.0
    − 1 3 log ⁡ 2 1 3 − 2 3 log ⁡ 2 2 3 = 0.918 -\frac{1}{3} \log_{2}{\frac{1}{3} } -\frac{2}{3} \log_{2}{\frac{2}{3} }=0.918 31log23132log232=0.918
    若按照该特征进行划分,信息增益为:
    g a i n = 0.88 − 4 10 ∗ 1.0 − 3 10 ∗ 0.0 − 3 10 ∗ 0.918 = 0.21 gain =0.88-{\frac{4}{10}}*1.0-{\frac{3}{10} }*0.0-{\frac{3}{10}}*0.918=0.21 gain=0.881041.01030.01030.918=0.21

  3. 按照年收入划分

针对连续值,我们希望划分可以尽可能的降低系统混乱程度,具体可能出现的分法如下:
在这里插入图片描述

思考:为什么划分数值直接跳过了70?


上面,为了得到符合目标的树,我们分别计算了不同特征作为根节点的信息增益,即

g a i n ( 房产 ) = 0.28 gain(房产) = 0.28 gain(房产)=0.28
g a i n ( 婚姻 ) = 0.21 gain(婚姻)=0.21 gain(婚姻)=0.21
g a i n ( 收入 ) = 0.39 gain(收入)=0.39 gain(收入)=0.39

因此,选择信息增益最大的收入=95作为我们第一次划分划分条件

那么,我们就会得到:
在这里插入图片描述
对于第一个节点 ≥ 95 \ge95 95信息熵为0,不需要继续划分
对于第二个节点 < 95 <95 <95信息熵大于0,需要继续划分

即,重复上述计算过程,就可以得到一个完整的决策树

1.2.2 小节

样本集合D中含有k类样本,每个类别所占比例分别为 p k ( k = 1 , 2 , 3 , . . . . ) p_{k}(k=1,2,3,....) pk(k=1,2,3,....),那么集合D的信息熵为:
H ( D ) = − ∑ k = 1 k p k log ⁡ 2 p k H(D)=-\sum_{k=1}^{k}p_{k}\log_{2}{p_{k}} H(D)=k=1kpklog2pk

假设使用离散特征a对集合D进行划分,且特征a有V个取值,那么信息增益为:
g a i n ( D , a ) = H ( D ) − ∑ v = 1 V p k ∣ D v ∣ ∣ D ∣ H ( D v ) gain(D,a)=H(D)-\sum_{v=1}^{V}p_{k}\frac{\left | D_{v} \right | }{|D|} H(D^{v}) gain(D,a)=H(D)v=1VpkDDvH(Dv)

2. 小节

决策树算法是一种“贪心”算法策略,只考虑当前,未见得是全局最优,不能进行回溯操作(吃葡萄永远只吃最好的)

	决策树是在已知各种情况发生概率的基础上,通过构建决策树来进行分析的一种方式;决策树:一种树形结构每个内部节点表示一个属性的测试每个分支表示一个测试输出每个叶节点代表一种预测类别直观应用概率分析的图解法

在这里插入图片描述

2.1 算法分类

决策树是一种常用的有监督算法;从根节点开始,测试待分类项中对应的特征属性,并按照值选择输出分支,直到叶子节点:

  1. 将叶子节点存放的类别作为决策结果(分类树)

  2. 将叶子节点存放的作为决策结果(回归树)

     分类树作用:分类标签值回归树作用:预测连续值
    

2.2 决策树算法分割选择

根据特征属性的类型不同,在构建决策树的时候,采用不同的方式:

	属性是离散值时,在不要求生成二叉决策树的前提下,一个属性就是一个分支属性是离散值时,在要求生成二叉决策树的前提下,分支为“属于此子集”和“不属于此子集”属性是连续值时,可以确定一个值作为分裂点,分别按照大于分裂点和小于分裂点生成两个分支

2.3 决策树算法的停止条件

决策树构建是一个递归的过程,如果不给予停止条件,会一直划分,直至叶子节点熵为0;这里我们给出三种常用的停止方式:

	1. 当每个叶子节点只有一种类型时,停止构建;即熵为0 ,节点非常纯(会导致过拟合,一般不用)2. 给定树深度值,同时限制叶子节点样本数量小于某个阈值时,停止构建;此时对于不纯的节点,采用最大概率类别作为对应类型3. 限制分裂前后叶子节点中特征数目 

2.4 决策树算法的评估

对于分类树:

	1. 采用混淆矩阵,即计算准确率,召回率,精确率...2. 采用叶子节点的不纯度总和来评估效果,在确定树深和叶子节点个数的前提下,C(T)越小越好

C ( T ) = − ∑ t = 1 l e a f ∣ D t ∣ D H ( t ) C(T) = -\sum_{t=1}^{leaf} \frac{|D^{t}|}{D}H(t) C(T)=t=1leafDDtH(t)


感谢阅读🌼
如果喜欢这篇文章,记得点赞👍和转发🔄哦!
有任何想法或问题,欢迎留言交流💬,我们下次见!

祝愉快🌟!


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

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

相关文章

C# 单例模式

单例模式介绍 单例模式只允许被其自身实例化一次&#xff0c;且向外部提供了一个访问该实例的接口。 通常来说&#xff0c;单例对象进行实例化时一般不带参数&#xff0c;因为如果不同的实例化请求传递的参数不同的话会导致问题的产生。 单例模式主要特点 全局唯一性&#xf…

提升物流效率,快递平台实战总结与分享

随着电商行业的蓬勃发展&#xff0c;物流配送服务变得愈发重要。快递平台作为连接电商企业和消费者的桥梁&#xff0c;扮演着至关重要的角色。本篇博客将分享快递平台实战经验&#xff0c;总结关键要点&#xff0c;帮助物流从业者提升物流效率、优化服务质量。 ### 快递平台实…

汽车网络基础知识 要点

在以太网开发中&#xff0c;常常会听到一些专业名词&#xff0c;例如PHY&#xff0c;MAC&#xff0c;MII&#xff0c;switch&#xff0c;下面是解释 PHY PHY 是物理接口收发器&#xff0c;它实现物理层。包括 MII/GMII (介质独立接口) 子层、PCS (物理编码子层) 、PMA (物理介…

SQLiteC/C++接口详细介绍之sqlite3类(十四)

返回目录&#xff1a;SQLite—免费开源数据库系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;十三&#xff09; 下一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;十五&#xff09; 43.sqlite3_preupdate_hook sqlite3_preup…

PHP获取并分析过期删除.cn域名3-5数字(无4非0开)/2-4字母(声母)/三杂等品类域名

用途:获取分析最近过期删除.cn域名中3-5数字(无4非0开)/2-4字母(声母)/三杂等品类域名 先创建rec文件夹,用于按天缓存域名列表(不自动创建哦) 推荐宝塔灯自带的定时任务访问本文件网址&#xff0c;每早5-6点执行 获取两天后删除的cn域名名单并提取几个有价值类目的域名 <…

什么可以让你快速穿越低谷?

1. 变环境 当我们对当前生活状态感到彻底失望&#xff0c;当我们看透了人世间的冷暖&#xff0c;见证了人性的撕裂与拉扯&#xff0c;就会意识到需要改变环境。这可能包括搬离现居之地&#xff0c;寻找新的斗争之地。就像寻找宝玉发光之地一样&#xff0c;我们需要找到能让自己…

基于springboot的高校化学试剂仓储管理系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

VMware NSX Advanced Load Balancer (NSX ALB) 22.1.6 - 多云负载均衡平台

VMware NSX Advanced Load Balancer (NSX ALB) 22.1.6 - 多云负载均衡平台 应用交付&#xff1a;多云负载均衡、Web 应用防火墙和容器 Ingress 服务 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-nsx-alb-22/&#xff0c;查看最新版。原创作品&#xff0c;转载请…

194 基于matlab的日历GUI制作

基于matlab的日历GUI制作&#xff0c;可实时显示当前的日期和时间&#xff0c;精确到秒。非常漂亮&#xff0c;也很基础&#xff0c;学习GUI的不错程序&#xff0c;程序已调通&#xff0c;可直接运行。 194 matlab 日历制作 GUI可视化 - 小红书 (xiaohongshu.com)

sqlplus设置提示符

作为DBA&#xff0c;需要管理好多数据库&#xff0c;经常会有一台服务器安装多个oracle实例的情况&#xff0c;为避免误操作实例&#xff0c;我们需要在执行sqkplus前&#xff0c;先通过$ echo $ORACLE_SID或 SQL>select name from v$database查看当前实例&#xff0c;这样难…

前端小白的学习之路(CSS3 一)

提示&#xff1a;CSS3 是 Cascading Style Sheets&#xff08;层叠样式表&#xff09;的第三个主要版本&#xff0c;引入了许多新的特性和增强功能&#xff0c;用于设计和布局网页。本章记录CSS3新增选择器&#xff0c;盒子模型。 目录 一、C3新增选择器 1) 属性选择器 1.[c…

Python语言基础与应用-北京大学-陈斌-P40-39-基本扩展模块/上机练习:计时和文件处理-给算法计时-上机代码

Python语言基础与应用-北京大学-陈斌-P40-39-基本扩展模块/上机练习&#xff1a;计时和文件处理-给算法计时-上机代码 上机代码&#xff1a; # 基本扩展模块训练 给算法计时 def factorial(number): # 自定义一个计算阶乘的函数i 1result 1 # 变量 result 用来存储每个数的阶…

小结:Node.js Express VS Koa

Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架&#xff0c;主要基于 Connect 中间件&#xff0c;并且自身封装了路由、视图处理等功能&#xff0c;使用人数众多。 Koa 是 Express 原班人马基于 ES6 新特性重新开发的框架&#xff0c;主要基于 co 中间件&am…

RTP 控制协议 (RTCP) 反馈用于拥塞控制

摘要 有效的 RTP 拥塞控制算法&#xff0c;需要比标准 RTP 控制协议(RTCP)发送方报告(SR)和接收方报告(RR)数据包提供的关于数据包丢失、定时和显式拥塞通知 (ECN) 标记的更细粒度的反馈。 本文档描述了 RTCP 反馈消息&#xff0c;旨在使用 RTP 对交互式实时流量启用拥塞控制…

MongoDB数据备份与迁移

MongoDB数据备份与迁移 参考链接&#xff1a; https://www.cnblogs.com/you-men/p/14675290.html#_label2https://docs.mongoing.com/guan-li/mongodb-backup-methods#shi-yong-mongodump-bei-fenhttps://www.cnblogs.com/dbabd/p/13259147.html MongoDB备份工具简介 mongo…

Rust 的 Arc<Mutex<T>> 的用法示例源代码

在 Rust 中&#xff0c;Arc<Mutex<T>> 是一种组合类型&#xff0c;它结合了 Arc&#xff08;原子引用计数&#xff09;和 Mutex&#xff08;互斥锁&#xff09;。Arc 用于在多个所有者之间共享数据&#xff0c;而 Mutex 用于确保在任意时刻只有一个线程可以访问被保…

js使用canvas实现图片鼠标滚轮放大缩小拖拽预览,显示像素坐标,显示像素值

html代码 todo 实现画矩形框&#xff0c;圆形roi <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title&…

单元测试开发必不可少的一项工作,C#怎么来写单元测试

单元测试在开发过程中非常重要&#xff0c;写单元测试有几个重要的理由&#xff1a; 确保代码质量和稳定性&#xff1a; 单元测试可以帮助你验证代码的正确性。通过编写测试用例&#xff0c;你可以确保代码按照预期的方式工作&#xff0c;并且在进行重构或修改时不会破坏原有的…

JMeter 面试题及答案整理,最新面试题

JMeter中如何进行性能测试的规划和设计&#xff1f; 进行JMeter性能测试的规划和设计主要遵循以下几个步骤&#xff1a; 1、确定测试目标&#xff1a; 明确性能测试的目的和目标&#xff0c;比如确定要测试的系统性能指标&#xff08;如响应时间、吞吐量、并发用户数等&#…

zookeeper快速入门一:zookeeper安装与启动

本文是zookeeper系列之快速入门中的第一篇&#xff0c;欢迎大家观看与指出不足。 写在前面&#xff1a; 不影响教程&#xff0c;笔者安装zookeeper用的是WSL(windows下的linux子系统&#xff09;&#xff0c;当然你想直接在windows上用zookeeper也是可以的。 如果你也想用ws…