机器学习---决策树算法(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。

 

 

 

 

 

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

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

相关文章

JVM核心原理解读(一)---执行引擎

Java虚拟机规范制定了Java字节码执行引擎的概念模型,Java执行引擎作用概括起来就是执行编译产生的Java class文件,为用户提供了底层OS的调用,屏蔽了不同平台硬件和OS的差异性,使得编写的代码无差别的在各个平台运行;对于Java字节码执行一般有解释执行和编译执行两种,具体使用哪…

学乐多光屏P90:智能引领儿童学习新时代

随着科技的迅猛发展&#xff0c;儿童教育正逐渐迈入数字化时代。在这个变革的浪潮中&#xff0c;学乐多光屏P90以其卓越的功能和深刻的教育理念&#xff0c;成为了智能儿童学习领域的引领者&#xff0c;为孩子们开启了全新的学习体验。 融合创新技术&#xff0c;引领学习变革 …

GD32-舵机的原理

GD32-舵机的原理 舵机的现一脉宽与舵机转动角度 旋转编码器的原理 顺时针&#xff1a;A的下降沿时&#xff0c;B处于高电平&#xff1b; 逆时针&#xff1a;A的下降沿时&#xff0c;B处于低电平&#xff1b; #ifndef _ENCODER_DRIVE_H #define _ENCODER_DRIVE_H#include &quo…

2023高教社杯数学建模思路 - 复盘:校园消费行为分析

文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…

JavaScript—对象与构造方法

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

Python|爬虫和测试|selenium框架的安装和初步使用(一)

前言&#xff1a; Python作为一门胶水语言来说&#xff0c;可以说是十分的优秀&#xff0c;什么事情都可以干&#xff0c;并且在某些领域还能干的非常不错&#xff0c;尤其是在爬虫和测试领域&#xff0c;该语言可以说是没有对手。 这么说的原因是因为如果你要使用爬虫爬取某…

汽车自适应巡航系统车距控制策略研究

1 引言 自适应巡航控制( Adaptive Cruise Control&#xff0c;ACC) 是汽车驾驶辅助系统的重要组成部分&#xff0c;其作用是根据车距传感器探测到本车( ACC 车辆) 与主目标车辆( 前车) 之间的相对位置和相对速度信息&#xff0c;自动调节ACC 车辆的节气门开度或部分制动力矩( 即…

探索数据湖中的巨兽:Apache Hive分布式SQL计算平台浅度剖析!

文章目录 ◆ Apache Hive 概述1.1 分布式SQL计算1.2 Hive的优势 ◆ 模拟实现Hive功能2.1 元数据管理2.2 解析器2.3 基础架构2.4 Hive架构 ◆ Hive基础架构3.1 Hive架构图3.2 Hive组件3.2.1 元数据存储3.2.2 Driver驱动程序3.2.3 用户接口 ◆ Hive部署4.1 VMware虚拟机部署步骤一…

【学习笔记】求解线性方程组的G-S迭代法

求解线性方程组的G-S迭代法 // 运行不成功啊function [x,k,index] Gau_Seid(A,b,ep,it_max) % 求解线性方程组的G-S迭代法&#xff0c;其中 % A为方程组的系数矩阵 % b为方程组的右端项 % ep为精度要求&#xff0c;省缺为1e-5 % it_max为最大迭代次数&#xff0c;省缺为100 % …

新KG视点 | Jeff Pan、陈矫彦等——大语言模型与知识图谱的机遇与挑战

OpenKG 大模型专辑 导读 知识图谱和大型语言模型都是用来表示和处理知识的手段。大模型补足了理解语言的能力&#xff0c;知识图谱则丰富了表示知识的方式&#xff0c;两者的深度结合必将为人工智能提供更为全面、可靠、可控的知识处理方法。在这一背景下&#xff0c;OpenKG组织…

eslint

什么是eslint ESLint 是一个根据方案识别并报告 ECMAScript/JavaScript 代码问题的工具&#xff0c;其目的是使代码风格更加一致并避免错误。 安装eslint npm init eslint/config执行后会有很多选项&#xff0c;按照自己的需求去选择就好&#xff0c;运行成功后会生成 .esli…

bpmnjs Properties-panel拓展(属性设置篇)

最近有思考工作流相关的事情&#xff0c;绘制bpmn图的工具认可度比较高的就是bpmn.js了&#xff0c;是一个基于node.js的流程图绘制框架。初始的框架只实现了基本的可视化&#xff0c;想在xml进行客制化操作的话需要拓展&#xff0c;简单记录下几个需求的实现过程。 修改基础 …

每天一道leetcode:542. 01 矩阵(图论中等广度优先遍历)

今日份题目&#xff1a; 给定一个由 0 和 1 组成的矩阵 mat &#xff0c;请输出一个大小相同的矩阵&#xff0c;其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示例1 输入&#xff1a;mat [[0,0,0],[0,1,0],[0,0,0]] 输出&#xff…

java八股文面试[多线程]——指令重排序

关于a的操作&#xff0c;由原来的6个指令&#xff0c;变成了4个指令。 1. 指令重排序的介绍 1&#xff09;指令重排序的类型 在执行程序时为了提高性能&#xff0c;编译器和处理器常常会对指令做重排序。 重排序分三种类型&#xff1a;编译器优化的重排序 编译器在不改变单线…

分布式一致性协议

在对一个分布式系统进行架构设计的过程中&#xff0c;往往会在系统的可用性和数据一致性之间进行反复的权衡&#xff0c;于是就产生了一系列的一致性协议。为了解决分布式一致性问题&#xff0c;在长期的探索研究过程中&#xff0c;涌现出了一大批经典的一致性协议和算法&#…

SpringMVC 第二天

第 1 章 ModelAttribute 和 SessionAttribute[ 应 用 ] 1.1ModelAttribute 1.1.1 使用说明 作用&#xff1a; 该注解是 SpringMVC4.3 版本以后新加入的。它可以用于修饰方法和参数。 出现在方法上&#xff0c;表示当前方法会在控制器的方法执行之前&#xff0c;先执行…

Open3D 进阶(7)Kmeans++点云聚类

目录 一、算法原理1、原理概述2、实现流程3、参考文献二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 1、原理概述

【Android-Flutter】我的Flutter开发之旅

目录: 0、文档&#xff1a;1、在Windows上搭建Flutter开发环境&#xff08;1&#xff09;[使用中国镜像(❌详细看官方文档)](https://docs.flutter.dev/community/china)&#xff08;2&#xff09;[下载最新版Flutter SDK&#xff08;已包含Dart&#xff09;](https://docs.flu…

[SQLITE_ERROR] SQL error or missing database (near “=“: syntax error)【已解决】

这个报的错误是语法错误&#xff0c;但是我并没有看出来这行代码有什么错。 通过排除掉下边两个问题解决的 从增加记录方法复制的下来的代码&#xff0c;只删除了关闭自动提交事务&#xff0c;但是connection.commit忘记删除executeQuery和executeUpdate方法的用法忘记了&…

什么是网络取证(Network Forensics)

企业采用新技术来检查其网络安全是否存在零日漏洞&#xff0c;与立即指示问题的物理层不同&#xff0c;黑客攻击尝试可能会被忽视并变得严重&#xff0c;直到对网络流量有一个整体的可见性。通过实时监控来跟踪其源和目标的流量&#xff0c;以查明问题或潜在问题的根源。 什么…