🗒️决策树
2024-4-29
| 2024-4-30
2623  |  阅读时长 7 分钟
type
status
date
slug
summary
tags
category
icon
password
创建时间
Apr 29, 2024 02:08 PM
决策树的生成是一个递归过程。在决策树基本算法中,有三种情形会导致递归返回:
  1. 当前结点包含的样本全属于同一类别,无需划分;
  1. 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;
  1. 当前结点包含的样本集合为空,不能划分.
在第 (2)种情形下,我们把当前结点标记为叶结点,井将其类别设定为该结点所含样本最多的类别;在第 (3)种情形下,同样把当前结点标记为叶结点,但将其类别设定为其父结点所含样本最多的类别。注意这两种情形的处理实质不同:情形 (2)是在利用当前结点的后验分布,而情形(3)则是把父结点的样本分布作为当前结点的先验分布.
💡
情形(2)是后验分布,是指在已知样本 x\boldsymbol{x} 的情况,推测出的当前结点所属的类别,即 (yx)(y|\boldsymbol{x}) ;而情形(3)是先验分布,是因为当前结点没有样本集合给我去做推断,而是去利用已知的父结点分布做先验,即我们预先假设,是一种脱离样本的假设条件。

ID3 算法

信息熵的定义

信息熵:熵是度量样本集合纯度最常用的一种指标,代表一个系统中蕴含多少信息量,信息量越大表明一个系统不确定性就越大就存在越多的可能性,即信息熵越大。
假定当前样本集合 DD 中第 kk 类样本所占的比例为 pk(k=1,2,,y)p_k(k=1,2,\dots,|y|),则 DD 的信息熵为:
Ent(D)=k=1Ypklog2pk\operatorname{Ent}(D)=-\sum_{k=1}^{|\mathcal{Y}|} p_{k} \log _{2} p_{k}
信息熵满足下列不等式:
0Ent(D)log2Y Y 表示样本 D 中的类别数0 \leq \operatorname{Ent}(D) \leq \log _{2}|\mathcal{Y}| \quad \mathcal{Y}  表示样本  D  中的类别数

对信息熵的最值进行证明(选看)

已知集合 DD 的信息熵为
Ent(D)=k=1Ypklog2pk\operatorname{Ent}(D)=-\sum_{k=1}^{|\mathcal{Y}|} p_{k} \log _{2} p_{k}
其中 Y|\mathcal{Y}| 表示样本类别总数,pkp_k 表示第 kk 类样本所占的比例,且 0pk10\leq p_k \leq 1k=1npk=1\sum_{k=1}^{n}p_k=1
若令 Y=n|\mathcal{Y}|=npk=xkp_k=x_k,那么信息熵 Ent(D)\operatorname{Ent}(D) 就可以看作一个 nn 元实值函数,即
Ent(D)=f(x1,,xn)=k=1nxklog2xk\operatorname{Ent}(D)=f\left(x_{1}, \ldots, x_{n}\right)=-\sum_{k=1}^{n} x_{k} \log _{2} x_{k}
其中 0xk1,k=1nxk=10 \leq x_{k} \leq 1, \sum_{k=1}^{n} x_{k}=1

引入拉格朗日乘子

引入拉格朗日乘子 λ\lambda (条件极值, 在 0xk1,k=1nxk=10 \leq x_{k} \leq 1, \sum_{k=1}^{n} x_{k}=1 的条件下, 求最值) :
L(x1,,xn,λ)=k=1nxklog2xk+λ(k=1nxk1)L\left(x_{1}, \ldots, x_{n}, \lambda\right)=-\sum_{k=1}^{n} x_{k} \log _{2} x_{k}+\lambda\left(\sum_{k=1}^{n} x_{k}-1\right)
LL 分别关于 xxλ\lambda 求一阶偏导,并令偏导等于 00
L(x1,,xn,λ)x1=x1[k=1nxklog2xk+λ(k=1nxk1)]=0log2x1x11x1ln2+λ=0log2x11ln2+λ=0λ=log2x1+1ln2\begin{aligned}\frac{\partial L\left(x_{1}, \ldots, x_{n}, \lambda\right)}{\partial x_{1}} &=\frac{\partial}{\partial x_{1}}\left[-\sum_{k=1}^{n} x_{k} \log _{2} x_{k}+\lambda\left(\sum_{k=1}^{n} x_{k}-1\right)\right]=0 \\&\Rightarrow-\log _{2} x_{1}-x_{1} \cdot \frac{1}{x_{1} \ln 2}+\lambda=0 \\&\Rightarrow-\log _{2} x_{1}-\frac{1}{\ln 2}+\lambda=0 \\& \Rightarrow \lambda=\log _{2} x_{1}+\frac{1}{\ln 2}\end{aligned}
同理可推得:
λ=log2x1+1ln2=log2x2+1ln2==log2xn+1ln2\lambda=\log _{2} x_{1}+\frac{1}{\ln 2}=\log _{2} x_{2}+\frac{1}{\ln 2}=\cdots=\log _{2} x_{n}+\frac{1}{\ln 2}
对任意的 xx,满足约束条件:
0xk1,k=1nxk=10 \leq x_{k} \leq 1, \sum_{k=1}^{n} x_{k}=1
因此:
x1=x2==xn=1nx_1=x_2=\cdots=x_n=\frac{1}{n}

