决策树入门【西瓜书】

本文深入讲解决策树算法原理,包括信息熵、增益率、基尼指数等关键概念,并探讨了连续值处理、缺失值应对及剪枝技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当一个有经验的老农看一个瓜是不是好瓜时,他可能会先看下瓜的颜色,一看是青绿的,心想有可能是好瓜;接着他又看了下根蒂,发现是蜷缩着的,老农微微点头,寻思着五成以上是好瓜;最后他又敲了下瓜,一听发出浑浊的响声,基本确定这个瓜是个好瓜!

决策树便是模拟“老农判瓜”的过程,通过对属性的层层筛选从而得到当前样本的分类。

可是,问题在于,老农判瓜依据的是其多年判瓜经验,计算机如何获得这些“识瓜经验”呢?又如何知道哪些属性是更为重要的属性呢?这便是实现决策树需要解决的重要问题。

信息熵

信息熵是度量样本集合纯度最常用的一种指标,信息熵 Ent(D)Ent(D)Ent(D) 的值越小,则样本 DDD 的纯度越高【即越有序,比如 DDD 中全是好瓜,则其信息熵就会很小】

Ent(D)=−∑k=1∣y∣pklog2pk Ent(D)=-\sum_{k=1}^{\vert y\vert}p_klog_2p_k\\ Ent(D)=k=1ypklog2pk

其中 ∣y∣\vert y\verty 是分类个数,如最终分类为好瓜/坏瓜,则 ∣y∣\vert y\verty222DDD 为样本集,在训练数据时即为整个训练集 pkp_kpk 即在样本 DDD 中分类为 kkk 的可能性

信息增益

假定离散属性 aaaVVV个可能的取值 {a1,a2,..,aV}\{a^1,a^2,..,a^V\}{a1,a2,..,aV} 【如色泽可以为青绿,乌黑,浅白】,若使用 aaa 来对样本集合 DDD 进行划分,则会产生 VVV 个分支结点【如色泽会分为三部分】,其中第 vvv 个分支节点包含了 DDD 中所有在属性 aaa 上取值为 ava^vav 的样本,记为 DvD^vDv 【如色泽乌黑的样本】。

我们可以根接新的样本集计算出新的信息熵【注意:信息熵的 kkk 对应的是分类,即好瓜与坏瓜】,再考虑到不同的分支结点所包含样本数不同,给分支结点赋予权重 ∣Dv∣∣D∣\dfrac{\vert D^v\vert}{\vert D\vert}DDv 【如色泽乌黑的瓜在所有瓜中的比重】,即样本数越多的分支节点造成的影响越大。

由此可以计算出用属性 aaa 对样本集 DDD 进行划分所获得的信息增益

Gain(D,a)=Ent(D)−∑v=1V∣Dv∣∣D∣Ent(Dv) Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\dfrac{\vert D^v \vert}{\vert D \vert}Ent(D^v)\\ Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)

一般而言,信息增益越大,则意味着使用属性 aaa 来进行划分所获得的纯度提升越大,因此我们可以使用信息增益来进行决策树的划分属性选择,著名的 ID3ID3ID3 算法就是以信息增益为准则来选择划分属性

image-20221118170405477

西瓜书 P75P75P75 页中通过信息增益选择了纹理作为第一个节点

image-20221118193331044

在选择了纹理属性后,接下来在纹理清晰这一分支中应该选择哪一属性继续划分,即计算各个属性在此分支的信息增益,此处以色泽属性为例,演示如何得到西瓜书 P77P77P77Gain(D1,colors)=0.043Gain(D^1,colors)=0.043Gain(D1,colors)=0.043,为避免上标下标混淆,下边 D1D_1D1 代表纹理为清晰的样本集,DvD^{v}Dv 代表在纹理清晰的情况下,色泽 colorscolorscolors 属性为 vvv 的样本集

如下是已知纹理清晰的情况下,对属性色泽 colorscolorscolors 进一步进行决策,求此时的信息增益
Gain(D1,colors)=Ent(D1)−∑v=13∣Dv∣∣D1∣Ent(Dv) Gain(D_1,colors)=Ent(D_1)-\sum_{v=1}^{3}\dfrac{\vert D^v \vert}{\vert D_1\vert}Ent(D^v)\\ Gain(D1,colors)=Ent(D1)v=13D1DvEnt(Dv)

