机器学习西瓜书+南瓜书吃瓜教程学习笔记第四章决策树

2023-09-21 21:28:46

1、算法原理

从逻辑角度,一堆if else语句的组合
从集合角度,根据某种准则划分特征空间
最终目的:将样本越分越“纯”
决策树是基于树结构来进行决策的
例如,我们对“这是好瓜吗?”这样的问题进行决策时,通常会进行一系列的判断或“子决策”:我们先看“它是什么颜色?”,如果是“青绿色”,则我们再看“它的根蒂是什么形态?”,如果是“蜷缩”,我们再判断“它敲起来是什么声音?”,最后,我们得出最终决策:这是个好瓜,这个决策过程如图:
在这里插入图片描述
在这里插入图片描述

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

显然,决策过程是一个递归的过程其最终结论对应了我们所希望的判定结果,例如“是”或“不是”好瓜。
决策树学习的母的是为了产生一颗泛化能力强,即处理未见示例能力强,即处理未见示例能力强的决策树,其基本流程遵循简单且直观的“分而治之”策略。
在这里插入图片描述
信息熵(自信息的期望):度量随机变量X的不确定性,信息熵越大越不确定
H ( x ) = E [ I ( x ) ] = − ∑ x p ( x ) log ⁡ b p ( x ) H\left( x\right) =E\left[ I\left( x\right) \right] =-\sum _{x}p\left( x\right) \log _{b}p\left( x\right) H(x)=E[I(x)]=xp(x)logbp(x)
在这里插入图片描述
条件熵(Y的信息熵关于概率分布X的期望):在一直X后Y的不确定性
H ( Y ∣ X ) = ∑ x p ( x ) H ( Y ∣ X = x ) H\left( Y| X\right) =\sum _{x}p\left( x\right) H( Y| X= x) H(YX)=xp(x)H(YX=x)
在已知属性a的取值后,样本集合D的条件熵为:
∑ v = 1 ν ∣ D v ∣ ∣ D ∣ E n t ( D v ) \sum ^{\nu }_{v=1}\dfrac{\left| D^{v}\right| }{\left| D\right| }Ent\left( D^{v}\right) v=1νDDvEnt(Dv)
信息增益:在已知属性(特征)a的取值后y的不确定性减少的量,也即纯度的提升
G a i n ( D , a ) = E n t M − ∑ v = 1 v ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain\left( D,a\right) =EntM-\sum ^{v}_{v=1}\dfrac{\left| D^{v}\right| }{\left| D\right| }Ent\left( D^{v}\right) Gain(D,a)=EntMv=1vDDvEnt(Dv)
也就是信息熵(大)- 条件熵=信息增益
在这里插入图片描述
信息增益准则对可能取值数目较多的属性有所偏好(例如“编号”这个较为极端的例子,不过其本质原因不是取值数目过多,而是每个取值里面所包含的样本量太少),为减少这种偏好可能带来的不利影响,C4.5决策树选择使用“增益率”代替“信息增益”,增益率定义为
G a i n _ r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) Gain\_ ratio\left( D,a\right) =\dfrac{Gain\left( D,a\right) }{IV\left( a\right) } Gain_ratio(D,a)=IV(a)Gain(D,a)
其中
在这里插入图片描述
C4.5决策树并未完全使用“增益率”代替“信息增益”,而是采用一种启发式的方法:先选出信息增益高于平均水平的属性,然后再从中选择增益率最高的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三种算法的比较
ID3:倾向于选择水平数量较多的变量(偏向数值比较多的特征),可能导致训练得到一个庞大且
深度浅的树;另外输入变量必须是分类变量(连续变量必须离散化)。
C4.5在ID3的基础上选择了信息增益率替代信息增益,它更偏心于数量较少的变量(属性)。同
时,采用二分法来处理连续值的特征,但是生成树浅的问题还是存在,且只能处理分类问题。
CART以基尼系数替代熵,划分规则是最小化不纯度而不是最大化信息增益(率)。同时只允许生
成二叉树,增加树的深度,而且可以处理连续特征和回归问题。
scikit-learn实现的决策树更默认是CRAT决策树,即判断标准默认为基尼系数。也可以手动修改,
比如节点的划分标准也可以选择采用熵来划分。

更多推荐

JMeter 设置请求头信息的详细步骤