这里对最大值点还是最小值点需要做个验证:

x1=x2==xn=1nx_1=x_2=\cdots=x_n=\frac{1}{n} 时,
f(1n,,1n)=k=1n1nlog21n=n1nlog21n=log2nf\left(\frac{1}{n}, \ldots, \frac{1}{n}\right)=-\sum_{k=1}^{n} \frac{1}{n} \log _{2} \frac{1}{n}=-n \cdot \frac{1}{n} \log _{2} \frac{1}{n}=\log _{2} n
x1=1,x2=x3==xn=0x_1=1,x_2=x_3=\cdots=x_n=0 时:
f(1,0,,0)=1log210log200log20=0f(1,0, \ldots, 0)=-1 \cdot \log _{2} 1-0 \cdot \log _{2} 0 \ldots-0 \cdot \log _{2} 0=0
显然 log2n0\log_2 n \geq 0,所以 x1=x2==xn=1nx_1=x_2=\cdots=x_n=\frac{1}{n} 为最大值点,最大值为 log2n\log_2 n
下面考虑求 f(x1,x2,,xn)f(x_1,x_2,\cdots,x_n) 的最小值
仅考虑 f(x1,x2,,xn)f(x_1,x_2,\cdots,x_n) 可以看作是 nn 个互不相关一元函数的加和,即
f(x1,,xn)=k=1ng(xk)g(xk)=xklog2xk,0xk1\begin{array}{l}f\left(x_{1}, \ldots, x_{n}\right)=\sum_{k=1}^{n} g\left(x_{k}\right) \\g\left(x_{k}\right)=-x_{k} \log _{2} x_{k}, 0 \leq x_{k} \leq 1\end{array}
g(x1)g(x_1) 的最小值,首先对 g(x1)g(x_1) 关于 x1x_1 求一阶和二阶导数:
g(x1)=d(x1log2x1)dx1=log2x1x11x1ln2=log2x11ln2g(x1)=d(log2x11ln2)dx1=1x1ln2\begin{aligned}&g^{\prime}\left(x_{1}\right)=\frac{d\left(-x_{1} \log _{2} x_{1}\right)}{d x_{1}}=-\log _{2} x_{1}-x_{1} \cdot \frac{1}{x_{1} \ln 2}=-\log _{2} x_{1}-\frac{1}{\ln 2} \\&g^{\prime \prime}\left(x_{1}\right)=\frac{d\left(-\log _{2} x_{1}-\frac{1}{\ln 2}\right)}{d x_{1}}=-\frac{1}{x_{1} \ln 2}\end{aligned}
在定义域 0xk10\le x_k \le 1 上,始终有 g(x1)=1x1ln20g^{\prime \prime}\left(x_{1}\right)=-\frac{1}{x_{1} \ln 2}\le 0,即 g(x1)g(x_1)开口向下的凹函数,最小值在边界 x1=0x_1=0x1=1x_1=1 处取得:
g(0)=0log20=0g(1)=1log21=0\begin{array}{l}g(0)=-0 \log _{2} 0=0 \\g(1)=-1 \log _{2} 1=0\end{array}
g(x1)g(x_1) 的最小值即为 00,同理可得 g(x2),,g(xn)g(x_2),\cdots,g(x_n) 的最小值也为 00,那么 f(x1,x2,,xn)f(x_1,x_2,\cdots,x_n) 的最小值也为 00
如果令某个 xk=1x_k=1,那么根据约束条件 0xk1,k=1nxk=10 \leq x_{k} \leq 1, \sum_{k=1}^{n} x_{k}=1,可知
x1=x2==xk1=xk+1==xn=0x_1=x_2=\cdots=x_{k-1}=x_{k+1}=\cdots=x_n=0
将其带入 f(x1,x2,,xn)f(x_1,x_2,\cdots,x_n),得:
f(0,0,,0,1,0,,0)=0log200log20.0log201log210log200log20=0f(0,0, \ldots, 0,1,0, \ldots, 0)=-0 \log _{2} 0-0 \log _{2} 0 \ldots .-0 \log _{2} 0-1 \log _{2} 1-0 \log _{2} 0 \ldots-0 \log _{2} 0=0
所以 xk=1,x1=x2==xk1=xk+1=xn=0x_k=1,x_1=x_2=\cdots=x_{k-1}=x_{k+1}=x_n=0,一定是 f(x1,x2,,xn)f(x_1,x_2,\cdots,x_n) 在满足的约束条件下的最小值点,其最小值为 00
所以有
0Ent(D)log2n0 \leq \operatorname{Ent}(D) \leq \log _{2}n

