【西瓜书阅读笔记】04决策树 第一部分

本文介绍了决策树的基本流程,重点讲解了信息熵、信息增益、增益率和基尼指数的概念及其在决策树划分过程中的应用。通过实例展示了如何计算这些指标,并用于选择最优划分属性。最后提到了信息增益可能对多值属性的偏好以及如何通过增益率来平衡这一问题。

第四章 决策树

1 基本流程

请添加图片描述

2 划分选择

随着划分过程不断进行,我们希望决策树的分支节点所包含的样本尽可能属于同一类别,即结点的“纯度”(purity)越来越高。

2.1 信息增益

2.1.1 什么是信息熵

https://www.zhihu.com/question/22178202

什么是熵:一种事物的不确定性。

信息:消除不确定性的事物。

信息的功能:调整概率;排除干扰;确定情况(比如卖瓜的人说了一句,包熟包甜)。

噪音:不能消除某人对某件事情不确定性的事物。

数据 = 信息 + 噪音

2.1.2 熵如何量化——等概率

参照某个不确定事件作为单位,如抛一次硬币记为1bit。

如8个等概率的不确定情况,相当于抛3次硬币,即2^3个可能情况,熵为3bit。

如10个等概率的不确定情况,相当于抛log10次硬币,即2^log10个可能情况,熵为log10bit,该对数以2为底。

2.1.3 熵如何量化——概率不等

计算公式:
请添加图片描述

2.1.4 信息如何量化

得知信息前后,熵的差额。

请添加图片描述

信息前熵:log4 = 2

信息后熵:31/6log6 + 1/2*log2

2.1.5 小结

请添加图片描述

2.1.6 例子

请添加图片描述

#计算色泽属性的信息增益
import numpy as np

#根据好坏瓜比例计算根结点信息熵
Good = 8
Bad = 9
Total = 17
EntD = - 8/17 * np.log2(8/17) - 9/17 * np.log2(9/17)

#计算色泽的信息
#计算各色瓜中,好坏瓜的数量
Green_good = 3
Green_bad = 3
Black_good = 4
Black_bad = 2
White_good = 1 
White_bad = 4

#计算各色瓜中,好坏瓜出现概率
P_Green_good = 3/6
P_Green_bad = 3/6
P_Green = 6/17

P_Black_good = 4/6
P_Black_bad = 2/6
P_Black = 6/17

P_White_good = 1 /5
P_White_bad = 4/5
P_White = 5/17

#计算色泽各分支节点的信息熵
EntD_Green = -P_Green_good*np.log2(P_Green_good) -P_Green_bad*np.log2(P_Green_bad)
EntD_White = -P_White_good*np.log2(P_White_good) -P_White_bad*np.log2(P_White_bad)
EntD_Black = -P_Black_good*np.log2(P_Black_good) -P_Black_bad*np.log2(P_Black_bad)

#加权得色泽属性的信息熵
EntD_color = P_Green*EntD_Green + P_White*EntD_White + P_Black*EntD_Black

#相减得色泽属性的信息增益
Gain = EntD - EntD_color
Gain
0.10812516526536531

根据上述类似的做法,计算得不同属性得信息增益。

请添加图片描述

根据信息增益最大的属性—纹理,对根节点进行划分

请添加图片描述

基于已知纹理类别,计算各属性的信息增益,得到决策树。

请添加图片描述

2.2 增益率

信息增益准则对可取值数目较多的属性有所偏好。

为解决该问题,Quinlan(1993)使用增益率(gain ratio)选择最优划分属性,定义如下:

请添加图片描述

先从候选划分属性中找出信息增益高于平均水平属性,再从中选择增益率最高的属性划分决策数。

2.3 基尼指数

2.3.1 分类树:基尼指数最小准则。

数据集基尼指数:

请添加图片描述

属性基尼指数:

请添加图片描述

例子
请添加图片描述

#数据集基尼指数:两分叉为例

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

print(gini_index_single(105,39),gini_index_single(130,14))

#由此可见,纯度越高,基尼指数越小
0.3949652777777779 0.17554012345679013
#属性基尼指数:数据集的加权

def gini_index(a, b, c, d):
    zuo = gini_index_single(a,b)
    you = gini_index_single(c,d)
    gini_index = zuo*((a+b)/(a+b+c+d)) + you*((c+d)/(a+b+c+d))
    return gini_index

gini_index(105, 39, 34, 125)
0.36413900824044665
gini_index(37, 127, 100, 33)
0.3600300949466547
gini_index(92, 31, 45, 129)
0.38080175646758213

选择基尼指数最小的属性做第一次分叉,即good blood circulation

请添加图片描述

继续进行第二次分叉

gini_index_single(37,127)
0.3494199881023201
gini_index(13, 98, 24, 29)
0.30011649938019014
gini_index(24, 25, 13, 102)
0.2899430822169802

根据上图,Blocked arteries的Gini impurity为0.29,优于chest pain。(基尼指数越小越好)

且分叉后的基尼指数低于0.34,因此应当进行第二次分叉

因此以Blocked arteries为第二次分叉属性。得到:

请添加图片描述

gini_index_single(24, 25)
0.4997917534360683
gini_index(17,3,7,22)
0.3208304011259677

由于0.32<0.49,因此应当进行第三次分叉。

最终分叉结果如下:

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值