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

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

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}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue3组件库开发项目实战——03封装Button组件/输出vitePress文档

Vue3组件库开发项目实战——01组件开发必备知识导学-CSDN博客 Vue3组件库开发项目实战——02项目搭建&#xff08;配置Eslint/Prettier/Sass/Tailwind CSS/VitePress/Vitest&#xff09;-CSDN博客 在前面两篇博客中&#xff0c;我分别介绍了组件库开发必学知识&#xff0c;以及…

什么是ThreadLocal

1. 什么是ThreadLocal ThreadLocal 为每一个线程提供独立的局部变量&#xff0c;每个线程都拥有该变量的一个独立副本。 每个Thread里面都有一个ThrealLocal.ThreadLocalMap结构&#xff0c;里面由Entry数组组成。key是ThrealLocal&#xff0c;value是我们存的Object&#xff…

定期更新与维护:技术与生活的同步律动

在这个数字化时代&#xff0c;科技的温暖之光照进了盲人朋友们的日常生活中&#xff0c;特别是那些辅助出行的应用程序&#xff0c;它们如同贴心的向导&#xff0c;引领着用户穿越城市的喧嚣与宁静。然而&#xff0c;要确保这些应用始终能够高效、安全地服务于盲人用户&#xf…

人工智能与机器学习的演进:重塑IT行业的未来

目录 前言一、人工智能与机器学习的最新发展1、算法和硬件的进步2、AI & ML的民主化 二、AI & ML在自动化中的应用1、工业与服务业自动化1.1 实践方式1.2 伪代码样例 2、软件开发与运维自动化2.1实践方式2.2伪代码样例 三、AI & ML在个性化服务中的应用1、推荐系统…

node和npm版本太高导致项目无法正常安装依赖以及正常运行的解决办法:如何使用nvm对node和npm版本进行切换和管理

1&#xff0c;点击下载 nvm 并且安装 进入nvm的github&#xff1a; GitHub - coreybutler/nvm-windows: A node.js version management utility for Windows. Ironically written in Go. 这里下载发行版&#xff0c;Releases coreybutler/nvm-windows GitHub 找到 这个 nv…

React useEffect Hook: 理解和解决组件双重渲染问题

在React中&#xff0c;useEffect可能会在组件的每次渲染后运行&#xff0c;这取决于它的依赖项。如果你发现useEffect运行了两次&#xff0c;并且你正在使用React 18或更高版本的严格模式&#xff08;Strict Mode&#xff09;&#xff0c;这可能是因为在开发模式下&#xff0c;…

ros大车学习2024.3.28-2024.5.14小结(1)

ros一键安装推荐wget http://fishros.com/install -O fishros && . fishros (原本的资料的是melodic的&#xff0c;因为资料里面的镜像是ubuntu18.04的&#xff0c;而我用的是鲁班猫sk3566,ubuntu20.04&#xff0c;镜像来源于野火官网)首先获取新noetic源码2024.5.13从…

【YOLOV5 入门】——Gradio搭建Web GUI

引入&#xff1a;上节搭建的UI可视化界面只能以运行程序弹出窗口的形式运行&#xff0c;不能在网页Web中使用&#xff0c;本次代码将会非常少&#xff01; 一、Gradio简介与安装 Gradio 是一个用于构建机器学习模型演示界面和Web应用的开源库。提供了简单易用的界面&#xff0…

小红书自动私信获客,打造个人品牌

在当今这个内容为王、社交至上的时代&#xff0c;小红书作为新兴的社交电商平台&#xff0c;凭借其独特的社区氛围和强大的种草能力&#xff0c;成为了众多KOL、商家以及个人品牌打造的首选平台。想要在小红书上脱颖而出&#xff0c;精准引流获客&#xff0c;利用自动私信功能不…

在做题中学习(59):除自身以为数组的乘积

238. 除自身以外数组的乘积 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a;前缀积和后缀积 思路&#xff1a;answer中的每一个元素都是除自己以外所有元素的和。那就处理一个前缀积数组和后缀积数组。 而前缀积(f[i])是&#xff1a;[0,i-1]所有元素的乘积 后缀…

