当前位置: 首页 > news >正文

机器学习---决策树算法(CLS、ID3、CART)

1. 决策树

决策树(Decision Tree)又称为判定树,是运用于分类的一种树结构。其中的每个内部结点

(internal node)代表对某个属性的一次测试,每条边代表一个测试结果,叶结点(leaf)代表某

个类(class)或者类的分布(class distribution),最上面的结点是根结点。

决策树提供了一种展示在什么条件下会得到什么类别这类规则的方法。

下例是为了解决这个问题而建立的一棵决策树,从中可以看到决策树的基本组成部分:决策结点、

分支和叶结点。

下图给出了一个商业上使用的决策树的例子,他表示了一个关心电子产品的用户是否会购买电脑的

知识用它可以预测某条记录或者某个人的购买意向。

这棵决策树对销售记录进行分类,指出一个电子产品消费者是否会购买一台计算机“buys_

computer”。每个内部结点(方形框)代表对某个属性的一次检测。每个叶结点(椭圆框)代表一

个类:buys_computers=yes 或者 buys_computers=no

在这个例子中,特征向量为:

(age, student, credit rating, buys_computers)

被决策数据的格式为:

(age, student, credit rating)

输入新的被决策的记录,可以预测该记录隶属于哪个类。

总结:决策树是⼀种树形结构,本质是⼀颗由多个判断节点组成的树,其中每个内部节点表示⼀个

属性上的判断, 每个分⽀代表⼀个判断结果的输出, 最后每个叶节点代表⼀种分类结果。

2. CLS算法

CLS(Concept Learning System)算法是早期的决策树学习算法。它是许多决策树学习算法的基

础。CLS的基本思想是从一棵空决策树开始,选择某一属性(分类属性)作为测试属性。该测试属

性对应决策树中的决策结点。根据该属性的值的不同,可将训练样本分成相应的子集,如果该子集

为空,或该子集中的样本属于同一个类,则该子集为叶结点,否则该子集对应于决策树的内部结

点,即测试结点,需要选择一个新的分类属性对该子集进行划分,直到所有的子集都为空或者属于

同一类。

CLS算法存在的问题:

采用不同的测试属性及先后顺序将会产生不同的决策树。

 

3. ID3算法 

ID3决策树建立算法步骤:

决定分类属性集合;

对目前的数据表,建立一个节点N;

如果数据库中的数据都属于同一个类,N就是树叶,在树叶上标出所属的类(纯的类别);

如果数据表中没有其他属性可以考虑,则N也是树叶,按照少数服从多数的原则在树叶上标出所属

类别(不纯的类别);

否则,根据平均信息期望值E或GAIN值选出一个最佳属性作为节点N的测试属性;

节点属性选定后,对于该属性中的每个值:从N生成一个分支,并将数据表中与该分支有关的数据

收集形成分支节点的数据表,在表中删除节点属性那一栏;

如果分支数据表属性非空,则转第一步,运用以上算法从该节点建立子树。

常见决策树算法启发函数的比较:

ID3算法存在的缺点:

(1) ID3算法在选择根节点和各内部节点中的分⽀属性时,采⽤信息增益作为评价标准。信息增益的

缺点是倾向于选择取值较多的属性,在有些情况下这类属性可能不会提供太多有价值的信息。

(2) ID3算法只能对描述属性为离散型属性的数据集构造决策树。

4. C4.5算法

C4.5算法对于ID3算法的改进:

改进1:用信息增益率代替信息增益来选择属性

改进2:能够完成对连续值属性的离散化处理

改进3:能处理属性值缺失的情况

改进4:在决策树构造完成之后进行剪枝

假设按属性 A 划分 D 中的样本,且属性 A 根据训练数据的观测具有 v 个不同取值{ a1, a2, ..., aj,

..., av }。如果 A 是离散值,可依属性 A 将 D 划分为 v 个子集 { D1, D2, ..., Dj, ..., Dv }。其中,Dj

为 D 中的样本子集,它们在 A 上具有属性值 aj。这些划分将对应于从该节点A出来的分支。