信息增益

假定离散属性 aaVV 个可能的取值 {a1,a2,,aV}\{ a^1,a^2,\dots,a^{V}\}, 如果使用特征 aa 来对数据集 DD 进行划分,则会产生 VV 个分支结点,其中第 vv 个结点包含了数据集 DD 中所有在特征 aa 上取值为 aVa^{V} 的样本总数,记为 DvD^{v}。再考虑到不同的分支结点所包含的样本数量不同,给分支节点赋予不同的权重,这样对样本数越多的分支节点的影响就会越大,因此,就能够计算出特征对样本集 DD 进行划分所获得的“信息增益”:
Gain(D,a)=Ent(D)i=1VDvDEnt(Dv)\operatorname{Gain}(D, a)=\operatorname{Ent}(D)-\sum_{i=1}^{V} \frac{\left|D^{v}\right|}{|D|}\operatorname{Ent}\left(D^{v}\right)

ID3 算法的计算过程

notion image
我们从训练集的分类标签(好瓜)中出发,计算树根节点的信息熵:
Ent(D)=817×log2817917×log2917=0.9975\operatorname{Ent}(D)=-\frac{8}{17} \times \log _{2} \frac{8}{17}-\frac{9}{17} \times \log _{2} \frac{9}{17}=0.9975

第一层分裂

