《机器学习by周志华》学习笔记-决策树-01

news2024/11/16 21:21:24

本书中的「决策树」有时指学习方法,有时指学得的树。

1、基本流程

1.1、概念

基本流程,亦称「判定树」

决策树(decision tree),是一种常见的机器学习方法。以二分类任务为例,我们希望从给定训练数据集学得一个模型,用以对新样例进行分离。

以二分类任务为例,可看作对「当前样本属于正类吗」这个问题的「决策」或「判定」过程。

1.2、目的

是为了产生一棵泛化能力强,即处理未见示例能力强的决策树。

1.3、基本流程

顾名思义,决策树是基于树结构来进行决策的,这恰是人类在面临决策问题时一种很自然的处理机制。

例如,我们要对「这是好瓜吗」这样的问题进行决策时,通常会进行一系列的子判断或自决策,例如:

  • 他是什么颜色?>>青绿色
  •         它的根蒂是什么形态?>>蜷缩
  •                 它敲起来是什么声音?>>**
  •                         这是好瓜吗?>>好瓜

如下图所示:

显然,决策过程的最终结论对应了我们所希望的判定结果。例如:「是」或「不是」好瓜。

每个判定问题都是对某个属性的「测试」。例如:他是什么颜色?、它的根蒂是什么形态?

每个「测试结果」或是「导出最终结论」或是「导出进一步的判断问题」,其考虑范围是在上次决策结果的限定范围之内。例如:他是什么颜色?>>青绿色>>>它的根蒂是什么形态?

一般的,一颗决策树包含:

  • 一个根节点:包含样本全集
  • 若干个内部节点:对应一个属性测试
  • 若干个叶节点:对应决策结果

每个结点包含的样本集合根据属性测试的结果被划分到子结点中;从「根节点」到「每个叶节点」的路径对应了一个判定测试序列。