信息增益度量偏向于对取值较多的属性进行测试,即它倾向于选择v较大的属性A。

举个极端的例子:考虑充当唯一标识的属性PID。对PID的分裂将产生大量划分(与样本个数一样

多),每个分类只包含一个样本,且每个划分都是纯的。

对属性PID划分得到的信息增益最大,显然,这种划分对分类没有用处。

C4.5使用分裂信息(split information)将信息增益规范化,选择具有最大信息增益率的属性作为分裂

属性。

Info(D) = 0.940            Info收入(D) = 0.911             Gain(收入) = 0.029

高收入的有 4 个;中等收入的有 6 个;低收入的有 4 个

SplitInfo收入(D) = - 4/14 * log4/14 - 6/14 * log6/14 - 4/14 * log4/14 = 1.557

GainRatio(收入) = Gain(收入) / SplitInfo收入(D) = 0.029 / 1.557 = 0.019 

对于连续值属性,按属性值大小从小到大排序,取每对相邻值中点作为可能的分裂点split_point。

假设一连续值属性共有N个不同的属性值,则可找到N-1个可能的分裂点。 检查每个可能分裂点,

取能使得信息增益最大的分裂点,将D分裂成 D1: A <= split_point 和 D2: A > split_point(一个分裂

点,二分法,二 叉树)。

C4.5不使用中点,而是直接使用一对值中较小的值作为可能的分裂点,如本例中将使用5, 6作为可

能分裂点。

在某些情况下,可供使用的数据可能缺少某些属性的值,例如

一种简单的办法是赋予它该属性最常见的值,例如将“晴”或“雨”赋予第6个实例的天气属性。

一种更复杂的策略是为 A 的每个可能值赋予一个概率 。

     Gain(A) = F ( Info(D) – InfoA (D)) 其中 F 为属性值未缺失的实例所占比例; 计算 Info(D) 和

InfoA (D) 时忽略属性值缺失的实例。

Info(D) = -8/13×log(8/13) - 5/13×log(5/13) = 0.961 bits

Info天气(D) = 5/13×(-2/5log(2/5) - 3/5×log(3/5)) + 3/13×(-3/3log(3/3) - 0/3×log(0/3)) +

5/13×(-3/5log(3/5) - 2/5×log(2/5)) = 0.747 bits

Gain(天气) = 13/14 × (0.961 - 0.747) = 0.199 bits

计算 SplitInfo 时,将缺失的属性值当作一个正常值进行计算, 本例中,当作天气有四个值,分别

是晴、多云、雨、?,再计算其 SplitInfo。

SplitInfo天气(D) = - 5/14×log(5/14) - 3/14×log(3/14) - 5/14×log(5/14) - 1/14×log(1/14) = 1.809 bits

GainRatio(天气) = Gain(天气) / SplitInfo天气(D) = 0.199 / 1.809

分裂时,将属性值缺失的实例分配给所有分支,但是带一个权重:

本例14个实例中共13个实例天气属性值未缺失: 其中5个实例的天气属性为“晴”,3个实例的天气

属性为“多云”, 5个实例的天气属性为“雨”。

本例14个实例中共1个实例天气属性值缺失,因此估算出天气属性值缺失的第6个实例: 天气是晴

的概率是5/13,天气是多云的概率是3/13,天气是雨的概率是5/13 。

所以 T1 情况可以划分为:湿度 <= 75    2玩             0不玩

                                          湿度 > 75      5/13玩        3不玩  

叶节点以 (N/E) 的形式定义, 其中 N 为到达该叶节点的实例数, E 为其中属于其它分类的实例

数。 例如,不玩(3.4/0.4) 表示3.4个实例到达“不玩”节点,其中0.4个实例 不属于“不玩”.

对于任一实例, 湿度 <=75 的可能性是 2.0/(2.0 + 3.4),湿度 >75 的可能性是 3.4/(2.0 + 3.4).

当湿度 <=75 时,分类为玩的可能性 = 100%,分类为不玩的可能性 = 0。

当湿度 >75 时,分类为玩的可能性 = 0.4/3.4=12%,分类为不玩的可能性 = 3/3.4=88%。