在使用JMeter的过程中,我们会遇到需要设置请求头信息的场景。比如:POST传过去的Body数据是json格式的。需要填添加头信息:Content-Type:application/json。在header中用token来传用户的认证信息。下面,来具体介绍下JMeter设置HTTP请求头的方法。1添加请求头右击HTT

Jmeter系列-并发线程Concurrency Thread Group的介绍(7)

简介ConcurrencyThreadGroup提供了用于配置多个线程计划的简化方法,该线程组目的是为了保持并发水平,意味着如果并发线程不够,则在运行线程中启动额外的线程ConcurrencyThreadGroup提供了更好的用户行为模拟,因为它使您可以更轻松地控制测试的时间,并创建替换线程以防线程在过程中完成现在安装

Jmeter系列-控制器Controllers的介绍(8)

Controllers简介JMeter是一款功能强大的性能测试工具,而控制器是JMeter中非常重要的一个组件。控制器用于控制测试计划的执行流程,可以根据需求来控制线程的启动、停止、循环等操作。Jmeter有两种类型的控制器:Samplers(取样器)和LogicalControllers(逻辑控制器);它们驱动着测试

Jmeter —— 常用的几种断言方法(基本用法)

在使用JMeter进行性能测试或者接口自动化测试工作中,经常会用到的一个功能,就是断言,断言相当于检查点,它是用来判断系统返回的响应结果是否正确,以此帮我们判断测试是否通过,本文主要介绍几种常用的断言:响应断言、JSON断言、BeanShell断言一、响应断言1.响应断言是最常用的一种断言方法,它可以对各种返回类型的结

四、数学建模之图与网络模型

1.定义2.例题及软件代码求解一、定义1.图和网络是相关概念(1)图(Graph):图是数学和计算机科学中的一个抽象概念,它由一组节点(顶点)和连接这些节点的边组成。图可以是有向的(有方向的,边有箭头表示方向)或无向的(没有方向的,边没有箭头表示方向)。图用于表示各种关系,如社交网络、电路、地图、组织结构等。(2)网络

leetcode做题笔记147. 对链表进行插入排序

给定单个链表的头head,使用插入排序对链表进行排序,并返回排序后链表的头。插入排序算法的步骤:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。下面是插入排序算法的

免费可源可商用的BI工具对比(支持Doris 数据库)

目前市面上有很多开源的BI工具可供选择,以下是几个免费、开源且可以商用的BI工具,并且支持和Doris数据库结合使用:Superset:由Airbnb发起的开源BI工具,带有可视化和交互式仪表盘功能。Superset支持多种数据源,其中包括Doris数据库。Metabase:一个简单易用的BI工具,支持数据可视化和SQ

全链路自动化测试

背景从SOA架构到现在大行其道的微服务架构,系统越拆越小,整体架构的复杂度也是直线上升,我们一直老生常谈的微服务架构下的技术难点及解决方案也日渐成熟(包括典型的数据一致性,系统调用带来的一致性问题,还是跨节点跨机房复制带来的一致性问题都有了很多解决方案),但是有一个环节我们明显忽略了。在现在的微服务架构趋势下,微服务在

陆拾捌- 如何通过数据影响决策(三)

一、如何正确的引导别人?引导与误导的区别是什么?看下面这广告图单看上面大字的结果,感觉好像真的使用过的人均觉得有好处可如果我们看下面的细字对111位连续14天食用(本产品)的燕麦片非重度使用者所做调研…从理性上来说,如果一个人觉得没用处,还会连续食用14天吗?所以这里用的一个技巧就是,从数据中各个维度深挖,然后把最有利

【C# 基础精讲】构造函数和析构函数

构造函数(Constructor)和析构函数(Destructor)是面向对象编程中的两个重要概念,它们分别用于在对象创建和销毁的时候执行特定的操作。这两个函数在C#以及其他面向对象编程语言中都具有重要的作用,用于初始化对象的状态、分配资源,以及在对象被销毁时释放资源。在本文中,我们将详细探讨构造函数和析构函数的概念、

Java乐观锁的实现

乐观锁是一种用于解决并发冲突的机制,它基于假设在大多数情况下没有并发冲突的原则。与悲观锁不同,乐观锁不会对数据加锁,而是通过一定的方式来检测并处理并发冲突。在实现乐观锁时,通常会使用版本号或时间戳作为标识。当多个线程同时访问同一个数据时,每个线程都会读取到数据的当前版本号或时间戳。在更新数据时,线程会比较当前的版本号或

热文推荐