开发者学堂课程【高校精品课-北京理工大学-数据仓库与数据挖掘(上):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 其实就是对信息增益改进得到的,可以把它认为是经过规范化后的信息增益。
1.增益率公式
信息增益率 Gain ratio 在理解了信息增益之后来理解就比较简单,下面是信息增益率的计算公式,
就是用信息增益除以 split info(A)。split info(A)其实就是属性 a 熵,如果一个属性的取值越多,它可能得到的信息增益 a 越大,但同理它的熵也会比较大。所以用信息增益 a 除以 split info(A),就可以对信息a的信息增益做一个规范化。
2.在信息增益率的条件下,选择属性测试条件。就是选择具有最大信息增益率的属性测试条件作为属性测试条件。
举一个例子,比如刚才计算 income,可以得到它的一个属性的增益度是0.029,再计算 incom的属性的熵=1.557,用这个信息增益度除以属性的熵,就得到了属性的信息增益率。
3.对于信息增益率,主要是用在经典算法 C4.5 中
4.下面是使用信息增益率进行属性测试条件选择的例子。
(1)、使用如图的一个训练级,依然是有14个记录,其中有三个属性,还有一个类别,对于类别来说,它是有两种取值情况,其中一种取值情况是有九个,另外一种是有五个。所以可以首先计算类别的熵,也就是 info(T)。
(2)、在计算 info(T)之后,可以计算每一个属性的条件熵,这种计算方法,和信息增益的中条件熵的计算方法是一样的。可以计算属性天气的条件熵,温度的条件熵,湿度的条件熵和风速的条件熵。
(3)、然后,如果要使用信息增益率的话,还需要计算每一个属性的熵,也就是 split info,天气的熵,温度的熵,湿度的熵和风速的熵,
(4)、完成所有这些计算之后,就可以计算信息增益率。和上一个的例子类似,用 info(T)减去各个属性的条件熵可以得到各个属性的信息增益,然后再利用每一个属性的信息增益除以每一个属性的熵,就可以得到每一个属性的信息增益率。
(5)、比如得到了四个属性的信息增益率,那么,发现天气属性具有最大的信息增益率。所以首先就会选择属性天气作为属性测试条件,根据天气的取值,因为天气属性是一个标称属性,它有三种取值情况,根据测试属性,就可以把原来的一个训练集14个数据对象分成了三个比较小的子集,然后在每一个子集上再迭代刚才的步骤,那么一直可以就完成决策树的构建。
这就是使用信息增益率来选择属性测试条件。
三、基尼指标
基尼指标,它主要是用在决策树经典算法 CART 上,CART 是一种二叉树,也就是在 CART 算法中构建的决策树模型是二叉树的类型。
1. 基尼指标的定义
对于一个数据集D来说,如果它包含了数据对象是有N个类别。它的每一个类别的概率是 pi,就可以利用一个公式去计算数据集的基尼指标。很显然,当基尼指标越大,就说明类别不确定性的纯度越不纯,不确定性越高。
2.基尼指数计算
(1)、基尼指数。在基尼指数中,假设通过一个属性a将数据集划分成为了第一和第二两个步骤,就可以计算DVN条件下 D 的基尼指标,这和条件熵的含义很类似,就是相当于在知道了属性 a 的情况下的一个基尼的值是多少。
(2)、基尼指数变化量。然后再计算基尼的变化量,也就是△gini。△gini 的计算公式和信息增益的计算公式很类似,值越大,就表明属性a对识别类标签贡献越大。
因为如果想要一个值越大,就希望 ginia(D)指标越小。所以可以选择聚焦比较小的一个 ginia(D 的指标,作为属性测试条件的选择。
3.基尼指数属性测试例子
比如一个节点 B,可以将数据集划分为两个节点,Node1 和 Node2,(1)、计算基尼指标。首先,对于负节点B来说,它一共有12个数据对象,七个类别为 C1,五个类别为 C2,可以计算它的基尼指标是0.486。对于节点一来说也可以计算它的基尼指标,对于节点二来说也可以计算它的基尼指标。
(2)、然后再考虑每一个节点的权重,也就是数据对象的个数,就可以得到一个属性条件的基尼指标,然后再相减,就可以得到属性对识别类的贡献,这时候把它称之为一个基尼的贡献率,得到是0.125。值越大,也就是属性测试条件选择的就越好。
(3)、在利用基尼指数进行属性测试条件选择的时候也可以实现两种划分,对于类别属性,如果取值是离散的,可以根据它的值实现多路划分,也可以对它的值进行一些处理,分为两类,实现二路划分。
比如例子中,把它的 car type 可以划分为两个部分实现。的 car type 可以划分为两个部分,实现二路划分。
(4)、但是,在计算的过程中如果使用这种多路划分,属性的基尼指标会更好。为什么?主要就是二路划分其实是合并了多路划分中的若干划分,因此用二路划分的节点不纯度肯定会增加。
这个就是在基尼指标计算中,它的多路划分和二路划分的情况。
4.基尼指数处理面临连续属性及例子
基尼指数在面临连续属性的时候是怎么去处理的?
(1)、可以去选择一个比较好的分裂值。根据这个分裂值进行分裂属性,把它划分为两个部分。
这个过程和信息增益中对连续属性的处理方法是一样的,也就是选择一个比较好的分裂值V,将属性a分裂成a小于等于V和这个a大于V两部分,一般会去产生多个候选点,然后对每一个候选点,分别计算它的基尼指标,然后去选择具有最好的经营指标的属性,作为属性测试条件。
(2)、减少候选分裂点。在计算过程中,连续属性如果取值比较多的话,候选分列点会有很多,会进行大量的计算。在计算候选分裂点的时候,其实是有一个小技巧,可以减少候选分裂点的,这里下图的一个属性为例,
对于这样的一个属性,首先对它进行排序,之后把每一个属性值所对应的一个类标记也把它列出来,那么会发现前三个属性的类标记是一样的,所以分裂点肯定不会在前三个中产生,一定是在属性标记发生变化的地方产生。
那么发生变化的值是75和85,所以取它们的平均值80就是一个候选分裂点。同理,再向后面观察,那么后面连续两个属性,它的这样的一个取值的对应的标签都是 yes,所以分裂点也不会在这两个取中产生。再向后,那么有一个yes,有一个no,这个地方就会出现一个变化,也就是95和100之间肯定会产生一个候选分裂点,取它的平均值可以是97,再向后,所有属性取值的类标签都是一致的,所以,不可能再有候选点产生,也就是通过这样的一个技巧,得到的候选点就只有两个,这两个刚好就是位于类标签变化的这样区间。
这个就是介绍在处理连续属性的时候,怎么样去减少候选分裂点。
四、三种指标比较
最后对三个用于选择属性测试条件的指标进行一个比较。
1. 信息增益
对于信息争议来说,它的缺点是会倾向于去选择取值比较多的属性,
2. Gain radio
也就是信息增益率,它克服了信息增益的这个缺点。就是通过除以了每一个属性的熵,来对缺陷进行纠正,所以对于Gain radio 来说就没有这样的一个缺点,但是,它又有一个新的缺陷,就是 Gain radio 很容易产生不平衡的分裂,什么是不平衡的分裂?不平衡的分裂就指的是,通过某个属性测试条件,将数据集分为若干个子集,这些子集的规模差异性比较大,有一些子集可能含的数据对象的数目会非常非常多,有一些子集可能包含的数据对象的数目会非常少。
3. 基尼指标
基尼指标和信息增益的计算方式是非常非常像的,所以,它也具有和信息增益一样的缺陷,也就是基尼指标也会倾向于去选择取值比较多的属性。但是,它的一个好处是基尼指标产生的一个分裂是比较平衡的,也就是说,它产生的各个子集的大小是差不多一样的,是比较均衡的。

