最终分类的概率分布为:玩 = 2.0/5.4×100% + 3.4/5.4×12% = 44%,不玩 = 3.4/5.4×88% = 56%

上述的决策树算法增长树的每一个分支的深度,直到恰好能对训练样例比较完美地分类。

实际应用中,当训练样本中有噪声或训练样例的数量太少以至于不能产生目标函数的有代表性的

采样时,该策略可能会遇到困难。在以上情况发生时,这个简单的算法产生的树会过度拟合训练样

例 (过度拟合: Over fitting)。过度拟合产生的原因:训练样本中有噪声,训练样例太小等。

C4.5的优缺点:

优点:产⽣的分类规则易于理解,准确率较⾼。

缺点:在构造树的过程中,需要对数据集进⾏多次的顺序扫描和排序,因⽽导致算法的低效。 此

外,C4.5只适合于能够驻留于内存的数据集,当训练集⼤得⽆法在内存容纳时程序⽆法运⾏。

5. CART算法

分类回归树(CART:Classification and Regression Tree)其特点是在计算过程中充分利用二分

支树的结构(Bianry Tree-structured),即根节点包含所有样本,在一定的分裂规则下根节点被分

裂为两个子节点,这个过程又在子节点上重复进行,直至不可再分,成为叶节点为止。使用GINI指

标来选择分裂属性,使用二元切分(将生成二叉树) ,基于代价-复杂度剪枝。

算法描述:其中T代表当前样本集,当前候选属性集用T_attributelist表示。

(1)创建根节点N (2)为N分配类别

(3)if T 都属于同一类别 or T 中只剩下 一个样本则返回 N 为叶节点,否则为其分配属性

(4)for each T_attributelist 中属性执行该属性上的一个划分,计算此划分的GINI系数

(5)N 的测试属性 test_attribute=T_attributelist 中最小 GINI 系数的属性

(6)划分T得到T1、T2子集

(7)对于T1重复(1)-(6)

(8)对于T2重复(1)-(6)

CART算法考虑到每个节点都有成为叶子节点的可能,对每个节点都分配类别。 分配类别的方法可

以用当前节点中出现最多的类别,也可以参考当前节点的分类错误或者其他更复杂的方法。

Gini指标最小,划分越纯。 选择具有最小Gini指标 (或最大∆Gini)的属性作为分裂属性。

处理离散值属性:以收入为例,对收入属性的所有可能子集: {低,中,高},{低,中},{低,

高},{中,高},{低},{中},{高} 。考虑所有可能的二元划分,并计算划分前后的 Gini 指标, 选择

能产生最小 Gini 指标的子集作为分裂子集。

6. 递归分割(greedy algorithm)

从根节点开始,考虑一个分裂变量 j 和分裂点 s,得到2个区域,最优的变量 j 和分裂点 s,要满足

对于给定的 j 和 s,最里层的优化问题的解为:

而对于给定的 j,分裂点 s 很快能找到。

这样,遍历所有的自变量,就能找到最佳的一对 j 和 s。

 

 

 

 

 

相关文章:

机器学习---决策树算法(CLS、ID3、CART)

1. 决策树 决策树&#xff08;Decision Tree&#xff09;又称为判定树&#xff0c;是运用于分类的一种树结构。其中的每个内部结点 &#xff08;internal node&#xff09;代表对某个属性的一次测试&#xff0c;每条边代表一个测试结果&#xff0c;叶结点&#xff08;leaf&am…...

【算法与数据结构】404、LeetCode左叶子之和

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;思路比较简单&#xff0c;遍历所有节点然后判断该节点是否为左叶子节点&#xff0c;如果是&#xff0c…...

Apifox下载安装步骤

我们先访问网址 https://apifox.com/?utm_sourcebaidu&utm_mediumsem&utm_campaign251430236&utm_content7810722111&utm_termapifox%E6%9F%A5%E7%9C%8B%E7%89%88%E6%9C%AC&bd_vid8323327349775096324 然后 这里这个免费下载已经写的这么明显了 那就直接点…...

大华摄像头有问题,海康摄像头也有问题

