Measure for evaluating the goodness of a test(二)| 学习笔记

简介: 快速学习 Measure for evaluating the goodness of a test。

开发者学堂课程【高校精品课-北京理工大学-数据仓库与数据挖掘(上):Measure for evaluating the goodness of a test(二)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/921/detail/15643


Measure for evaluating the goodness of a test(二)

二、信息增益率

解决大量属性取值的问题,就需要对信息增益做一个规范化,也就是要把它进行一些处理。信息增益率也就是Gain ratio 其实就是对信息增益改进得到的,可以把它认为是经过规范化后的信息增益。

图片13.png

1.增益率公式

信息增益率 Gain ratio 在理解了信息增益之后来理解就比较简单,下面是信息增益率的计算公式,

图片14.png

就是用信息增益除以 split info(A)。split info(A)其实就是属性 a 熵,如果一个属性的取值越多,它可能得到的信息增益 a 越大,但同理它的熵也会比较大。所以用信息增益 a 除以 split info(A),就可以对信息a的信息增益做一个规范化。

2.在信息增益率的条件下,选择属性测试条件。就是选择具有最大信息增益率的属性测试条件作为属性测试条件。

举一个例子,比如刚才计算 income,可以得到它的一个属性的增益度是0.029,再计算 incom的属性的熵=1.557,用这个信息增益度除以属性的熵,就得到了属性的信息增益率。

图片15.png

3.对于信息增益率,主要是用在经典算法 C4.5 中

4.下面是使用信息增益率进行属性测试条件选择的例子。

(1)、使用如图的一个训练级,依然是有14个记录,其中有三个属性,还有一个类别,对于类别来说,它是有两种取值情况,其中一种取值情况是有九个,另外一种是有五个。所以可以首先计算类别的熵,也就是 info(T)。

图片16.png 

(2)、在计算 info(T)之后,可以计算每一个属性的条件熵,这种计算方法,和信息增益的中条件熵的计算方法是一样的。可以计算属性天气的条件熵,温度的条件熵,湿度的条件熵和风速的条件熵。

图片17.png

图片18.png

(3)、然后,如果要使用信息增益率的话,还需要计算每一个属性的熵,也就是 split info,天气的熵,温度的熵,湿度的熵和风速的熵,

图片19.png

图片20.png

(4)、完成所有这些计算之后,就可以计算信息增益率。和上一个的例子类似,用 info(T)减去各个属性的条件熵可以得到各个属性的信息增益,然后再利用每一个属性的信息增益除以每一个属性的熵,就可以得到每一个属性的信息增益率。

图片21.png

(5)、比如得到了四个属性的信息增益率,那么,发现天气属性具有最大的信息增益率。所以首先就会选择属性天气作为属性测试条件,根据天气的取值,因为天气属性是一个标称属性,它有三种取值情况,根据测试属性,就可以把原来的一个训练集14个数据对象分成了三个比较小的子集,然后在每一个子集上再迭代刚才的步骤,那么一直可以就完成决策树的构建。

 

图片22.png

这就是使用信息增益率来选择属性测试条件。

 

三、基尼指标

基尼指标,它主要是用在决策树经典算法 CART 上,CART 是一种二叉树,也就是在 CART 算法中构建的决策树模型是二叉树的类型。

1. 基尼指标的定义

对于一个数据集D来说,如果它包含了数据对象是有N个类别。它的每一个类别的概率是 pi,就可以利用一个公式去计算数据集的基尼指标。很显然,当基尼指标越大,就说明类别不确定性的纯度越不纯,不确定性越高。

图片23.png

2.基尼指数计算

(1)、基尼指数。在基尼指数中,假设通过一个属性a将数据集划分成为了第一和第二两个步骤,就可以计算DVN条件下 D 的基尼指标,这和条件熵的含义很类似,就是相当于在知道了属性 a 的情况下的一个基尼的值是多少。

图片24.png 

(2)、基尼指数变化量。然后再计算基尼的变化量,也就是△gini。△gini 的计算公式和信息增益的计算公式很类似,值越大,就表明属性a对识别类标签贡献越大。

图片25.png 