汇昌联信科技:拼多多电商的运营流程有哪些?

在当今互联网高速发展的时代&#xff0c;电商平台层出不穷&#xff0c;其中拼多多以其独特的团购模式和低价策略迅速崛起&#xff0c;成为众多消费者和商家的新宠。那么&#xff0c;拼多多电商的运营流程究竟包含哪些环节呢?接下来&#xff0c;我们将从商品上架、营销推广、订…

超级漂亮的 Ai 官网源码

超级漂亮的 AI 官网源码 效果图部分源码领取源码下期更新预报 效果图 部分源码 <script lang"js">function project3D(x, y, z, vars) {var p, dx - vars.camXy - vars.camY - 8z - vars.camZp Math.atan2(x, z)d Math.sqrt(x * x z * z)x Math.sin(p - v…

【强训笔记】day17

NO.1 思路&#xff1a;用一个字符串实现&#xff0c;stoi函数可以转化为数字并且去除前导0。 代码实现&#xff1a; #include <iostream> #include<string> using namespace std;string s;int main() {cin>>s;for(int i0;i<s.size();i){if(s[i]%20) s[…

Linux的命名管道 共享内存

目录 命名管道 mkfifo函数 unlink函数 命名管道类 服务端 客户端 共享内存 shmget函数 ftok函数 key和shmid的区别 snprintf函数 ipcs指令 ipcrm指令 shmctl函数 shmat函数 void*做返回值 创建共享内存空间 服务端 客户端 命名管道 基本概念&#xff1…

0509BBQ的Maven项目

0509BBQ的Maven项目包-CSDN博客 数据库字段 登录界面 点餐主页 登录完成进入点餐主页&#xff0c;显示已点餐的数据 点击点餐按钮&#xff0c;生成对应订单数据。 取消勾选点餐按钮&#xff0c;删除对应订单数据。 点击加减图片&#xff0c;实现对数量的加减 展示订单 ajax动态…

供水设备数据采集

随着城市化进程的加快&#xff0c;供水系统作为城市基础设施的重要组成部分&#xff0c;其运行效率和稳定性直接关系到市民的日常生活。在这个信息化、智能化的时代&#xff0c;如何利用先进技术提升供水系统的管理水平&#xff0c;成为了摆在我们面前的重要课题。HiWoo Cloud平…

c++——类和对象(中)

1.类的六个默认成员函数 在一个空类中真的什么都没有吗&#xff0c;错&#xff01;在创建类的时候&#xff0c;编译器自动生成六个函数&#xff0c;这六个函数叫默认成员函数。但是&#xff0c;如果我们自己实现六个同名函数&#xff08;依旧有默认成员函数的特性&#xff0c;…

内容安全(DPI和DFI解析)

内容安全前言&#xff1a; 防火墙的本质其实就是包过滤&#xff0c;我们通常所说的安全设备&#xff08;如&#xff1a;IPS、IDS、AV、WAF&#xff09;的检测重心是应用层。下一代防火墙基于传统防火墙的拓展能力&#xff0c;就是可以将以上的安全设备模块集成在一起&#xff0…

2024国考行测、申论资料大全,做好备考真的很重要!

1. 国考是什么? 国考,全称国家公务员考试,是选拔国家公务员的重要途径。通过国考,你将有机会进入政府部门,为国家建设贡献力量。 2. 国考难在哪里? 国考之所以难,主要体现在以下几个方面: (1) 竞争激烈 每年国考报名人数都在百万以上,而录取率却不足2%。千军万马过独木桥…

【java-数据结构15-模拟实现栈的方法】

上篇文章中&#xff0c;我们已经手动实现了栈&#xff0c;下面&#xff0c;我们将继续手动实现栈的方法~ 1.在栈中存放元素 1.定义一个usedsize&#xff0c;用来临时存放下标 2.当存放一个元素后&#xff0c;下标加一 3.不要忘记判满 如图 代码如下 判满方法 public boolea…