买了个大华摄像头&#xff0c;除了抗噪方面效果不好&#xff0c;我是很满意的。前一段时间摄像头启动出了点问题&#xff08;忘记拔掉SD卡&#xff09;&#xff0c;于是买了个海康的。 大华摄像头是3寸&#xff0c;海康是2寸。视频效果差多了。看来大有大的道理。更可恨的是&a…...

Linux多线程同步机制(下)

文章目录 前言一、读写锁二、条件变量总结 前言 一、读写锁 多线程同步机制中的读写锁&#xff08;Read-Write Lock&#xff09;是一种特殊的锁机制&#xff0c;用于控制对共享资源的读写访问。读写锁允许多个线程同时读取共享资源&#xff0c;但在写操作时需要独占访问。 读…...

【QT】ComboBox的使用(14)

ComboBox这个控件我常用于多文本的储存、调用&#xff0c;正如他的中文意思为&#xff1a;下拉列表框。 下拉列表框&#xff1a;字面意思就是一个多文本的列表框&#xff0c;今天来看下如何使用ComboBox这个控件。 一.环境配置 1.python 3.7.8 可直接进入官网下载安装&…...

关于写英文论文的一些总结

名词连接名词组成名词&#xff0c;例如任务名&#xff0c;用task name&#xff0c;而不是name of task。其他各种词也是类似的&#xff1b;本文提出了什么什么&#xff0c;用 this study&#xff1b;多用it is become xx&#xff0c;这种更好&#xff0c;而不是we xx&#xff1…...

swagger 2.10.5 整合 spring boot

参考&#xff1a; http://springfox.github.io/springfox/ https://github.com/springfox/springfox http://springfox.github.io/springfox/docs/current/ https://github.com/springfox/springfox-demos https://github.com/springfox/springfox-demos/tree/2.9.2 https://gi…...

Python 练习:剔除数字

练习&#xff1a;剔除数字&#xff1a; 要求如下&#xff1a; 1、编写一段程序代码&#xff0c;程序运行后&#xff0c; 需要用户随意输入一段包含有数字和字母的字符串&#xff1b; 2、程序会自动删除字符串中的数字&#xff0c; 然后输出一串没有数字的字符串&#xff08;纯…...

Linux系统编程:基础知识入门学习笔记汇总

Linux基础shell编程——>Linux 系统编程——>&#xff08;计算机网络&#xff09;——>Linux 网络编程 来源&#xff1a;黑马程序员-Linux系统编程 45小时 评价 这个老师好像讲了很多课程&#xff0c;都还不错我由于赶时间之前学过Linux的Shell编程和Linux的网络编程&…...

基于硬件隔离增强risc-v调试安全1_问题描述

安全之安全(security)博客目录导读 2023 RISC-V中国峰会 安全相关议题汇总 说明&#xff1a;本文参考RISC-V 2023中国峰会如下议题&#xff0c;版权归原作者所有。...

OpenCV简介

OpenCV简介 OpenCV&#xff08;开源计算机视觉库&#xff1a;http://opencv.org&#xff09;是一个开源库&#xff0c;包含数百种计算机视觉算法。OpenCV 具有模块化结构&#xff0c;主要包括下列模块&#xff1a; 核心功能&#xff08;core&#xff09; - 定义基本数据结构的…...

Windows下编译qt-src-5.15.10

首先从镜像站点下载qt源码&#xff1a; https://download.qt.io/static/mirrorlist/ 下载QT的镜像站点 下载源码后解压到 F: 盘 创建编译目录F:\qtbuild 打开VS2019的 X64 Native Tools Command Prompt for VS 2019 进入到源码目录 cd F:\qt-everywher…...

有关linux排查服务器资源问题

查看 磁盘占用 df -h 进入到某一个文件夹下 查看对应文件夹占用 du -sh /usr...

【设计模式】Head First 设计模式——观察者模式 C++实现

设计模式最大的作用就是在变化和稳定中间寻找隔离点&#xff0c;然后分离它们&#xff0c;从而管理变化。将变化像小兔子一样关到笼子里&#xff0c;让它在笼子里随便跳&#xff0c;而不至于跳出来把你整个房间给污染掉。 设计思想 主题对象&#xff08;出版者&#xff09;管理…...

