机器学习西瓜书——基尼指数

CART决策树使用“基尼指数”(Gini index)来选择划分属性。书上并没有写出具体的例子供参考,这里给出一个例子。

首先先列出求取基尼指数所需要用的公式。

数据集D的纯度可用基尼值来度量。Gini(D)越小,则数据集D的纯度越高。(Pk指的是正例在总体中的比例)
在这里插入图片描述
属性a的基尼指数定义为:
在这里插入图片描述
求取得出属性a的基尼指数后,再求取其他属性的基尼指数,最后比较获得基尼指数最小的属性为最优划分属性,并继续求取次级最优划分属性,以此类推,直到排序完成。

本例子运用的数据是书上给出的西瓜数据集2.0
在这里插入图片描述
这是色泽属性的图示。
在这里插入图片描述
根据图示写出程序。

# 求取基尼值
def gini_index_single(a,b):
    single_gini = 1 - ((a/(a+b))**2) - ((b/(a+b))**2)
    return round(single_gini,4)

# 求取基尼指数
def gini_index(a,b,c,d,e,f):
    zuo = gini_index_single(a,b)
    zhong = gini_index_single(c,d)
    you = gini_index_single(e,f)
    sum = a+b+c+d+e+f
    gini_index = zuo*((a+b)/sum) + zhong*((c+d)/sum) + you*((e+f)/sum)
    return round(gini_index,4)

def gini_index2(a,b,c,d):
    zuo = gini_index_single(a,b)
    you = gini_index_single(c,d)
    sum = a+b+c+d
    gini_index2 = zuo*((a+b)/sum) + you*((c+d)/sum)
    return round(gini_index2,4)

依次求取色泽、根蒂、敲声、纹理、脐部、触感的基尼指数。如:
在这里插入图片描述
通过比较得出,纹理属性的基尼指数最小,为0.3046,为当前的最优划分属性。第一次分叉结束,接下来进行第二次分叉。(此时“纹理”属性不再作为候选划分属性。)

在这里插入图片描述
以图中第一个分支节点(纹理=“清晰”)为例,计算其他属性的基尼指数。
首先先计算该节点的纯度。(即基尼值)

def gini_index_single(a,b):
    single_gini = 1 - ((a/(a+b))**2) - ((b/(a+b))**2)
    return round(single_gini,4)
gini_index_single(7,2)

0.3457

此时再计算其他属性的基尼指数,纹理清晰的色泽、根蒂、敲声、脐部、触感的基尼指数分别为0.3333、0.1481、0.1852、0.1481、0.1481。“根蒂”、“脐部”、“触感”三个属性的基尼指数相等,且都比该节点的数值要小(0.3457<0.1481),所以该节点应当继续进行分叉。

此时我们选择使用属性“根蒂”继续进行分叉。当我们使用“蜷缩”属性进行计算时,由于该样本中纹理清晰且根蒂蜷缩的西瓜都是好瓜,所以该节点无法继续进行分叉。(即该节点基尼值为0,没有更小的基尼值了)

def gini_index_single(a,b):
    single_gini = 1 - ((a/(a+b))**2) - ((b/(a+b))**2)
    return round(single_gini,4)
gini_index_single(5,0)

0.0

我们换用另外一个节点“稍蜷”,发现可以继续进行分叉,继续分叉。

经过计算,最后得到的决策树如下:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值