其基本流程遵循简单且直观的「分而治之(divide-and-conquer)」策略。如下所示:

   输入  

  • 训练集D=\left \{ (x_{1},y_{1}),(x_{2},y_{2}),...,(x_{m},y_{m}) \right \}
  • 离散属性集A=\left \{ A_{1},A_{2},...A_{n} \right \}
  • 每个属性对应属性值的样本个数为a_{i}^{1},a_{i}^{2},...,a_{i}^{V},其中最大样本个数用a_{i}^{max}表示

   过程  

  • 创建函数TreeGenerate(D,A_{i})
  • 创建节点node
  • if(D中样本全属于同一类别A_{i}
  •         thennode=A_{i}且为叶节点)
  •         return 情形(1)
  •  end if
  • ifA=\varnothing或任意样本类别个数a_{i}^{j}=a_{i}^{max}
  •         thennode为叶节点且标记为D中样本数量最多的类a_{i}^{max}
  •         return 情形(2)
  •  end if
  • A中选择最优划分属性A_{i}//最优划分属性将在下面「2、划分选择」说明
  • for  (A_{i}的每一个属性值用A_{i}^{v}表示)
  •         do(为node生成分支,令D_{i}^{v}表示D中在A_{i}上取值为A_{i}^{v}的样本子集)
  •                 ifD_{i}^{v}=\varnothing
  •                         then(分支节点=叶节点,类别为D中样本数量最多的类a_{i}^{max}
  •                         return 情形(3)
  •                         else(分支节点=TreeGenerate(D_{i}^{v},A\setminus \left \{ A_{i}^{v} \right \})
  •                 end if
  • end for

   输出  

  • 以node为根节点的一棵决策树

显然,决策树的生成是一个递归过程。

在决策树基本算法中,有3种情形会导致递归返回:

  • 情形(1):当前结点包含的样本属于同一类别,无需划分。
  • 情形(2):当前属性集为空,或是所有样本在所有属性上取值相同,无法划分。
  • 情形(3):当前结点包含的样本集合为空,不能划分。

在(2)情形下,我们把当前结点标记为叶节点,并将其类别设定为该结点所含样本最多的类别;

在(3)情形下,同样吧当前结点标记为叶节点,但将其类别设定为其父节点所含样本最多的类别。

注意这两种情形的处理实质不同:

  • 情形(2)是在利用当前结点的后验分布。
  • 情形(3)是把父节点的样本分布作为当前结点的先验分布。

2、划分选择

从上面的决策树「输入-过程-输出」的环节中我们可以知道,其中最重要也是需要研究的部分就是——最优划分属性。

本章主要的内容则是介绍了让「划分选择」最优的方法:

随着划分过程不断进行,我们希望决策树的分支节点所包含的样本尽可能属于同一类别。即节点的「纯度(Purity)」越来越高。

下面我们会介绍一些度量样本集合「纯度(Purity)」比较常用的指标,通过这些指标可以增加样本「纯度」,从而使「划分选择」更优。

2.1、信息增益

2.1.1、信息熵(Information Entropy)

「信息熵」是度量样本「纯度」最常用的一种指标。

假设当前样本集:D=\left \{ \left ( x_{1},y_{1} \right ), \left ( x_{2},y_{2} \right ),..., \left ( x_{m},y_{m} \right ) \right \}的类别集合用Y表示:

Y=\left \{ Y_{1},Y_{2},...,Y_{k} \right \}

其中第Y_{j}(Y_{j}\in Y)类样本个数为y_{j}(1\leq y_{j}\leq m)\sum_{j=1}^{k}y_{j}=m,其所占比例用P_{j}(j=1,2,...,k)表示,则:

P_{j}=\frac{y_{j}}{m}

其离散属性集合用A表示:

A=\left \{ A_{1},A_{2},...,A_{n} \right \}  ,其中任意离散属性用A_{i}(A_{i}\in A)

则样本集D的「信息熵」定义为:

Ent(D)=-\sum_{j=1}^{k}P_{j}\times log_{2}^{P_{j}}

由于0< P_{j}\leq 1\sum_{j=1}^{k}P_{j}=1所以:

0< Ent(D)\leq \sum_{j=1}^{k}log_{2}^{P_{j}}Ent(D)越小,样本D的「纯度」越高。

2.1.2、信息增益(Information Gain)

假设离散属性A_{i}有V个可能的取值,分别用\left \{ A_i^{1},A_i^{2},...,A_i^{V} \right \}表示。若使用A_{i}来对样本集D进行划分,则会产生V个分支节点。其中第v个分支节点A_i^{v}包含了D中所有在属性A_{i}上取值为A_i^{v}的样本,该样本集合记为D_{i}^{v}(数据为i类别v值的样本集合)且其对应的样本数用a_{i}^{v}表示,则样本集合D_{i}^{v}的信息熵:

Ent(D_{i}^{v})=-\sum_{j=1}^{k}P_{j}\times log_{2}^{P_{j}}

考虑到不同分支节点所包含的样本数a_{i}^{v}不同,给分支结点赋予权重的规则定为:样本数越多的分支节点,影响越大。即a_{i}^{v}越大,影响越大。所以权重表示为:

g=\frac{\left | D_{i}^{v} \right |}{\left | D \right |}=\frac{a_{i}^{v}}{m}

则用属性A_{i}对样本D进行划分所获得的「信息增益(Information Gain)」为:

Gain(D,A_{i})=Ent(D)-\sum_{v=1}^{V}\frac{|D_{i}^{v}|}{|D|}Ent(D_{i}^{v})  

一般来说,信息增益Gain(D,A_{i})越大,则意味着使用属性A_{i}来进行划分数据集D获的的「纯度」越大。因此我们可以用信息增益来进行决策树的「划分属性选择」。也就是上面算法的属性选择。

f(A_{i})=\underset{A_{i}\in A}{argmax}Gain(D,A_{i})

上个式子就是求集合A=\left \{ A_{1},A_{2},...,A_{n} \right \}中所有类别的「信息增益」最大的属性公式。

较为著名的就是ID3(Iterative Dichotomiser,迭代二分器)决策树学习算法就是以「信息增益」为准则来选择划分属性。

案例:给出数据集D如下表(绿色文字是好瓜Y1,红色文字是坏瓜Y2)

西瓜数据集D
编号 色泽(A1) 根蒂(A2) 敲声(A3) 纹理(A4) 脐部(A5) 触感(A6) 是否好瓜(Y)
x1 青绿A_{1}^{1} 蜷缩A_{2}^{1} 浑浊A_{3}^{1} 清晰A_{4}^{1} 凹陷A_{5}^{1} 硬滑A_{6}^{1} 是Y1
x2 乌黑A_{1}^{2} 蜷缩A_{2}^{1} 沉闷A_{3}^{2} 清晰A_{4}^{1} 凹陷A_{5}^{1} 硬滑A_{6}^{1} 是Y1
x3 乌黑A_{1}^{2} 蜷缩A_{2}^{1} 浑浊A_{3}^{1}

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

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

相关文章

揭秘微服务架构:十大设计模式助力企业数字化转型

微服务架构中10个常用的设计模式 微服务是一种架构风格&#xff0c;它将一个复杂的应用拆分成多个独立自治的服务&#xff0c;每个服务负责应用程序中的一小部分功能。这些服务通过定义良好的API进行通信&#xff0c;通常是HTTP RESTful API或事件流。微服务架构的主要特点包括…

深入学习指针3

目录 前言 1.二级指针 2.指针数组 3.指针数组模拟二维数组 前言 Hello,小伙伴们我又来了&#xff0c;上期我们讲到了数组名的理解&#xff0c;指针与数组的关系等知识&#xff0c;那今天我们就继续深入到学习指针域数组的练联系&#xff0c;如果喜欢作者菌生产的内容还望不…

攻略:大学生三下乡投稿媒体网站和快速方法

作为当代大学生,不仅需要学习和掌握知识,更需要将所学知识运用到实践中,参与各种社会实践活动。其中,“三下乡”活动就是一个非常有意义的社会实践活动。三下乡社会实践活动新闻稿投稿网站有哪些?有哪些方式可以快速投稿呢&#xff1f;今天小编给大家一次讲个明白。 三下乡新…

C 语言中怎么产生真正的随机数?

在C语言中&#xff0c;要产生真正的随机数&#xff0c;我们通常使用标准库中的 <stdlib.h> 头文件中提供的随机数生成函数。 这些函数可以生成伪随机数&#xff0c;但它们在一定程度上是随机的&#xff0c;足以满足大多数应用程序的需求。 1. 伪随机数生成函数 C标准库…

【从零开始学架构 架构基础】架构设计的本质、历史背景和目的

本文是《从零开始学架构》的第一篇学习笔记&#xff0c;主要理解架构的设计的本质定义、历史背景以及目的。 架构设计的本质 分别从三组概念的区别来理解架构设计。 系统与子系统 什么是系统&#xff0c;系统泛指由一群有关联的个体组成&#xff0c;根据某种规则运作&#…

Java实现的网上书店系统(附带完整源码)

作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者 实现技术:JSP技术;javaBean;servlet;MySql数据库。 系统功能结构图 该系统为MVC结构,它的运行环境分客户端、应用服务器端和数据库服务器端三部分 书店系统需求分析: 通过…

Git泄露(续)

接上一篇补充 git config --global user.name " " git config --global user.email 邮箱地址 配置用户名和邮箱 git commit 使其处于交互区&#xff0c;没有使用 -m&#xff0c;默认用vim 来编辑和提交信息 输入要提交的内容&#xff0c;然后按ESC建回到命令…

Colab/PyTorch - 002 Pre Trained Models for Image Classification

Colab/PyTorch - 002 Pre Trained Models for Image Classification 1. 源由2. 图像分类的预训练模型3. 示例 - AlexNet/ResNet1013.1 模型推断过程3.2 使用TorchVision加载预训练网络3.3 使用AlexNet进行图像分类3.3.1 Step1&#xff1a;加载预训练模型3.3.2 Step2&#xff1a…

【系统架构师】-选择题(十二)计算机网络

1、网闸的作用&#xff1a;实现内网与互联网通信&#xff0c;但内网与互联网不是直连的 2、管理距离是指一种路由协议的路由可信度。15表示该路由信息比较可靠 管理距离越小&#xff0c;它的优先级就越高&#xff0c;也就是可信度越高。 0是最可信赖的&#xff0c;而255则意味…

减瘦误区、雷点、陷阱和挑战怎么应对

在减瘦过程中&#xff0c;很多肥胖人群都容易踩到坑。比如陷入误区&#xff0c;认为只有短期快速的减调方式方法&#xff0c;才值得尝试&#xff0c;而忽视身体健康&#xff1b;或是踩到雷点&#xff0c;轻信强速方剂或方法&#xff0c;结果身体产生了排斥或根本没效用白花钱&a…

RabbitMQ的用途

RabbitMQ主要有四个用途&#xff0c;分别是应用解耦、异步提速、削峰填谷、消息分发。详情讲解如下&#xff1a; RabbitMQ介绍、解耦、提速、削峰、分发 详解、RabbitMQ安装 可视化界面讲解 1.应用解耦&#xff1a;提高系统容错性和可维护性 2.异步提速&#xff1a;提升用户体验…

LabVIEW学习记录4-局部变量、全局变量、共享变量

【LabVIEW】局部变量、全局变量、共享变量 一、变量定义二、内存分配三、竞争状态四、变量创建及简单使用示例4.1 局部变量4.1.1 局部变量的创建4.1.2 局部变量的编程实例 4.2 全局变量4.2.1 创建4.2.2 调用4.2.3 编程实例 4.3 共享变量 一、变量定义 LabVIEW&#xff08;Labor…

怎么把图片改成1920*1080的?一键修改图片尺寸小技巧

一张合适尺寸的图片&#xff0c;不仅可以适应不同设备的屏幕尺寸&#xff0c;保证视觉效果的舒适和协调&#xff0c;还可以有效降低图片的存储空间占用&#xff0c;比如我们有时候想要把一张图片改成1920*1080尺寸的&#xff0c;该如何修改图片尺寸呢&#xff1f;其实可以使用图…

【ZZULI数据结构实验】压缩与解码的钥匙:赫夫曼编码应用

&#x1f4c3;博客主页&#xff1a; 小镇敲码人 &#x1f49a;代码仓库&#xff0c;欢迎访问 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f30f; 任尔江湖满血骨&#xff0c;我自踏雪寻梅香。 万千浮云遮碧…

虚拟化数据恢复—误还原虚拟机快照怎么办?怎么恢复最新虚拟机数据?

虚拟化技术原理是将硬件虚拟化给不同的虚拟机使用&#xff0c;利用虚拟化技术可以在一台物理机上安装多台虚拟机。误操作或者物理机器出现故障都会导致虚拟机不可用&#xff0c;虚拟机中的数据丢失。 虚拟化数据恢复环境&#xff1a; 有一台虚拟机是由物理机迁移到ESXI上面的&a…

继电器测试负载箱的常见故障和解决方法有哪些?

继电器测试负载箱是用于模拟各种电气负载的设备&#xff0c;广泛应用于继电器、接触器等电气元件的测试和校验。在使用过程中&#xff0c;可能会出现一些故障&#xff0c;影响测试的准确性和效率。以下是一些常见的故障及其解决方法&#xff1a; 电源问题&#xff1a;如果电源电…

FMEA助力医疗设备研发制造:领跑未来,实现弯道超车!

医疗设备作为保障人类健康的重要工具&#xff0c;其研发与制造水平直接关系到医疗技术的进步。然而&#xff0c;在激烈的市场竞争中&#xff0c;如何能够让自家医疗设备研发制造实现弯道超车&#xff0c;成为行业佼佼者&#xff1f;答案就在于——FMEA&#xff08;失效模式与影…

C语言中数组与指针的区别

一. 简介 本文学习了 C语言中数组与指针的区别。这样的话&#xff0c;可以在编写C代码时规避掉出错的问题。 二. C语言中数组与指针的区别 1. 数组 定义字符串数组时&#xff0c;必须让编译器知道需要多少空间。 一种方法是用足够空间的数组存储字符串。例如如下&#xf…

Spring MVC(三) 参数传递

1 Controller到View的参数传递 在Spring MVC中&#xff0c;把值从Controller传递到View共有5中操作方法&#xff0c;分别是。 使用HttpServletRequest或HttpSession。使用ModelAndView。使用Map集合使用Model使用ModelMap 使用HttpServletRequest或HttpSession传值 使用HttpSe…

GEE数据集——高分辨率全球树冠高度地图(1 米)Meta 公司

高分辨率 1 米全球树冠高度地图 简介 全球树冠高度地图数据集提供了对全球树冠高度的全面了解,有助于对森林生态系统、碳固存和气候变化减缓工作进行精确监测。该数据集由 Meta 和世界资源研究所合作开发,是了解森林结构和动态的基石。通过融合最先进的卫星图像和先进的人工…