色泽 colorscolorscolors333 种取值,所以 vvv 最大值为 333DvD^vDv 代表色泽属性值为 vvv 的样本集
∴Ent(D1)=−(79log279+29log229)=0.7642Ent(D1)=−(34log234+14log214)=0.8113Ent(D2)=−(34log234+14log214)=0.8113Ent(D3)=−(11log211+01log201)=0 \therefore Ent(D_1)=-(\dfrac{7}{9}log_2\dfrac{7}{9}+\dfrac{2}{9}log_2\dfrac{2}{9})=0.7642\\ Ent(D^1)=-(\dfrac{3}{4}log_2\dfrac{3}{4}+\dfrac{1}{4}log_2\dfrac{1}{4})=0.8113\\ Ent(D^2)=-(\dfrac{3}{4}log_2\dfrac{3}{4}+\dfrac{1}{4}log_2\dfrac{1}{4})=0.8113\\ Ent(D^3)=-(\dfrac{1}{1}log_2\dfrac{1}{1}+\dfrac{0}{1}log_2\dfrac{0}{1})=0 Ent(D1)=(97log297+92log292)=0.7642Ent(D1)=(43log243+41log241)=0.8113Ent(D2)=(43log243+41log241)=0.8113Ent(D3)=(11log211+10log210)=0
计算信息熵时约定,若 p=0p=0p=0 ,则 plog2p=0plog_2p=0plog2p=0
∴Gain(D1,colors)=0.7212−(49∗0.8113+49∗0.8113+19∗0)=0.043 \therefore Gain(D_1,colors)=0.7212-(\dfrac{4}{9}*0.8113+\dfrac{4}{9}*0.8113+\dfrac{1}{9}*0)=0.043\\ Gain(D1,colors)=0.7212(940.8113+940.8113+910)=0.043
同理,其他属性的信息增益也可以通过上述方法得到,选择信息增益最大的作为新的划分点,即根蒂

增益率

实际上,信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,著名的 C4.5C4.5C4.5 决策树算法不直接使用信息增益,而是使用信息增益率

Gain_ratio(D,a)=Gain(D,a)IV(a)IV(a)=−∑v=1V∣Dv∣∣D∣log2∣Dv∣∣D∣ Gain\_ratio(D,a)=\dfrac{Gain(D,a)}{IV(a)}\\ IV(a)=-\sum_{v=1}^{V}\dfrac{\vert D^v \vert}{\vert D\vert}log_2\dfrac{\vert D^v\vert}{\vert D\vert}\\\\ Gain_ratio(D,a)=IV(a)Gain(D,a)IV(a)=v=1VDDvlog2DDv

以选择根节点为例,计算属性色泽 colorscolorscolors 的信息增益率
Gain_ratio(D,colors)=Gain(D,colors)IV(colors)Gain(D,colors)=Ent(D)−∑v=13∣Dv∣∣D∣Ent(Dv)Ent(D)=−(817log2817+917log2917)=0.998Ent(D1)=−(36log236+36log236)=1Ent(D2)=−(46log246+26log226)=0.9183Ent(D3)=−(15log215+45log245)=0.7219∴Gain(D,colors)=0.998−(617∗1+617∗0.9183+517∗0.7219)=0.1087IV(colors)=−(617log2617+617log2617+517log2517)=1.580∴Gain_ratio(D,colors)=0.10871.580=0.0689 Gain\_ratio(D,colors)=\dfrac{Gain(D,colors)}{IV(colors)}\\ Gain(D,colors)=Ent(D)-\sum_{v=1}^{3}\dfrac{\vert D^v\vert}{\vert D\vert}Ent(D^v)\\ Ent(D)=-(\dfrac{8}{17}log_2\dfrac{8}{17}+\dfrac{9}{17}log_2\dfrac{9}{17})=0.998\\ Ent(D^1)=-(\dfrac{3}{6}log_2\dfrac{3}{6}+\dfrac{3}{6}log_2\dfrac{3}{6})=1\\ Ent(D^2)=-(\dfrac{4}{6}log_2\dfrac{4}{6}+\dfrac{2}{6}log_2\dfrac{2}{6})=0.9183\\ Ent(D^3)=-(\dfrac{1}{5}log_2\dfrac{1}{5}+\dfrac{4}{5}log_2\dfrac{4}{5})=0.7219\\ \therefore Gain(D,colors)=0.998-(\dfrac{6}{17}*1+\dfrac{6}{17}*0.9183+\dfrac{5}{17}*0.7219)=0.1087\\\\ IV(colors)=-(\dfrac{6}{17}log_2\dfrac{6}{17}+\dfrac{6}{17}log_2\dfrac{6}{17}+\dfrac{5}{17}log_2\dfrac{5}{17})=1.580\\ \therefore Gain\_ratio(D,colors)=\dfrac{0.1087}{1.580}=0.0689 Gain_ratio(D,colors)=IV(colors)Gain(D,colors)Gain(D,colors)=Ent(D)v=13DDvEnt(Dv)Ent(D)=(178log2178+179log2179)=0.998Ent(D1)=(63log263+63log263)=1Ent(D2)=(64log264+62log262)=0.9183Ent(D3)=(51log251+54log254)=0.7219Gain(D,colors)=0.998(1761+1760.9183+1750.7219)=0.1087IV(colors)=(176log2176+176log2176+175log2175)=1.580Gain_ratio(D,colors)=1.5800.1087=0.0689
需要注意的是,增益率准则对可取值数目较少的属性有所偏好,因此 C4.5C4.5C4.5 算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择信息增益率最高的。