因为如果想要一个值越大,就希望 ginia(D)指标越小。所以可以选择聚焦比较小的一个 ginia(D 的指标,作为属性测试条件的选择。

图片26.png

3.基尼指数属性测试例子

比如一个节点 B,可以将数据集划分为两个节点,Node1 和 Node2,(1)、计算基尼指标。首先,对于负节点B来说,它一共有12个数据对象,七个类别为 C1,五个类别为 C2,可以计算它的基尼指标是0.486。对于节点一来说也可以计算它的基尼指标,对于节点二来说也可以计算它的基尼指标。

(2)、然后再考虑每一个节点的权重,也就是数据对象的个数,就可以得到一个属性条件的基尼指标,然后再相减,就可以得到属性对识别类的贡献,这时候把它称之为一个基尼的贡献率,得到是0.125。值越大,也就是属性测试条件选择的就越好。

图片27.png 

(3)、在利用基尼指数进行属性测试条件选择的时候也可以实现两种划分,对于类别属性,如果取值是离散的,可以根据它的值实现多路划分,也可以对它的值进行一些处理,分为两类,实现二路划分。

比如例子中,把它的 car type 可以划分为两个部分实现。的 car type 可以划分为两个部分,实现二路划分。

图片28.png 

(4)、但是,在计算的过程中如果使用这种多路划分,属性的基尼指标会更好。为什么?主要就是二路划分其实是合并了多路划分中的若干划分,因此用二路划分的节点不纯度肯定会增加。

这个就是在基尼指标计算中,它的多路划分和二路划分的情况。

4.基尼指数处理面临连续属性及例子

基尼指数在面临连续属性的时候是怎么去处理的?

(1)、可以去选择一个比较好的分裂值。根据这个分裂值进行分裂属性,把它划分为两个部分。

这个过程和信息增益中对连续属性的处理方法是一样的,也就是选择一个比较好的分裂值V,将属性a分裂成a小于等于V和这个a大于V两部分,一般会去产生多个候选点,然后对每一个候选点,分别计算它的基尼指标,然后去选择具有最好的经营指标的属性,作为属性测试条件。

图片29.png 

(2)、减少候选分裂点。在计算过程中,连续属性如果取值比较多的话,候选分列点会有很多,会进行大量的计算。在计算候选分裂点的时候,其实是有一个小技巧,可以减少候选分裂点的,这里下图的一个属性为例,

图片30.png 

对于这样的一个属性,首先对它进行排序,之后把每一个属性值所对应的一个类标记也把它列出来,那么会发现前三个属性的类标记是一样的,所以分裂点肯定不会在前三个中产生,一定是在属性标记发生变化的地方产生。

那么发生变化的值是75和85,所以取它们的平均值80就是一个候选分裂点。同理,再向后面观察,那么后面连续两个属性,它的这样的一个取值的对应的标签都是 yes,所以分裂点也不会在这两个取中产生。再向后,那么有一个yes,有一个no,这个地方就会出现一个变化,也就是95和100之间肯定会产生一个候选分裂点,取它的平均值可以是97,再向后,所有属性取值的类标签都是一致的,所以,不可能再有候选点产生,也就是通过这样的一个技巧,得到的候选点就只有两个,这两个刚好就是位于类标签变化的这样区间。

这个就是介绍在处理连续属性的时候,怎么样去减少候选分裂点。

 

四、三种指标比较

最后对三个用于选择属性测试条件的指标进行一个比较。

1. 信息增益

对于信息争议来说,它的缺点是会倾向于去选择取值比较多的属性,

2. Gain radio

也就是信息增益率,它克服了信息增益的这个缺点。就是通过除以了每一个属性的熵,来对缺陷进行纠正,所以对于Gain radio 来说就没有这样的一个缺点,但是,它又有一个新的缺陷,就是 Gain radio 很容易产生不平衡的分裂,什么是不平衡的分裂?不平衡的分裂就指的是,通过某个属性测试条件,将数据集分为若干个子集,这些子集的规模差异性比较大,有一些子集可能含的数据对象的数目会非常非常多,有一些子集可能包含的数据对象的数目会非常少。

3. 基尼指标

基尼指标和信息增益的计算方式是非常非常像的,所以,它也具有和信息增益一样的缺陷,也就是基尼指标也会倾向于去选择取值比较多的属性。但是,它的一个好处是基尼指标产生的一个分裂是比较平衡的,也就是说,它产生的各个子集的大小是差不多一样的,是比较均衡的。

相关文章
|
6月前
|
缓存 负载均衡 应用服务中间件
uWSGI的配置及使用
uWSGI是一个功能强大的Web服务器和应用服务器,主要用于实现Python Web应用与Web服务器之间的通信。它遵循WSGI(Web Server Gateway Interface)规范,作为桥梁连接Web服务器(如Nginx)与Python应用(如Django、Flask)。相比开发环境中的简易服务器(如Django的runserver或Flask的Werkzeug),uWSGI在生产环境中具备更强的并发处理能力和更多高级特性,例如负载均衡、缓存等。通过支持多种启动方式(命令行或配置文件)及丰富参数配置,uWSGI可灵活部署于实际项目中,满足高性能需求。
748 4
|
2月前
|
人工智能 运维 安全
唯一! 阿里云专有云全维度满分
近日,国际数据公司IDC发布《中国专有云运营平台技术能力评估,2025》,阿里云是唯一在七个维度全部获得满分的厂商,体现了飞天企业版全面领先的技术实力与产品先进性。
152 0
|
3月前
|
传感器 人工智能 安全
物联网
万物互联,智启未来。物联网通过连接人、物、环境,重塑生活、城市与产业。从智能家居到智慧城市,从工业互联网到精准农业,数据驱动智能化变革。融合AI、5G等技术,构建高效、安全、可持续的智能世界,开启人类社会新篇章。(238字)
ModuleNotFoundError: No module named ‘openai.error‘
这篇文章讨论了在使用OpenAI库时遇到的`ModuleNotFoundError: No module named ‘openai.error'`错误,并提供了两种解决方案:将OpenAI版本降级到0.28.0或修改代码以去掉对`openai.error`的引用并将异常处理放置到`openai`模块下。
ModuleNotFoundError: No module named ‘openai.error‘
|
8月前
|
SQL Oracle 数据库
这款免费数据库工具,可能是YashanDB图形化管理的最佳选择
DBeaver for YashanDB 是一款专为国产自研数据库 YashanDB 定制的图形化管理工具,基于全球流行的开源数据库工具 DBeaver 二次开发而成。它深度适配 YashanDB 的各种架构,支持 HEAP/LSC 多形态表管理和 Oracle 生态兼容,提供高效的对象管理、智能 SQL 开发和工业级 PL/SQL 调试功能。通过可视化操作,开发者可轻松完成物化视图配置、存储过程管理等复杂任务,大幅提升效率。该工具完全免费,支持多平台,为企业级数据库管理提供了成熟解决方案。
|
Ubuntu 开发工具 git
Ubuntu安装homebrew的完整教程
本文介绍了如何在没有公网的情况下安装 Homebrew。首先访问 Homebrew 官网,然后通过阿里云的镜像克隆安装脚本,并创建普通用户进行安装。接着修改 `install.sh` 文件指向国内镜像,执行安装命令。最后配置环境变量并更换 Homebrew 源为国内镜像,确保安装顺利。
2462 50
|
机器学习/深度学习 安全 算法
安全多方计算之三:同态加密
安全多方计算之三:同态加密
2727 42
|
Python
pip 安装 openai 异常【已解决】
pip 安装 openai 异常【已解决】
906 0
|
Python
Python教程:Python中的输入与输出操作
在编程语言中,输入(Input)和输出(Output),简称I/O,是基础且重要的概念。Python作为一门易于学习且功能强大的编程语言,在处理输入和输出方面提供了多种方式。本文将深入探讨Python中的输入输出操作,包括标准输入输出、文件操作、以及网络I/O等领域
877 4
|
存储 应用服务中间件 nginx
【各种问题处理】nginx报错nginx: [error] open() “/run/nginx.pid” failed (2: No such file or directory)
【1月更文挑战第13天】【各种问题处理】nginx报错nginx: [error] open() “/run/nginx.pid” failed (2: No such file or directory)