决策树算法介绍

news2024/11/26 0:30:02

决策树目录

  • 1. 决策树基础
    • 1.1 决策树定义
    • 1.2 熵以及信息熵介绍
  • 2. 决策树的划分依据
    • 2.1 信息增益
      • 2.1.1信息增益应用举例
    • 2.2 信息增益率
      • 2.2.1 信息增益率使用举例
      • 2.2.2 信息增益率使用举例2
    • 2.3 基尼值和基尼指数
      • 2.3.1 基尼值和基尼指数介绍
      • 2.3.2 基尼值和基尼指数实现案例

1. 决策树基础

1.1 决策树定义

        决策树思想的来源⾮常朴素,程序设计中的条件分⽀结构就是if-else结构,最早的决策树就是利⽤这类结构分割数据的⼀种分类学习⽅法

决策树是什么?

是⼀种树形结构,本质是⼀颗由多个判断节点组成的树
其中每个内部节点表示⼀个属性上的判断,
每个分⽀代表⼀个判断结果的输出,
最后每个叶节点代表⼀种分类结果

简单的决策树图形示例:
在这里插入图片描述
        总之,决策树是⼀种树形结构,本质是⼀颗由多个判断节点组成的树

1.2 熵以及信息熵介绍

        决策树是根据信息增益以及信息增益率等来进行划分的,由信息增益计算出对当前决策影响较大的特征,在进行特征选择或者数据分析中作为重点考察对象,所以在这里详细介绍一下信息熵。

        熵的概念:物理学上,熵 Entropy 是“混乱”程度的量度。系统越有序,熵值越低;系统越混乱或者分散,熵值越⾼。“信息熵” (information entropy)是度量样本集合纯度最常⽤的⼀种指标。

  • 信息熵
    • 从信息的完整性上进⾏的描述
      • 当系统的有序状态⼀致时,数据越集中的地⽅熵值越⼩,数据越分散的地⽅熵值越⼤
    • 从信息的有序性上进⾏的描述
      • 当数据量⼀致时,系统越有序,熵值越低;系统越混乱或者分散,熵值越⾼

信息熵的计算:
在这里插入图片描述

2. 决策树的划分依据

2.1 信息增益

概念:

信息增益:以某特征划分数据集前后的熵的差值。熵可以表示样本集合的不确定性,熵越⼤,样本的不确定性就越⼤。因此可以使⽤划分前后集合熵的差值来衡量使⽤当前特征对于样本集合D划分效果的好坏。

定义与公式:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.1.1信息增益应用举例

        如下图,第⼀列为论坛号码,第⼆列为性别,第三列为活跃度,最后⼀列⽤户是否流失。
        我们要解决⼀个问题:性别和活跃度两个特征,哪个对⽤户流失影响更⼤?

在这里插入图片描述
通过计算信息增益可以解决这个问题,统计上右表信息
        其中Positive为正样本(已流失),Negative为负样本(未流失),下⾯的数值为不同划分下对应的⼈数。可得到三个熵:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
        活跃度的信息增益⽐性别的信息增益⼤,也就是说,活跃度对⽤户流失的影响⽐性别⼤。在做特征选择或者数据分析的时候,我们应该重点考察活跃度这个指标。

实现步骤:

Ⅰ计算类别信息熵
Ⅱ计算类别的属性信息熵
Ⅲ计算类别的属性信息增益
Ⅳ重复执行二三步骤,直到计算所有的属性的信息增益
Ⅴ对比每个属性的信息增益,信息增益比较大的就是对当前决策层影响很大,应当作为重点考虑对象

2.2 信息增益率

概念:

在上⾯的介绍中,我们有意忽略了编号这⼀列.若把"编号"也作为⼀个候选划分属性,则根据信息增益公式可计算出它的信息增益为 0.9182,远⼤于其他候选划分属性