基尼指数

CARTCARTCART 决策树【二叉树形式,如对色泽 colorscolorscolors 只有两个属性,青绿,非青绿】使用基尼指数来选择划分属性,数据集 DDD 的纯度可用基尼值来度量

基尼值反映了从数据集中随机抽取两个样本,其类别标记不一致的概率【即预测错误的概率】,因此基尼值越小,数据集 DDD 的纯度越高

Gini(D)=∑k=1∣y∣∑k′≠kpkpk′=∑k=1∣y∣pk(1−pk)=1−∑k=1∣y∣pk2 Gini(D)=\sum_{k=1}^{\vert y\vert}\sum_{k^{'}\ne k}^{}p_kp_k^{'} =\sum_{k=1}^{\vert y\vert}p_k(1-p_k)=1-\sum_{k=1}^{\vert y\vert}p_k^{2} Gini(D)=k=1yk=kpkpk=k=1ypk(1pk)=1k=1ypk2

其中 ∑k′≠kpk′\sum_{k^{'}\ne k}^{}p_k^{'}k=kpk 意思为类别不为 kkk 的所有概率之和,实则就是 1−pk1-p_k1pk

另外,由于共有 ∣y∣\vert y\verty 种类别【在 CARTCARTCART 决策树中其值为 222 ,即好瓜、坏瓜】,
∴p1+p2+...+p∣y∣=1 \therefore p_1+p_2+...+p_{\vert y\vert}=1 p1+p2+...+py=1
由此我们可以得到基尼指数的定义:
Gini_index(D,a)=∑v=1V∣Dv∣∣D∣Gini(Dv) Gini\_index(D,a)=\sum_{v=1}^{V}\dfrac{\vert D^v\vert}{\vert D\vert}Gini(D^v) Gini_index(D,a)=v=1VDDvGini(Dv)
其中 aaa 属性有 VVV 个取值,Gini(Dv)Gini(D^v)Gini(Dv) 是取值为 vvv 时对应数据集的基尼值

于是,我们在候选属性集合 AAA【表4.1 西瓜数据集2.0】 中,选择那个使得划分后基尼指数最小的属性作为划分属性
a∗=argmin⁡a∈AGini_index(D,a) a_*=arg\min\limits_{a\in A} Gini\_index(D,a) a=argaAminGini_index(D,a)
我们再次使用色泽 colorscolorscolors 属性进行举例,计算此时的基尼指数
Gini_index(D,colors)=∑v=13∣Dv∣∣D∣Gini(Dv)Gini(D1)=1−((36)2+(36)2)=12Gini(D2)=1−((46)2+(26)2)=49Gini(D3)=1−((15)2+(45)2)=825∴Gini_index(D,colors)=617∗12+617∗49+517∗825=0.4275 Gini\_index(D,colors)=\sum_{v=1}^{3}\dfrac{\vert D^v\vert}{\vert D\vert}Gini(D^v)\\ Gini(D^1)=1-((\dfrac{3}{6})^2+(\dfrac{3}{6})^2)=\dfrac{1}{2}\\ Gini(D^2)=1-((\dfrac{4}{6})^2+(\dfrac{2}{6})^2)=\dfrac{4}{9}\\ Gini(D^3)=1-((\dfrac{1}{5})^2+(\dfrac{4}{5})^2)=\dfrac{8}{25}\\ \therefore Gini\_index(D,colors)=\dfrac{6}{17}*\dfrac{1}{2}+\dfrac{6}{17}*\dfrac{4}{9}+\dfrac{5}{17}*\dfrac{8}{25}=0.4275 Gini_index(D,colors)=v=13DDvGini(Dv)Gini(D1)=1((63)2+(63)2)=21Gini(D2)=1((64)2+(62)2)=94Gini(D3)=1((51)2+(54)2)=258Gini_index(D,colors)=17621+17694+175258=0.4275

假设在所有属性的基尼指数中,色泽的基尼指数最小,接下来我们比较三种划分带权重的基尼值情况
517Gini(D3)<617Gini(D2)<617Gini(D1) \dfrac{5}{17}Gini(D^3)<\dfrac{6}{17}Gini(D^2)<\dfrac{6}{17}Gini(D^1) 175Gini(D3)<176Gini(D2)<176Gini(D1)

所以选择的色泽属性为浅白,非浅白

剪枝

剪枝是决策树学习算法对付“过拟合”的主要手段。在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,这时就可能因训练样本学得“太好”了,以致于把训练集自身得一些特点当成所有数据都具有得一般兴致而导致过拟合。因此,可通过主动去掉一些分支来降低过拟合得风险。

image-20221111114625844

根据信息增益准则生成的决策树

image-20221119193717170

预剪枝

预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点得划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点

西瓜书中对于脐部的计算已有详细步骤,因此不多赘述。此处对色泽属性是否需要划分进行计算,即计算划分前与划分后的验证集精度【测试集中预测正确的占比】

image-20221119193817688

通过训练集发现,凹陷后色泽为青绿,乌黑的为好瓜,浅白的为坏瓜

当做此划分后,凹陷且青绿预测为好瓜,凹陷且乌黑预测为好瓜,凹陷且浅白预测为坏瓜

稍凹预测为好瓜,平坦预测为坏瓜

剪枝前的精确率:accuracy_before_cut=1+1+27=47=57.1%accuracy\_before\_cut=\dfrac{1+1+2}{7}=\dfrac{4}{7}=57.1\%accuracy_before_cut=71+1+2=74=57.1%

对色泽进行剪枝后即将所有脐部凹陷,稍凹的都预测为好瓜,平坦的预测为坏瓜

剪枝后的精确率:accuracy_after_cut=57=71.4%accuracy\_after\_cut=\dfrac{5}{7}=71.4\%accuracy_after_cut=75=71.4%

剪枝之后精确率提升,∴\therefore 色泽属性应该剪去,即禁止划分色泽属性

后剪枝

后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶子结点

计算方法与预剪枝类似,西瓜书上也有详细步骤,不做过多赘述

image-20221119195528337

剪枝总结

  • 预剪枝和后剪枝唯一的区别就是前者在决策树生成过程中决定是否剪枝,后者在决策树构造完成后再次遍历各属性结点决定是否剪枝
  • 一般情形下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树。但后剪枝过程是在生成完全决策树之后进行的,并且要自底向上地对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多
  • 预剪枝和后剪枝的算法有多种,这里只是展示了最简单的两种,不过基本思想都是一致的,即通过对比剪枝前后的某个指标来决定是否进行剪枝

连续值

由于连续属性的可取值数目不再有限,因此,不能直接根据连续属性的可取值来对结点进行划分。此时,连续属性离散化技术可派上用场。最简单的策略是采用二分法对连续属性进行处理,这正是 C4.5C4.5C4.5 决策树算法中采用的机制

image-20221111114740296

比如我们现在相对密度属性进行划分,则操作如下

首先获得划分点集合:Ta={ai+ai+12∣1≤i≤n−1}T_a=\{\dfrac{a^i+a^{i+1}}{2}\vert 1\le i\le n-1\}Ta={2ai+ai+1∣1in1}

即对连续属性a的所有可能取值进行排序,接着取相邻值得平均值作为划分点集合 TaT_aTa 的元素

在上述训练集中,密度 densitydensitydensity 的划分点集合如下👇
Tdensity={0.244,0.294,0.351,0.381,0.420,0.459,0.518,0.574,0.600,0.621,0.636,0.648,0.661,0.681,0.708,0.746} T_{density}=\{0.244,0.294,0.351,0.381,0.420,0.459,0.518,0.574,0.600,0.621,0.636,0.648,\\0.661,0.681,0.708,0.746\}\\ Tdensity={0.244,0.294,0.351,0.381,0.420,0.459,0.518,0.574,0.600,0.621,0.636,0.648,0.661,0.681,0.708,0.746}
接着便是计算各个划分点对应的信息增益,选择信息增益最大的划分点
Gain(D,a)=max⁡t∈TaEnt(D)−∑λ∈{+,−}∣Dtλ∣∣D∣Ent(Dtλ) Gain(D,a)=\max\limits_{t\in T_a}Ent(D)-\sum_{\lambda\in \{+,-\}}^{}\dfrac{\vert D_{t}^\lambda\vert}{\vert D \vert}Ent(D_{t}^\lambda) Gain(D,a)=tTamaxEnt(D)λ{+,}DDtλEnt(Dtλ)
其中 tttTaT_aTa 集合中的划分点,λ\lambdaλ 为正项或负项目,分别对应 a>ta>ta>t 以及 a≤ta\le tat
接着以密度划分点 0.3810.3810.381 为例计算其对应的信息增益
Gain(D,density,0.381)=Ent(D)−∑λ∈{+,−}∣D0.381λ∣∣D∣Ent(D0.381λ) Gain(D,density,0.381)=Ent(D)-\sum_{\lambda\in \{+,-\}}^{}\dfrac{\vert D_{0.381}^\lambda\vert}{\vert D \vert}Ent(D_{0.381}^\lambda)\\ Gain(D,density,0.381)=Ent(D)λ{+,}DD0.381λEnt(D0.381λ)
λ\lambdaλ−- 时,D0.381λD^\lambda_{0.381}D0.381λ 表示密度小于等于 0.3810.3810.381 的样本集
Ent(D)=−∑k=1∣y∣pklog2pk=−(817log2817+917log2917)=0.9975Ent(D0.381+)=−(813log2813+513log2513)=0.9612Ent(D0.381+)=−(04log204+44log244)=0∴Gain(D,density)=0.9975−(1317∗0.9612+417∗0)=0.262 Ent(D)=-\sum_{k=1}^{\vert y\vert}p_klog_2p_k=-(\dfrac{8}{17}log_2\dfrac{8}{17}+\dfrac{9}{17}log_2\dfrac{9}{17})=0.9975\\ Ent(D^+_{0.381})=-(\dfrac{8}{13}log_2\dfrac{8}{13}+\dfrac{5}{13}log_2\dfrac{5}{13})=0.9612\\ Ent(D^+_{0.381})=-(\dfrac{0}{4}log_2\dfrac{0}{4}+\dfrac{4}{4}log_2\dfrac{4}{4})=0\\ \therefore Gain(D,density)=0.9975-(\dfrac{13}{17}*0.9612+\dfrac{4}{17}*0)=0.262 Ent(D)=k=1ypklog2pk=(178log2178+179log2179)=0.9975Ent(D0.381+)=(138log2138+135log2135)=0.9612Ent(D0.381+)=(40log240+44log244)=0Gain(D,density)=0.9975(17130.9612+1740)=0.262
假设在密度所有划分点中,0.3810.3810.381 对应的信息增益最大,则此信息增益就当作密度属性的信息增益,代表密度属性在决策树构建中参与竞选【密度≤0.381\le0.3810.381 为坏瓜是因为在训练集中坏瓜占比大 】

image-20221119205222872

缺失值

现实任务中常会遇到不完整样本,即样本的某些属性值缺失。若将有缺失值的样本全部丢弃,显然是对数据集的浪费,因此,使用有缺失值的训练样例来进行学习十分必要

image-20221119205959373

此时信息增益公式再次进行修改
Gain(D,a)=ρ∗Gain(D~,a)=ρ∗(Ent(D~)−∑v=1Vr~vEnt(D~v))Ent(D~)=−∑k=1∣y∣p~klog2p~k Gain(D,a)=\rho*Gain(\tilde D,a)=\rho*(Ent(\tilde D)-\sum_{v=1}^{V}\tilde r_vEnt(\tilde D^v))\\ Ent(\tilde D)=-\sum_{k=1}^{\vert y\vert}\tilde p_klog_2\tilde p_k\\ Gain(D,a)=ρGain(D~,a)=ρ(Ent(D~)v=1Vr~vEnt(D~v))Ent(D~)=k=1yp~klog2p~k
其中 ρ\rhoρ 表示无缺失值样本所占比例【如上述数据集 ρ=417\rho=\dfrac{4}{17}ρ=174
p~k\tilde p_kp~k 表示无缺失值样本中第 kkk 类所占比例【如好瓜在无缺失值样本中的比例】
r~v\tilde r_vr~v 表示无缺失值样本在属性 aaa 上取值 ava^vav 的样本所占的比例【如色泽青绿的瓜在无缺失值样本中的比例】

由此可以计算出不同属性对应的信息增益,选择对应的属性结点构造决策树,西瓜书中有构造的详细步骤,此处不再赘述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值