计算各属性的信息增益:
  1. 属性 a1a_1:色泽
    1. 色泽中,一共有三个种类,分别为青绿(6 个)、乌黑(6 个)、浅白(5 个)。其中青绿中有好瓜 3 个,坏瓜 3 个。
      从青绿色属性中,可以得到的信息熵是 Ent(D1)=36log23636log236=1.000\operatorname{Ent}\left(D^{1}\right)=-\frac{3}{6} \log _{2} \frac{3}{6}-\frac{3}{6} \log _{2} \frac{3}{6}=1.000
      同理,计算乌黑和浅白的信息熵,分别为 Ent(D2)=0.918\operatorname{Ent}\left(D^{2}\right)=0.918Ent(D3)=0.722\operatorname{Ent}\left(D^{3}\right)=0.722。根据对应具体属性值的数量,赋予不同的信息权重,即具体属性值数量所占总体数量的比例。然后得到该属性的信息熵,将根节点的信息熵减去该属性的信息熵,获得信息增益值。
      Gain(D,a1)=Ent(D)v=13DvDEnt(Dv)=Ent(D)(D1D×Ent(D1)+D2D×Ent(D2)+D3D×Ent(D3))=0.9975(617(36log23636log236)+617(46log24626log226)+517(15log21545log245))=0.1091\begin{array}{l}\operatorname{Gain}\left(D, a_{1}\right)=\operatorname{Ent}(D)-\sum_{v=1}^{3} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right) \\=\operatorname{Ent}(\mathrm{D})-\left(\frac{D^{1}}{D} \times \operatorname{Ent}\left(D^{1}\right)+\frac{D^{2}}{D} \times \operatorname{Ent}\left(D^{2}\right)+\frac{D^{3}}{D} \times \operatorname{Ent}\left(D^{3}\right)\right) \\=0.9975-\left(\frac{6}{17}\left(-\frac{3}{6} \log _{2} \frac{3}{6}-\frac{3}{6} \log _{2} \frac{3}{6}\right)+\frac{6}{17}\left(-\frac{4}{6} \log _{2} \frac{4}{6}-\frac{2}{6} \log _{2} \frac{2}{6}\right)+\frac{5}{17}\left(-\frac{1}{5} \log _{2} \frac{1}{5}-\frac{4}{5} \log _{2} \frac{4}{5}\right)\right)\\=0.1091\\\end{array}
  1. 属性 a2a_2:根蒂
    1. Gain(D,a2)=Ent(D)v=13DvDEnt(D)=Ent(D)(D1D×Ent(D1)+D2D×Ent(D2)+D3D×Ent(D3))=0.9975(817(38log23858log258)+217(1log21)+717(37log23747log247))=0.1427\begin{array}{l}\operatorname{Gain}\left(D, a_{2}\right)=\operatorname{Ent}(\mathrm{D})-\sum_{v=1}^{3} \frac{\left|D^{v}\right|}{D} \operatorname{Ent}(\mathrm{D}) \\=\operatorname{Ent}(D)-\left(\frac{D^{1}}{D} \times \operatorname{Ent}\left(D^{1}\right)+\frac{D^{2}}{D} \times \operatorname{Ent}\left(D^{2}\right)+\frac{D^{3}}{D} \times \operatorname{Ent}\left(D^{3}\right)\right) \\=0.9975-\left(\frac{8}{17}\left(-\frac{3}{8} \log _{2} \frac{3}{8}-\frac{5}{8} \log _{2} \frac{5}{8}\right)+\frac{2}{17}\left(-1 \log _{2} 1\right)+\frac{7}{17}\left(-\frac{3}{7} \log _{2} \frac{3}{7}-\frac{4}{7} \log _{2} \frac{4}{7}\right)\right)\\=0.1427\end{array}
  1. 属性 a3a_3:敲声
    1. Gain(D,a3)=Ent(D)v=13DvDEnt(D)=Ent(D)(D1D×Ent(D1)+D2D×Ent(D2)+D3D×Ent(D3))=0.9975(1017(610log2610410log2410)+517(25log22535log235)+217(1log21))=0.1408\begin{array}{l}\operatorname{Gain}\left(D, a_{3}\right)=\operatorname{Ent}(\mathrm{D})-\sum_{v=1}^{3} \frac{\left|D^{v}\right|}{D} \operatorname{Ent}(\mathrm{D}) \\=\operatorname{Ent}(\mathrm{D})-\left(\frac{D^{1}}{D} \times \operatorname{Ent}\left(D^{1}\right)+\frac{D^{2}}{D} \times \operatorname{Ent}\left(D^{2}\right)+\frac{D^{3}}{D} \times \operatorname{Ent}\left(D^{3}\right)\right) \\=0.9975-\left(\frac{10}{17}\left(-\frac{6}{10} \log _{2} \frac{6}{10}-\frac{4}{10} \log _{2} \frac{4}{10}\right)+\frac{5}{17}\left(-\frac{2}{5} \log _{2} \frac{2}{5}-\frac{3}{5} \log _{2} \frac{3}{5}\right)+\frac{2}{17}\left(-1 \log _{2} 1\right)\right)\\=0.1408\end{array}
  1. 属性 a4a_4:纹理
    1. Gain(D,a4)=Ent(D)v=13DvDEnt(D)=Ent(D)(D1D×Ent(D1)+D2D×Ent(D2)+D3D×Ent(D3))=0.9975(917(79log27929log229)+517(15log215(45log245)+(317(1log21))=0.3808\begin{array}{l}\operatorname{Gain}\left(D, a_{4}\right)=\operatorname{Ent}(\mathrm{D})-\sum_{v=1}^{3} \frac{\left|D^{v}\right|}{D} \operatorname{Ent}(\mathrm{D})\\=\operatorname{Ent}(\mathrm{D})-\left(\frac{D^{1}}{D} \times \operatorname{Ent}\left(D^{1}\right)+\frac{D^{2}}{D} \times \operatorname{Ent}\left(D^{2}\right)+\frac{D^{3}}{D} \times \operatorname{Ent}\left(D^{3}\right)\right)\\=0.9975-(\frac{9}{17}\left(-\frac{7}{9} \log _{2} \frac{7}{9}-\frac{2}{9} \log _{2} \frac{2}{9}\right)+\frac{5}{17}\left(-\frac{1}{5} \log _{2} \frac{1}{5}-\left(\frac{4}{5} \log _{2} \frac{4}{5}\right)+\left(\frac{3}{17}\left(-1 \log _{2} 1\right)\right)\right.\\=0.3808\end{array}
  1. 属性 a5a_5:脐部
    1. Gain(D,a5)=Ent(D)v=13DvDEnt(D)=Ent(D)(D1D×Ent(D1)+D2D×Ent(D2)+D3D×Ent(D3))=0.9975(717(57log25727log227)+617(log23636log236)+417(1log21))=0.2892\begin{array}{l}\operatorname{Gain}\left(D, a_{5}\right)=\operatorname{Ent}(\mathrm{D})-\sum_{v=1}^{3} \frac{\left|D^{v}\right|}{D} \operatorname{Ent}(\mathrm{D}) \\=\operatorname{Ent}(\mathrm{D})-\left(\frac{D^{1}}{D} \times \operatorname{Ent}\left(D^{1}\right)+\frac{D^{2}}{D} \times \operatorname{Ent}\left(D^{2}\right)+\frac{D^{3}}{D} \times \operatorname{Ent}\left(D^{3}\right)\right) \\=0.9975-\left(\frac{7}{17}\left(-\frac{5}{7} \log _{2} \frac{5}{7}-\frac{2}{7} \log _{2} \frac{2}{7}\right)+\frac{6}{17}\left(-\log _{2} \frac{3}{6}-\frac{3}{6} \log_{2} \frac{3}{6}\right)+\frac{4}{17}\left(-1 \log _{2} 1\right)\right) \\=0.2892\end{array}
  1. 属性 a6a_6:触感
    1. Gain(D,a6)=Ent(D)v=12DvDEnt(D)=Ent(D)(D1D×Ent(D1)+D2D×Ent(D2))=0.9975(1217(612log2612612log2612)+517(25log22535log235))=0.0060\begin{array}{l}\operatorname{Gain}\left(D, a_{6}\right)=\operatorname{Ent}(\mathrm{D})-\sum_{v=1}^{2} \frac{\left|D^{v}\right|}{D} \operatorname{Ent}(\mathrm{D}) \\=\operatorname{Ent}(\mathrm{D})-\left(\frac{D^{1}}{D} \times \operatorname{Ent}\left(D^{1}\right)+\frac{D^{2}}{D} \times \operatorname{Ent}\left(D^{2}\right)\right) \\=0.9975-\left(\frac{12}{17}\left(-\frac{6}{12} \log _{2} \frac{6}{12}-\frac{6}{12} \log _{2} \frac{6}{12}\right)+\frac{5}{17}\left(-\frac{2}{5} \log _{2} \frac{2}{5}-\frac{3}{5} \log _{2} \frac{3}{5}\right)\right)\\=0.0060\end{array}
选择需要分裂的属性:
属性
信息增益
色泽
0.1091
根蒂
0.1427
敲声
0.1408
纹理
0.3808
脐部
0.2892
触感
0.0060
选择最大信息增益值对应的属性,进行分裂,即对纹理属性进行分裂。

第二层分裂

然后,对每个分支结点做进一步划分。以分支结点“纹理=清晰”为例,该结点包含的样本集合中有编号为 {1,2,3,4,5,6,8,10,15}的 9 个样例,可用属性集合为{色泽,根蒂,敲声,脐部,触感},基于样本集合(“纹理=清晰”)计算出各属性的信息增益。
notion image
样本集合(“纹理=清晰”)的信息熵为:
 Ent(D2)=79×log27929×log229=0.7642 \operatorname{Ent}(D_2)=-\frac{7}{9} \times \log _{2} \frac{7}{9}-\frac{2}{9} \times \log _{2} \frac{2}{9}=0.7642
计算各属性的信息增益值——基于样本集合(“纹理=清晰”)
  1. 属性 a1a_1:色泽
    1. Gain(D2,a1)=Ent(D2)v=13D2vD2Ent(D2v)=Ent(D2)(D21D2×Ent(D21)+D22D2×Ent(D22)+D23D2×Ent(D23))=0.7642[49(34log23414log214)+49(34log23414log214)+19(1log21)]=0.0431\begin{array}{l}\operatorname{Gain}\left(D_{2}, a_{1}\right)=\operatorname{Ent}\left(D_{2}\right)-\sum_{v=1}^{3} \frac{\left|D_{2}^{v}\right|}{D_{2}} \operatorname{Ent}\left(D_{2}^{v}\right) \\=\operatorname{Ent}\left(D_{2}\right)-\left(\frac{D_{2}^{1}}{D_{2}} \times \operatorname{Ent}\left(D_{2}^{1}\right)+\frac{D_{2}^{2}}{D_{2}} \times \operatorname{Ent}\left(D_{2}^{2}\right)+\frac{D_{2}^{3}}{D_{2}} \times \operatorname{Ent}\left(D_{2}^{3}\right)\right) \\=0.7642-\left[\frac{4}{9}\left(-\frac{3}{4} \log _{2} \frac{3}{4}-\frac{1}{4} \log _{2} \frac{1}{4}\right)+\frac{4}{9}\left(-\frac{3}{4} \log _{2} \frac{3}{4}-\frac{1}{4} \log _{2} \frac{1}{4}\right)+\frac{1}{9}\left(-1 \log _{2} 1\right)\right] \\=0.0431\end{array}
  1. 属性 a2a_2:根蒂
    1. Gain(D2,a2)=Ent(D2)v=13D2vD2Ent(D2v)=Ent(D2)(D21D2×Ent(D21)+D22D2×Ent(D22)+D23D2×Ent(D23))=0.7642[59(1log21)+39(23log22313log213)+19(1log21)]=0.4581\begin{array}{l}\operatorname{Gain}\left(D_{2}, a_{2}\right)=\operatorname{Ent}\left(D_{2}\right)-\sum_{v=1}^{3} \frac{\left|D_{2}^{v}\right|}{D_{2}} \operatorname{Ent}\left(D_{2}^{v}\right) \\=\operatorname{Ent}\left(D_{2}\right)-\left(\frac{D_{2}^{1}}{D_{2}} \times \operatorname{Ent}\left(D_{2}^{1}\right)+\frac{D_{2}^{2}}{D_{2}} \times \operatorname{Ent}\left(D_{2}^{2}\right)+\frac{D_{2}^{3}}{D_{2}} \times \operatorname{Ent}\left(D_{2}^{3}\right)\right) \\=0.7642-\left[\frac{5}{9}\left(-1 \log _{2} 1\right)+\frac{3}{9}\left(-\frac{2}{3} \log _{2} \frac{2}{3}-\frac{1}{3} \log _{2} \frac{1}{3}\right)+\frac{1}{9}\left(-1 \log _{2} 1\right)\right] \\=0.4581\end{array}
  1. 属性 a3a_3:敲声
    1. Gain(D2,a3)=Ent(D2)v=13D2vD2Ent(D2v)=Ent(D2)(D21D2×Ent(D21)+D22D2×Ent(D22)+D23D2×Ent(D23))=0.7642[69(56log25616log216)+29(1log21)+19(1log21)]=0.3308\begin{array}{l}\operatorname{Gain}\left(D_{2}, a_{3}\right)=\operatorname{Ent}\left(D_{2}\right)-\sum_{v=1}^{3} \frac{\left|D_{2}^{v}\right|}{D_{2}} \operatorname{Ent}\left(D_{2}^{v}\right) \\=\operatorname{Ent}\left(D_{2}\right)-\left(\frac{D_{2}^{1}}{D_{2}} \times \operatorname{Ent}\left(D_{2}^{1}\right)+\frac{D_{2}^{2}}{D_{2}} \times \operatorname{Ent}\left(D_{2}^{2}\right)+\frac{D_{2}^{3}}{D_{2}} \times \operatorname{Ent}\left(D_{2}^{3}\right)\right) \\=0.7642-\left[\frac{6}{9}\left(-\frac{5}{6} \log _{2} \frac{5}{6}-\frac{1}{6} \log _{2} \frac{1}{6}\right)+\frac{2}{9}\left(-1 \log _{2} 1\right)+\frac{1}{9}\left(-1 \log _{2} 1\right)\right] \\=0.3308\end{array}
  1. 属性 a5a_5:触感
    1. Gain(D2,a5)=Ent(D2)v=12D2vD2Ent(D2v)=Ent(D2)(D21D2×Ent(D21)+D22D2×Ent(D22))=0.7642[69(1log21)+39(13log21323log223)]=0.4581\begin{array}{l}\operatorname{Gain}\left(D_{2}, a_{5}\right)=\operatorname{Ent}\left(D_{2}\right)-\sum_{v=1}^{2} \frac{\left|D_{2}^{v}\right|}{D_{2}} \operatorname{Ent}\left(D_{2}^{v}\right) \\=\operatorname{Ent}\left(D_{2}\right)-\left(\frac{D_{2}^{1}}{D_{2}} \times \operatorname{Ent}\left(D_{2}^{1}\right)+\frac{D_{2}^{2}}{D_{2}} \times \operatorname{Ent}\left(D_{2}^{2}\right)\right) \\=0.7642-\left[\frac{6}{9}\left(-1 \log _{2} 1\right)+\frac{3}{9}\left(-\frac{1}{3} \log _{2} \frac{1}{3}-\frac{2}{3} \log _{2} \frac{2}{3}\right)\right] \\=0.4581\end{array}
选择分裂属性
属性
信息增益
色泽
0.431
根蒂
0.4581
敲声
0.3308
脐部
0.4581
触感
0.4581
选择最大信息增益值对应的属性,进行分裂。但是有三类属性的信息增益是相等的,我们可以随机选择一个属性作为分裂属性。我们这里选择根蒂属性来分裂。
同理,对纹理中的其他属性值做上述操作,得到第二层的树。

第三层分裂

接下来对上图中结点(“根蒂=稍蜷”)进行划分,该点的样本集为{6,8,15},共有 3 个样木。可用特征集为{色泽,敲声,脐部,触感},同样可以计算信息增益。
notion image
样本集合(“根蒂=稍蜷”)的信息熵为:
Ent(D3)=k=12pklog2pk=(23log223+13log213)=0.918\operatorname{Ent}\left(D_{3}\right)=-\sum_{k=1}^{2} p_{k} \log _{2} p_{k}=-\left(\frac{2}{3} \log _{2} \frac{2}{3}+\frac{1}{3} \log _{2} \frac{1}{3}\right)=0.918
计算各属性的信息增益值——基于样本集合(“纹理=清晰”)
  1. 属性 a1a_1:色泽
    1. Gain(D3,a1)=Ent(D3)v=12D3vD3Ent(D3v)=0.918[13(11log210log20)+23(12log21212log212)]=0.251\begin{array}{l}\operatorname{Gain}\left(D_{3}, a_{1}\right)=\operatorname{Ent}\left(D_{3}\right)-\sum_{v=1}^{2} \frac{\left|D_{3}^{v}\right|}{D_{3}} \operatorname{Ent}\left(D_{3}^{v}\right) \\=0.918-\left[\frac{1}{3}\left(-\frac{1}{1} \log _{2} 1-0 \cdot \log _{2} 0\right)+\frac{2}{3}\left(-\frac{1}{2} \log _{2} \frac{1}{2}-\frac{1}{2} \log _{2} \frac{1}{2}\right)\right] \\=0.251\end{array}
  1. 属性 a2a_2:敲声
    1. Gain(D3,a2)=Ent(D3)v=11D3vD3Ent(D3v)=0.918[33(23log22313log213)]=0\begin{array}{l}\operatorname{Gain}\left(D_{3}, a_{2}\right)=\operatorname{Ent}\left(D_{3}\right)-\sum_{v=1}^{1} \frac{|D_{3}^{v}|}{D_{3}} \operatorname{Ent}\left(D_{3}^{v}\right) \\=0.918-\left[\frac{3}{3}\left(-\frac{2}{3} \log _{2} \frac{2}{3}-\frac{1}{3} \log _{2} \frac{1}{3}\right)\right] \\=0\end{array}
  1. 属性 a3a_3:脐部
    1. 脐部和敲声一样都只能划分出一个子集,因此脐部的信息增益也为 00
      Gain(D3,a2)=0\operatorname{Gain}\left(D_{3}, a_{2}\right)=0
  1. 属性 a4a_4:触感
    1.  Gain (D3,a4)=Ent(D3)v=12D3vD3Ent(D3v)=0.918[13(11log210log20)+23(12log21212log212)]=0.251\begin{aligned}&\text { Gain }\left(D_{3}, a_{4}\right)=\operatorname{Ent}\left(D_{3}\right)-\sum_{v=1}^{2} \frac{\left|D_{3}^{v}\right|}{D_{3}} \operatorname{Ent}\left(D_{3}^{v}\right) \\&=0.918-\left[\frac{1}{3}\left(-\frac{1}{1} \log _{2} 1-0 \cdot \log _{2} 0\right)+\frac{2}{3}\left(-\frac{1}{2} \log _{2} \frac{1}{2}-\frac{1}{2} \log _{2} \frac{1}{2}\right)\right] \\&=0.251\end{aligned}
选择分裂属性
属性
信息增益
色泽
0.251
敲声
0
脐部
0
触感
0.251
可知“色泽”,“触感” 2 个属性均取得了最大的信息增益,选个属性作为划分属性,不妨选取“色泽”为划分属性。

最终的树模型

notion image

ID3 算法的不足

  1. ID3 没有考虑连续特征。
  1. ID3 采用信息增益大的特征优先建立决策树的节点,取值比较多的特征比取值少的特征信息增益大。
  1. ID3 算法对于缺失值的情况没有做考虑。
  1. 没有考虑过拟合的问题

C4.5 算法

增益率的定义

信息增益偏向于选择取值较多的属性,容易过拟合,基于信息增益的缺点,C4.5 算法不直接使用信息增益,而是使用一种叫增益率的方法来选择最优属性进行划分,对样本集 DD 中离散属性 aa,增益率为:
Gain_ratio(D,a)=Gain(D,a)IV(a)\operatorname{ Gain\_ratio }(D,a)=\frac{\operatorname{Gain}(D, a)}{\operatorname{IV}(a)}
IV(a)\operatorname{IV(a)} 是属性 aa 的固有值(Intrinsic Value):
IV(a)=v=1VDvDlog2DvD\operatorname{IV}(a)=-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \log _{2} \frac{\left|D^{v}\right|}{|D|}
增益率与信息增益的对比:
信用级别
工资级别
是否逾期
1
1
2
1
3
2
4
2
信息熵:Ent(D)=12log21212log212=1\operatorname{Ent}(D)=-\frac{1}{2}\log_2\frac{1}{2}-\frac{1}{2}\log_2\frac{1}{2}=1
当前属性 a1a_1:信用级别
Gain(D,a1)=Ent(D)i=14DvDEnt(D)=1(D1D×Ent(D1)+D2D×Ent(D2)+D3D×Ent(D3)+D4D×Ent(D4))=1(14(1log21)+14(1log21)+14(1log21)+14(1log21))=1\begin{aligned}\operatorname{Gain}\left(D, a_{1}\right) &=\operatorname{Ent}(D)-\sum_{i=1}^{4} \frac{\left|D^{v}\right|}{D} \operatorname{Ent}(D) \\&=1-\left(\frac{D^{1}}{D} \times \operatorname{Ent}\left(D^{1}\right)+\frac{D^{2}}{D} \times \operatorname{Ent}\left(D^{2}\right)+\frac{D^{3}}{D} \times \operatorname{Ent}\left(D^{3}\right)+\frac{D^{4}}{D} \times \operatorname{Ent}\left(D^{4}\right)\right) \\&=1-\left(\frac{1}{4}\left(-1 \log _{2} 1\right)+\frac{1}{4}\left(-1 \log _{2} 1\right)+\frac{1}{4}\left(-1 \log _{2} 1\right)+\frac{1}{4}\left(-1 \log _{2} 1\right)\right) \\&=1\end{aligned}
当前属性 a2a_2:工资级别
Gain(D,a2)=Ent(D)v=12DvDEnt(D)=1(D1D×Ent(D1)+D2D×Ent(D2))=1(24(12log21212log212)+24(12log21212log212))<1\begin{aligned}&\operatorname{Gain}\left(D, a_{2}\right)=\operatorname{Ent}(D)-\sum_{v=1}^{2} \frac{\left|D^{v}\right|}{D} \operatorname{Ent}(\mathrm{D}) \\&=1-\left(\frac{D^{1}}{D} \times \operatorname{Ent}\left(D^{1}\right)+\frac{D^{2}}{D} \times \operatorname{Ent}\left(D^{2}\right)\right) \\&=1-\left(\frac{2}{4} \left(-\frac{1}{2} \log _{2} \frac{1}{2}-\frac{1}{2} \log _{2} \frac{1}{2}\right)+\frac{2}{4}\left(-\frac{1}{2} \log _{2} \frac{1}{2}-\frac{1}{2} \log _{2} \frac{1}{2}\right)\right) \\&<1\end{aligned}
我们用信用级别这个属性去划分原数据集,那么,原数据集中有多少个样本,就会被划分为多少个子集,这样的话,会导致信息增益公式的第二项整体为 00,虽然这种划分毫无意义,但是从信息增益的概念来讲,这就是最好的划分属性。信息增益表示由于特征 AA 而使得数据集的分类不确定性减少的程度,信息增益大的属性具有更强的分类能力。根据熵的公式可知, 属性越多,熵越大,因此将他将它作为分母,对分支过多的情况进行惩罚,就可以校正信息增益容易偏向于取值较多的属性的问题。

C4.5 算法的不足

  1. C4.5 生成的是多叉树,生成决策树的效率比较慢。
  1. C4.5 只能用于分类。
  1. C4.5 由于使用了熵模型,里面有大量的耗时的对数运算。

CART 算法

CART 是 Classification and Regression Tree 的简称,这是一种著名的决策树学习算法,分类和回归任务都可用。

基尼值的定义

基尼值(Gini(D)\operatorname{Gini}(D))用于度量数据集的纯度,Gini(D)\operatorname{Gini}(D) 反映了从数据集中随机抽取两个样本,其类别标记不一致的概率。因此,Gini(D)\operatorname{Gini}(D) 越小,则数据集的纯度越高。
假定当前样本集合 DD 中第 kk 类样本所占的比例为 pk(k=1,2,,y)p_k(k=1,2,\dots,|y|),则 DD 的基尼值为:
Gini(D)=k=1ykkpkpk=p1(p2+p3++py)++py(p1+p2+p3++py1)=p1(1p1)+p2(1p2)++py(1py)=(p1+p2++py)(p12+p22++py2)=1k=1pk2\begin{aligned}\operatorname{Gini}(D) &=\sum_{k=1}^{|y|} \sum_{k^{\prime} \neq k} p_{k} p_{k^{\prime}} \\&=p_{1} \cdot\left(p_{2}+p_{3}+\ldots+p_{|y|}\right)+\ldots+p_{|y|} \cdot\left(p_{1}+p_{2}+p_{3}+\ldots+p_{|y|-1}\right) \\&=p_{1}\left(1-p_{1}\right)+p_{2}\left(1-p_{2}\right)+\ldots+p_{|y|}\left(1-p_{|y|}\right) \\&=\left(p_{1}+p_{2}+\ldots+p_{|y|}\right)-\left(p_{1}^{2}+p_{2}^{2}+\ldots+p_{|y|}^{2}\right) \\&=1-\sum_{k=1} p_{k}^{2}\end{aligned}

基尼指数的定义

基尼指数表示在样本集合中一个随机选中的样本被分错的概率。基尼指数越大,样本的不确定性也就越大。
Gini_index(D,a)=v=1VDvDGini(Dv)\operatorname{ Gini\_index }(D, a)=\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Gini}\left(D^{v}\right)
其中 DvD^v 表示第 vv 个类别的样本集。

参考资料

  1. 《机器学习》——周志华
SVM(支持向量机)的原始形式推导2810. 故障键盘
Loading...