实际上,信息增益准则对可取值数⽬较多的属性有所偏好,为减少这种偏好可能带来的不利影响,著名的 C4.5 决策树算法 [Quinlan, 1993J 不直接使⽤信息增益,⽽是使⽤"增益率" (gain ratio) 来选择最优划分属性.

计算:
增益率:增益率是⽤前⾯的信息增益Gain(D, a)和属性a对应的"固有值"(intrinsic value) [Quinlan , 1993J的⽐值共同定义的。
在这里插入图片描述

2.2.1 信息增益率使用举例

在上一个例题的基础上计算固有值,从而计算信息增益。

在这里插入图片描述
活跃度的信息增益率更⾼⼀些,所以在构建决策树的时候,优先选择

C4.5算法流程:

while(当前节点"不纯"):
   1.计算当前节点的类别熵(以类别取值计算)
   2.计算当前阶段的属性熵(按照属性取值下得类别取值计算)
   3.计算信息增益
   4.计算各个属性的分裂信息度量
   5.计算各个属性的信息增益率
end while
当前阶段设置为叶⼦节点

2.2.2 信息增益率使用举例2

如下图,第⼀列为天⽓,第⼆列为温度,第三列为湿度,第四列为⻛速,最后⼀列该活动是否进⾏。
我们要解决:根据下⾯表格数据,判断在对应天⽓下,活动是否会进⾏?
在这里插入图片描述
数据汇总:
在这里插入图片描述
该数据集有四个属性,属性集合A={ 天⽓,温度,湿度,⻛速}, 类别标签有两个,类别集合L={进⾏,取消}。

a.计算类别信息熵

类别信息熵表示的是所有样本中各种类别出现的不确定性之和。根据熵的概念,熵越⼤,不确定性就越⼤,把事情搞清楚所需要的信息量就越多。
在这里插入图片描述

在这里插入图片描述

b.计算每个属性的信息熵

每个属性的信息熵相当于⼀种条件熵。他表示的是在某种属性的条件下,各种类别出现的不确定性之和。属性的信息熵越⼤,表示这个属性中拥有的样本类别越不“纯”。

在这里插入图片描述
在这里插入图片描述

c.计算信息增益

信息增益的 = 熵 - 条件熵,在这⾥就是 类别信息熵 - 属性信息熵,它表示的是信息不确定性减少的程度。如果⼀个属性的信息增益越⼤,就表示⽤这个属性进⾏样本划分可以更好的减少划分后样本的不确定性,当然,选择该属性就可以更快更好地完成我们的分类⽬标。--------信息增益就是ID3算法的特征选择指标。

在这里插入图片描述
在这里插入图片描述

d.计算属性分裂信息度量

⽤分裂信息度量来考虑某种属性进⾏分裂时分⽀的数量信息和尺⼨信息,我们把这些信息称为属性的内在信息
(instrisic information)。信息增益率⽤信息增益/内在信息,会导致属性的重要性随着内在信息的增⼤⽽减⼩(也就是说,如果这个属性本身不确定性就很⼤,那我就越不倾向于选取它),这样算是对单纯⽤信息增益有所补偿。

在这里插入图片描述
在这里插入图片描述
e.计算信息增益率
A
在这里插入图片描述
天⽓的信息增益率最⾼,选择天⽓为分裂属性。发现分裂了之后,天⽓是“阴”的条件下,类别是”纯“的,所以把它定义为叶⼦节点,选择不“纯”的结点继续分裂。

2.3 基尼值和基尼指数

2.3.1 基尼值和基尼指数介绍

        基尼值Gini(D):从数据集D中随机抽取两个样本,其类别标记不⼀致的概率。故,Gini(D)值越⼩,数据集D的纯度越⾼(也就是说属于同类的概率)。

数据集 D 的纯度可⽤基尼值来度量:

在这里插入图片描述

p = , D为样本的所有数量,C 为第k类样本的数量。

基尼指数Gini_index(D):⼀般,选择使划分后基尼系数最⼩的属性作为最优化分属性。

在这里插入图片描述

2.3.2 基尼值和基尼指数实现案例

依照下表做出决策树

在这里插入图片描述
       实现方法:对数据集⾮序列标号属性{是否有房,婚姻状况,年收⼊}分别计算它们的Gini指数,取Gini指数最⼩的属性作为决策树的根节点属性。

第一轮

       第一步:根节点的Gini值为:

作用:比较其他属性的Gini指数看是否有划分的必要
在这里插入图片描述

       第二步:当根据是否有房来进⾏划分时,Gini指数计算过程为:
在这里插入图片描述

       第三步:若按婚姻状况属性来划分,属性婚姻状况有三个可能的取值{married,single,divorced},分别计算划分后的Gini系数增益。

在这里插入图片描述
       第四步:年收⼊Gini:

       对于年收⼊属性为数值型属性,⾸先需要对数据按升序排序,然后从⼩到⼤依次⽤相邻值的中间值作为分隔将样本划分为两组。
       例如当⾯对年收⼊为60和70这两个值时,我们算得其中间值为65。以中间值65作为分割点求出Gini指数。

在这里插入图片描述
       根据计算知道,三个属性划分根节点的指数最⼩的有两个:年收⼊属性和婚姻状况,他们的指数都为0.3。此时,选取⾸先出现的属性【married】作为第⼀次划分。

第⼆轮:

       第一步:计算根节点的Gini指数:由于第一轮已经分出去四个,还剩下六个

在这里插入图片描述

       第二步:对于是否有房属性,可得
在这里插入图片描述
       第三步:对于年收⼊属性则有

在这里插入图片描述

最终构造出决策树:

在这里插入图片描述
流程:

while(当前节点"不纯"):
       1.遍历每个变量的每⼀种分割⽅式,找到最好的分割点
       2.分割成两个节点N1和N2
end while
每个节点⾜够“纯”为⽌

三者比较:

名称提出时间分支方式备注
ID31975信息增益ID3只能对离散属性的数据集构成决策树
C4.51993信息增益 率优化后解决了ID3分⽀过程中总喜欢偏向选择值较多的 属性
CART1984Gini系数可以进⾏分类和回归,可以处理离散属性,也可以处理连续属性

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

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

相关文章

e-STUDIO2010AC•2520AC安装步骤

注意!在室内室外温差比较大的情况下,设备需要在室内静置240分钟以上才可以进行安装。

如何训练个人的ChatGpt4

如何在自己的计算机上安装类似 ChatGPT 的个人 AI 并在没有互联网的情况下运行它 个人 AI 的“第一台 PC”时刻 这是个人AI的“第一台PC”时刻,随之而来的是限制,就像在车库里生产第一台Apple 1一样。你是先驱。今天,任何人都可以使用私人和…

一个从培训学校走出来的测试工程师自述....

简单介绍一下我自己,1997年的,毕业一年了,本科生,专业是机械制造及其自动化。 在校度过了四年,毕业,找工作,填三方协议,体检,入职。我觉得我可能就这么度过我平平无奇的…

【LeetCode】剑指 Offer 56. 数组中数字出现的次数 p275 -- Java Version

1. 题目介绍(56. 数组中数字出现的次数) 面试题56.:数组中数字出现的次数, 一共分为两小题: 题目一:数组中只出现一次的两个数字题目二:数组中唯一只出现一次的数字 2. 题目1:数组中…

学术速运|利用深度学习和分子动力学模拟设计抗菌肽

题目: Designing antimicrobial peptides using deep learning and molecular dynamic simulations 文献来源:Briefings in Bioinformatics, 2023, 1–13 代码:https://github.com/gc-js/Antimicrobial-peptide-generation 简介:随着多药耐…

Springboot实现文件断点续传-基于GridFS

Springboot实现文件断点续传-基于GridFS 需求介绍 我们后台是使用GridFS存储文件对象的,之前客户端都是Web浏览器,网络环境相对较为稳定,所以我们直接提供文件下载就行。但最近新增需求需要在移动端进行文件下载,这就有问题了。…

c++函数重载

C函数重载(Function Overloading)是指在同一个作用域,可以定义多个名称相同但参数列表不同的函数。在调用这些同名函数时,编译器根据实参与各个形参的类型、个数或顺序等特征来确定调用哪一个函数。 通过函数重载,我们…

UE4/5多人游戏详解(三、创建会话,委托绑定回调函数)

目录 基础的创建 回调函数绑定到委托: 实现创建会话的函数createGameSession: 回调函数实现判断验证是否成功: 添加会话设置: 测试 基础的创建 [提示:中途如果有无法编译则删除Binaries,saved,Intermediate后重…

倍增?最近公共祖先?——从定义到实现,帮你一步步吃掉它!

倍增?最近公共祖先?——从定义到实现,帮你一步步吃掉它! 一、倍增倍增——翻倍的增长 倍增是一种思想,实际上的操作就是通过不断翻倍来缩短我们的处理时间: 它可以把线性级别的处理优化到指数级。 举个…

5.redis-哨兵模式

01-哨兵模式概述 如果master宕机, 我们该怎么办? ①关闭所有slave②选举新的master, 建立新的主从结构 存在的问题 ①关闭期间, 谁来提供数据服务②选举新master的标准是什么③原来的master恢复了怎么办 哨兵模式 sentinel是一个分布式系统,用于对主从结构中的每…

【多线程】Thread类

1. Java中如何进行多线程编程?线程是操作系统中的概念,操作系统内核实现了线程这样的机制,并且对用户层提供了一些 API 供用户使用(如 Linux 中的 pthread 库)。所以本身关于线程的操作,是依赖操作系统提供的的 API,而…

练习,异常,异常处理,try-catch,throws

package com.jshedu.homework_;/*** author Mr.jia* version 1.0*/ //匿名内部类 public class Homework04 {public static void main(String[] args) {Cellphone cellphone new Cellphone();//1.匿名内部类,同时也是一个对象/*new computer() {Overridepublic dou…

JavaClient With HDFS

序言 在使用Java创建连接HDFS的客户端时,可以设置很多参数,具体有哪些参数呢,只要是在部署HDFS服务中可以设置的参数,都是可以在连接的时候设置. 我没有去验证所有的配置是否都可以验证,只是推测cuiyaonan2000163.com 依据 创建HDFS的构造函数如下所示: 网上比较常用的是get…

gdb 跟踪调式core

自己编译的问题出现段错误: 编译:使用gdb调试core文件来查找程序中出现段错误的位置时,要注意的是可执行程序在编译的时候需要加上-g编译命令选项。 gdb调试core文件的步骤 gdb调试core文件的步骤常见的有如下几种,推荐第一种。 具体步骤一: (1)启动gdb,进入core文…

【剑指 offer】旋转数组的最小数字

✨个人主页:bit me👇 ✨当前专栏:算法训练营👇 旋 转 数 组 的 最 小 数 字核心考点:数组理解,二分查找,临界条件 描述: 有一个长度为 n 的非降序数组,比如[1,2,3,4,5]…

ABAP 创建、修改、删除内部交货单(VL31N/VL32N)

一、干货 VL31N创建的BAPI: 1.GN_DELIVERY_CREATE 通用交货单使用的bapi,推荐使用 2.BAPI_DELIVERYPROCESSING_EXEC 简单,但是字段比较少 3.BBP_INB_DELIVERY_CREATE 听说有bug,我就没有使用这个了 VL32N修改/删除BAPI: BAPI_INB…

每日学术速递4.14

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Deep RL at Scale: Sorting Waste in Office Buildings with a Fleet of Mobile Manipulators 标题:大规模深度强化学习:使用移动机械手对办公楼中的垃圾进行…

VS2022编译libui库

libui是一个 C 中简单且可移植(但并非不灵活)的 GUI 库,它使用每个平台原生的GUI技术进行绘制。 官网地址:链接 本文将使用VS2022编译libui库,操作系统为Windows10。 1. 下载源代码 首先在官网下载源代码,由于此代码不依赖第三库,故只需下载源代码即可进行编译。 我下…

R730服务器环境搭建(centos7、lanproxy、docker、k8s)

文章目录前言一、centos7安装1.制作u盘启动盘2.开始装系统:二、环境安装(lanproxy、docker、k8s)1.lanproxy安装2.docker安装(如果通过k8sOfflineSetup安装k8s可以跳过这一步,因为会自动安装docker)3.安装k…

安装 KeyShot 流程

| 安装 KeyShot 流程 KeyShot 安装程序将指导您完成安装过程。 在 Windows 上,安装过程会要求您考虑以下事项终用户协议 为使用计算机的所有人或仅为当前用户安装 KeyShot 安装文件夹的位置 资源文件夹的位置 ——资源文件夹包含许多可以与 KeyShot 一起使用的纹…