【ES】笔记-Promise基本使用

笔记-基本使用 一、初始Promise1. 抽象表达:2. 具体表达:为什么要用 Promise?promise的基本流程 二、fs读取文件三、AJAX请求四、Promise封装fs模块五、util.promisify方法六、Promise封装AJAX操作 一、初始Promise 1. 抽象表达: 1. Promise 是一门新的技术(ES6 规范) 2. Pr…...

服务器数据恢复-reiserfs文件系统损坏如何恢复数据?

服务器数据恢复环境&#xff1a; 一台IBM X系列服务器&#xff0c;4块SAS硬盘组建一组RAID5阵列&#xff0c;采用的reiserfs文件系统。服务器操作系统分区结构&#xff1a;boot分区LVM卷swap分区&#xff08;按照前后顺序&#xff09;。LVM卷中直接划分了一个reiserfs文件系统&…...

直播预告:把脉2023年下半场—主动防御邮箱盗号威胁

长期以来&#xff0c;承载着大量敏感数据的企业是黑产团伙的首要攻击目标。Coremail结合多年以来的邮件防护经验发现&#xff0c;黑产团伙针对企业邮箱账号安全的两大攻击方式为暴力破解和钓鱼邮件攻击。 一、企业邮箱安全现状 01、使用弱密码 企业员工使用弱密码让黑产团伙有…...

专题:平面、空间直线参数方程下的切线斜率问题

本文研究平面、空间直线在参数方程形式下&#xff0c;切线斜率&#xff08;即导数&#xff09;如何表示的问题。 如上图所示。 设 y f ( x ) &#xff0c; x φ ( t ) &#xff0c; y ψ ( t ) 当 t t 0 时&#xff0c; x x 0 &#xff0c; y y 0 &#xff0c;即点 A 坐…...

JavaScript—对象与构造方法

目录 json对象&#xff08;字面值&#xff09; js中对象是什么&#xff1f; 如何使用&#xff1f; 关联数组 js对象和C#对象有什么区别&#xff1f; 构造函数 什么是构造方法&#xff1f; 如何使用构造方法&#xff1f; 如何添加成员&#xff1f; 对象的动态成员 正则…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)

cd /home 进入home盘 安装虚拟环境&#xff1a; 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境&#xff1a; virtualenv myenv 3、激活虚拟环境&#xff08;激活环境可以在当前环境下安装包&#xff09; source myenv/bin/activate 此时&#xff0c;终端…...

C++中vector类型的介绍和使用

文章目录 一、vector 类型的简介1.1 基本介绍1.2 常见用法示例1.3 常见成员函数简表 二、vector 数据的插入2.1 push_back() —— 在尾部插入一个元素2.2 emplace_back() —— 在尾部“就地”构造对象2.3 insert() —— 在任意位置插入一个或多个元素2.4 emplace() —— 在任意…...

__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.

这个警告表明您在使用Vue的esm-bundler构建版本时&#xff0c;未明确定义编译时特性标志。以下是详细解释和解决方案&#xff1a; ‌问题原因‌&#xff1a; 该标志是Vue 3.4引入的编译时特性标志&#xff0c;用于控制生产环境下SSR水合不匹配错误的详细报告1使用esm-bundler…...

若依项目部署--传统架构--未完待续

若依项目介绍 项目源码获取 #Git工具下载 dnf -y install git #若依项目获取 git clone https://gitee.com/y_project/RuoYi-Vue.git项目背景 随着企业信息化需求的增加&#xff0c;传统开发模式存在效率低&#xff0c;重复劳动多等问题。若依项目通过整合主流技术框架&…...

循环语句之while

While语句包括一个循环条件和一段代码块&#xff0c;只要条件为真&#xff0c;就不断 循环执行代码块。 1 2 3 while (条件) { 语句 ; } var i 0; while (i < 100) {console.log(i 当前为&#xff1a; i); i i 1; } 下面的例子是一个无限循环&#xff0c;因…...