【西瓜书笔记】3. 决策树

3.1 决策树基本流程

一颗决策树包括:

  1. 根节点:包含样本全集
  2. 若干内部节点:对应属性测试
  3. 若干叶子结点:对应决策结果
  4. 结点包含的样本集合根据属性测试划分到子节点中国

基本流程遵循分而治之

伪代码:

【西瓜书笔记】3. 决策树_第1张图片
【来源:西瓜书page74】

决策树算法是典型的递归算法。三种递归返回情况:

  1. 当前节点包含的样本权属同一个类别,无需划分
  2. 当前属性集为空,或者所有样本属性相同,无法划分。标记当前结点为叶子结点,类别设定为该节点所含样本最多的类别。实质上利用当前结点的后验分布
  3. 当前结点包含的样本集合为空,不能划分。标记当前结点为叶子结点,将其类别设定为父节点所含样本最多的类别。实质上利用父节点的样本分布作为当前结点的先验分布。

后验概率 ∝ \propto 可能性 × \times × 先验概率

3.2 划分选择

划分标准是能不断提高提高结点纯度

3.2.1 ID3决策树

3.2.1.1 信息熵

定义:度量样本集合纯度最常用的一种指标,其定义如下
Ent ⁡ ( D ) = − ∑ k = 1 ∣ Y ∣ p k log ⁡ 2 p k \operatorname{Ent}(D)=-\sum_{k=1}^{|\mathcal{Y}|} p_{k} \log _{2} p_{k} Ent(D)=k=1Ypklog2pk
其中 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … ( x m , y m ) } D=\left\{\left(\boldsymbol{x}_{1}, y_{1}\right),\left(\boldsymbol{x}_{2}, y_{2}\right), \ldots\left(\boldsymbol{x}_{m}, y_{m}\right)\right\} D={ (x1,y1),(x2,y2),(xm,ym)}表示样本集合, ∣ y ∣ |y| y表示样本类别综述, p k p_k pk表示第k类样本所占的比例,且有 0 ≤ p k ≤ 1 , ∑ k = 1 ∣ Y ∣ p k = 1 0 \leq p_{k} \leq 1, \sum_{k=1}^{|\mathcal{Y}|} p_{k}=1 0pk1,k=1Ypk=1. 而且 E n t ( D ) Ent(D) Ent(D)值越小,纯度越高。为了具体量化纯度高低,也就是什么样的情况下的取值纯度高,什么情况下纯度低,我们要先求出信息熵的最大最小值。

证明: 0 ≤ Ent ⁡ ( D ) ≤ log ⁡ 2 ∣ Y ∣ 0 \leq \operatorname{Ent}(D) \leq \log _{2}|\mathcal{Y}| 0Ent(D)log2Y

第一步,我们先求信息熵的最大值。

∣ Y ∣ = n , p k = x k |\mathcal{Y}|=n, p_{k}=x_{k} Y=n,pk=xk,那么信息熵 Ent ⁡ ( D ) \operatorname{Ent}(D) Ent(D)就可以看成是一个 n n n元实值函数:
Ent ⁡ ( D ) = f ( x 1 , … , x n ) = − ∑ k = 1 n x k log ⁡ 2 x k \operatorname{Ent}(D)=f\left(x_{1}, \ldots, x_{n}\right)=-\sum_{k=1}^{n} x_{k} \log _{2} x_{k} Ent(D)=f(x1,,xn)=k=1nxklog2xk
其中 0 ≤ x k ≤ 1. ∑ k = 1 n x k = 1 0 \leq x_{k} \leq 1 . \sum_{k=1}^{n} x_{k}=1 0xk1.k=1nxk=1,下面考虑求该多元函数的最值。

如果不考虑约束 0 ≤ x k ≤ 1 0 \leq x_{k} \leq 1 0xk1仅考虑 ∑ k = 1 n x k = 1 \sum_{k=1}^{n} x_{k}=1 k=1nxk=1的话,对 f ( x 1 , … , x n ) f\left(x_{1}, \ldots, x_{n}\right) f(x1,,xn)求最大值等价于求如下最小化问题:
min ⁡ ∑ k = 1 n x k log ⁡ 2 x k  s.t.  ∑ k = 1 n x k = 1 \begin{aligned} \min \sum_{k=1}^{n} x_{k} \log _{2} x_{k} \\ \text { s.t. } \sum_{k=1}^{n} x_{k}=1 \end{aligned} mink=1nxklog2xk s.t. k=1nxk=1
显然,在 0 ≤ x k ≤ 1 0 \leq x_{k} \leq 1 0xk1 时,此问题为凸优化问题。【因为我们同样可以把目标函数看成是n个一元实值函数 x log ⁡ 2 x x\log_{2} x xlog2x相加和的结果。当x取值[0, 1]区间时, ( x log ⁡ 2 x ) ′ ′ > 0 \left(x \log _{2} x\right)^{\prime \prime} > 0 (xlog2x)>0,这就说明一元函数 x log ⁡ 2 x x\log_{2}x xlog2x在区间[0, 1]上是开口向上的凸函数。因此由n个这个一元函数组成的目标函数也是凸函数。现在的约束是线性函数约束,目标函数是凸函数,这就是凸优化问题。

而对于凸优化问题来说,满足KKT条件的点就是最优解。由于此最小化问题仅含等式约束,那么能令其拉格朗日函数的一阶偏导数等于0的点即为满足KKT条件的点。

因此根据拉格朗日乘子法,该优化问题的拉格朗日函数为:
L ( x 1 , … , x n , λ ) = ∑ k = 1 n x k log ⁡ 2 x k + λ ( ∑ k = 1 n x k − 1 ) 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) L(x1,,xn,λ)=k=1nxklog2xk+λ(k=1nxk1)
对拉格朗日函数分别关于各个参数求一阶偏导,并令偏导数等于0可得
∂ L ( x 1 , … , x n , λ ) ∂ x 1 = ∂ ∂ x 1 [ ∑ k = 1 n x k log ⁡ 2 x k + λ ( ∑ k = 1 n x k − 1 ) ] = 0 = log ⁡ 2 x 1 + x 1 ⋅ 1 x 1 ln ⁡ 2 + λ = 0 = log ⁡ 2 x 1 + 1 ln ⁡ 2 + λ = 0 ⇒ λ = − log ⁡ 2 x 1 − 1 ln ⁡ 2 \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 \\ &=\log _{2} x_{1}+x_{1} \cdot \frac{1}{x_{1} \ln 2}+\lambda=0 \\ &=\log _{2} x_{1}+\frac{1}{\ln 2}+\lambda=0 \\ & \Rightarrow \lambda=-\log _{2} x_{1}-\frac{1}{\ln 2} \end{aligned} x1L(x1,,xn,λ)=x1[k=1nxklog2xk+λ(k=1nxk1)]=0=log2x1+x1x1ln21+λ=0=log2x1+ln21+λ=0λ=log2x1ln21
同理
λ = − log ⁡ 2 x 1 − 1 ln ⁡ 2 = − log ⁡ 2 x 2 − 1 ln ⁡ 2 = … = − log ⁡ 2 x n − 1 ln ⁡ 2 \lambda=-\log _{2} x_{1}-\frac{1}{\ln 2}=-\log _{2} x_{2}-\frac{1}{\ln 2}=\ldots=-\log _{2} x_{n}-\frac{1}{\ln 2} λ=log2x1ln21=log2x2ln21==log2xnln21

∂ L ( x 1 … . x n ⋅ λ ) ∂ λ = ∂ ∂ λ [ ∑ k = 1 n x k log ⁡ 2 x k + λ ( ∑ k = 1 n x k − 1 ) ] = 0 ⇒ ∑ k = 1 n x k = 1 \frac{\partial L\left(x_{1} \ldots . x_{n} \cdot \lambda\right)}{\partial \lambda}=\frac{\partial}{\partial \lambda}\left[\sum_{k=1}^{n} x_{k} \log _{2} x_{k}+\lambda\left(\sum_{k=1}^{n} x_{k}-1\right)\right]=0\\ \Rightarrow \sum_{k=1}^{n} x_{k}=1 λL(x1.xnλ)=λ[k=1nxklog2xk+λ(k=1nxk1)]=0k=1nxk=1
所以我们有
x 1 = x 2 = … = x n = 1 n x_{1}=x_{2}=\ldots=x_{n}=\frac{1}{n} x1=x2==xn=n1
又因为 0 ≤ x k ≤ 1 0 \leq x_{k} \leq 1 0xk1, 显然 0 ≤ 1 n ≤ 1 0 \leq \frac{1}{n} \leq 1 0n11, 所以 x 1 = x 2 = … = x n = 1 n x_{1}=x_{2}=\ldots=x_{n}=\frac{1}{n} x1=x2==xn=n1是满足所有约束条件的最优解,也就是当前最小化问题的最小值点,以及原函数 f ( x 1 , … , x n ) f\left(x_{1}, \ldots, x_{n}\right) f(x1,,xn)的最大值点。将最优解代入原函数 f f f中可得
f ( 1 n , … , 1 n ) = − ∑ k = 1 n 1 n log ⁡ 2 1 n = − n ⋅ 1 n log ⁡ 2 1 n = log ⁡ 2 n f\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 f(n1,,n1)=k=1nn1log2n1=nn1log2n1=log2n
所以 f ( x 1 , … , x n ) f\left(x_{1}, \ldots, x_{n}\right) f(x1,,xn)在满足约束 0 ≤ x k ≤ 1. ∑ k = 1 n x k = 1 0 \leq x_{k} \leq 1 . \sum_{k=1}^{n} x_{k}=1 0xk1.k=1nxk=1时的最大值为 log ⁡ 2 n \log_{2}n log2n

第二步,我们求 E n t ( D ) Ent(D) Ent(D)的最小值。

如果不考虑 ∑ k = 1 n x k = 1 \sum_{k=1}^{n} x_{k}=1 k=1nxk=1,仅考虑 0 ≤ x k ≤ 1 0 \leq x_{k} \leq 1 0xk1, f ( x 1 , … , x n ) f\left(x_{1}, \ldots, x_{n}\right) f(x1,,xn)可以看做是n个互不相关的一员函数的加和,也就是
f ( x 1 , … , x n ) = ∑ k = 1 n g ( x k ) g ( x k ) = − x k log ⁡ 2 x k , 0 ≤ x k ≤ 1 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}, \quad 0 \leq x_{k} \leq 1 f(x1,,xn)=k=1ng(xk)g(xk)=xklog2xk,0xk1
因此当 g ( x 1 ) , g ( x 2 ) , … , g ( x n ) g\left(x_{1}\right), g\left(x_{2}\right), \ldots, g\left(x_{n}\right) g(x1),g(x2),,g(xn)分别取到其最小值时, f ( x 1 , … , x n ) f\left(x_{1}, \ldots, x_{n}\right) f(x1,,xn)也就取到了最小值。由于 g ( x 1 ) , g ( x 2 ) , … , g ( x n ) g\left(x_{1}\right), g\left(x_{2}\right), \ldots, g\left(x_{n}\right) g(x1),g(x2),,g(xn)的定义域和函数表达式相同,所以只需要求出 g ( x 1 ) g(x_1) g(x1)的最小值,也就求出了 g ( x 1 ) , g ( x 2 ) , … , g ( x n ) g\left(x_{1}\right), g\left(x_{2}\right), \ldots, g\left(x_{n}\right) g(x1),g(x2),,g(xn)的最小值。为了求 g ( x 1 ) g(x_1) g(x1)的最小值,我们先求 g ( x 1 ) g(x_1) g(x1)关于与 x 1 x_1 x1的一阶与二阶导数
g ′ ( x 1 ) = d ( − x 1 log ⁡ 2 x 1 ) d x 1 = − log ⁡ 2 x 1 − x 1 ⋅ 1 x 1 ln ⁡ 2 = − log ⁡ 2 x 1 − 1 ln ⁡ 2 g ′ ′ ( x 1 ) = d ( g ′ ( x 1 ) ) d x 1 = d ( − log ⁡ 2 x 1 − 1 ln ⁡ 2 ) d x 1 = − 1 x 1 ln ⁡ 2 \begin{array}{c} g^{\prime}\left(x_{1}\right)=\dfrac{d\left(-x_{1} \log _{2} x_{1}\right)}{d x_{1}}=-\log _{2} x_{1}-x_{1} \cdot \dfrac{1}{x_{1} \ln 2}=-\log _{2} x_{1}-\dfrac{1}{\ln 2} \\ g^{\prime \prime}\left(x_{1}\right)=\dfrac{d\left(g^{\prime}\left(x_{1}\right)\right)}{d x_{1}}=\dfrac{d\left(-\log _{2} x_{1}-\dfrac{1}{\ln 2}\right)}{d x_{1}}=-\dfrac{1}{x_{1} \ln 2} \end{array} g(x1)=dx1d(x1log2x1)=log2x1x1x1ln21=log2x1ln21g(x1)=dx1d(g(x1))=dx1d(log2x1ln21)=x1ln21
显然,当 0 ≤ x k ≤ 1 0 \leq x_{k} \leq 1 0xk1时, g ′ ′ g^{\prime \prime} g恒小于0,所以 g ( x 1 ) g(x_1) g(x1)是一个在其定义域范围内开口向下的凹函数,那么其最小值必然在边界取,于是分别取 x 1 = 0 x_1=0 x1=0 x 1 = 1 x_1=1 x1=1,代入 g ( x 1 ) g(x_1) g(x1)可有
g ( 0 ) = − 0 log ⁡ 2 0 = 0 g ( 1 ) = − 1 log ⁡ 2 1 = 0 \begin{array}{l} g(0)=-0 \log _{2} 0=0 \\ g(1)=-1 \log _{2} 1=0 \end{array} g(0)=0log20=0g(1)=1log21=0
所以 g ( x 1 ) g(x_1) g(x1)的最小值是0,同理, g ( x 2 ) , … , g ( x n ) g\left(x_{2}\right), \ldots, g\left(x_{n}\right) g(x2),,g(xn)的最小值也为0, 那么在约束条件 0 ≤ x k ≤ 1 0 \leq x_{k} \leq 1 0xk1下, f ( x 1 , … , x n ) f\left(x_{1}, \ldots, x_{n}\right) f(x1,,xn)的最小值此时也为0.如果加上约束条件 ∑ k = 1 n x k = 1 \sum_{k=1}^{n} x_{k}=1 k=1nxk=1,那么 f ( x 1 , … , x n ) f\left(x_{1}, \ldots, x_{n}\right) f(x1,,xn)的最小值一定大于等于0. 如果令 x k = 1 x_{k}=1 xk=1,那么根据约束 ∑ k = 1 n x k = 1 \sum_{k=1}^{n} x_{k}=1 k=1nxk=1可有 x 1 = x 2 = … = x k − 1 = x k + 1 = … = x n = 0 x_{1}=x_{2}=\ldots=x_{k-1}=x_{k+1}=\ldots=x_{n}=0 x1=x2==xk1=xk+1==xn=0,将其代入 f ( x 1 , … , x n ) f\left(x_{1}, \ldots, x_{n}\right) f(x1,,xn)
f ( 0 , 0 , … , 0 , 1 , 0 , … , 0 ) = − 0 log ⁡ 2 0 − 0 log ⁡ 2 0 … − 0 log ⁡ 2 0 − 1 log ⁡ 2 1 − 0 log ⁡ 2 0 … − 0 log ⁡ 2 0 = 0 f(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 f(0,0,,0,1,0,,0)=0log200log200log201log210log200log20=0
所以 x = 1 , x 1 = x 2 = … = x k − 1 = x k + 1 = … = x n = 0 x=1, x_{1}=x_{2}=\ldots=x_{k-1}=x_{k+1}=\ldots=x_{n}=0 x=1,x1=x2==xk1=xk+1==xn=0一定是 f ( x 1 , … , x n ) f\left(x_{1}, \ldots, x_{n}\right) f(x1,,xn)在满足约束 0 ≤ x k ≤ 1 , ∑ k = 1 n x k = 1 0 \leq x_{k} \leq 1 , \sum_{k=1}^{n} x_{k}=1 0xk1,k=1nxk=1的条件下的最小值点,最小值为0.

也就是说,在一个集合中,针对n种标记取值,属于每一种标记的样本数量都相等,比例都为 1 n \frac{1}{n} n1的时候,信息熵取值最大,纯度最低。而所有样本标记都等于某一个标记、其他标记样本数量为0的时候,信息熵取值最小,纯度最高。

3.2.1.2 条件熵

定义: 在已知样本属性 a a a的取值情况下,度量样本集合纯度的一种指标
H ( D ∣ a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ Ent ⁡ ( D v ) H(D \mid a)=\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right) H(Da)=v=1VDDvEnt(Dv)
其中 a a a表示样本的某个属性,假定属性 a a a V V V个可能的取值 { a 1 , a 2 … , a V } \left\{a^{1}, a^{2} \ldots, a^{V}\right\} { a1,a2,aV}, 样本集合 D D D中在属性 a a a上取值为 a v a^{v} av的样本记为 D v D^{v} Dv E n t ( D v ) Ent(D^{v}) Ent(Dv)表示样本集合 D v D^{v} Dv的信息熵。 H H H值越小,纯度越高。

信息增益:
Gain ⁡ ( D , a ) = Ent ⁡ ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ Ent ⁡ ( D v ) = Ent ⁡ ( D ) − H ( D ∣ a ) \begin{aligned} \operatorname{Gain}(D, a) &=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right) \\ &=\operatorname{Ent}(D)-H(D \mid a) \end{aligned} Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)=Ent(D)H(Da)
选择信息增益值最大的属性作为划分属性,因为信息增益越大,该属性用作划分所获得的的”纯度提升“越大。【注意这里的加和,对v加和是对a属性中不同的取值加和,信息熵中是对划分后的样本集合中的目标类别标签加和

以信息增益为划分准则的ID3决策树对可取值数目较多的属性有所偏好
Gain ⁡ ( D , a ) = Ent ⁡ ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ Ent ⁡ ( D v ) = Ent ⁡ ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ ( − ∑ k = 1 ∣ Y ∣ p k v log ⁡ 2 p k v ) = Ent ⁡ ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ ( − ∑ k = 1 ∣ y ∣ ∣ D k v ∣ ∣ D v ∣ log ⁡ 2 ∣ D k v ∣ ∣ D v ∣ ) \begin{aligned} \operatorname{Gain}(D, a) &=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right) \\ &=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|}\left(-\sum_{k=1}^{|\mathcal{Y}|} p_{k} ^{v}\log _{2} p_{k}^{v}\right) \\ &=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|}\left(-\sum_{k=1}^{|y|} \frac{\left|D_{k}^{v}\right|}{\left|D^{v}\right|} \log _{2} \frac{\left|D_{k}^{v}\right|}{\left|D^{v}\right|}\right) \end{aligned} Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)=Ent(D)v=1VDDvk=1Ypkvlog2pkv=Ent(D)v=1VDDvk=1yDvDkvlog2DvDkv
其中 D k v D_{k}^{v} Dkv是样本集合 D D D中在属性 a a a上取值为 a v a^{v} av且类别为 k k k的样本。

然后我们就可以把决策树基本算法的第8行选择属性设定为: a ∗ = arg ⁡ max ⁡ a ∈ A Gain ⁡ ( D , a ) a_{*}=\underset{a \in A}{\arg \max } \operatorname{Gain}(D, a) a=aAargmaxGain(D,a).

缺点:如果某个属性的取值类别太多,就可能把每一个取值类别划分后就导致每个分支节点的纯度很高(只有一两个样本),虽然信息增益很大,但是因为结点划分太多,得到一个庞大且浅的树,失去了泛化能力

3.2.2 C4.5决策树

定义:以信息增益率为准则来选择划分属性的决策树。为了解决ID3的缺点。

信息增益率:
 Gain_ratio  ( D , a ) = Gain ⁡ ( D , a ) IV ⁡ ( a ) \text { Gain\_ratio }(D, a)=\frac{\operatorname{Gain}(D, a)}{\operatorname{IV}(a)}  Gain_ratio (D,a)=IV(a)Gain(D,a)
其中
I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ log ⁡ 2 ∣ D v ∣ ∣ D ∣ \mathrm{IV}(a)=-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \log _{2} \frac{\left|D^{v}\right|}{|D|} IV(a)=v=1VDDvlog2DDv
如果属性a的可能取值数目越多,也就是V变大,那么IV的值也变大。

缺点:信息增益率对可取值数目较少的属性有所偏好。无法处理回归问题、使用较为复杂的熵来作为特征选择的标准、生成的决策树是一颗较为复杂的多叉树结构

因此C4.5算法并不是直接选择增益率最大的候选划分属性,而是采用了一个启发式:

  1. 先从候选属性中找到信息增益高于平均水平的属性集合
  2. 再从这个属性集合中选择增益率最高的属性

3.2.3 CART决策树

3.2.3.1 定义:

以基尼指数为准则来选择划分属性的决策树

基尼值:
Gini ⁡ ( D ) = ∑ k = 1 ∣ Y ∣ ∑ k ′ ≠ k p k p k ′ = ∑ k = 1 ∣ Y ∣ p k ∑ k ′ ≠ k p k ′ = ∑ k = 1 ∣ Y ∣ p k ( 1 − p k ) = 1 − ∑ k = 1 ∣ Y ∣ p k 2 \operatorname{Gini}(D)=\sum_{k=1}^{|\mathcal{Y}|} \sum_{k^{\prime} \neq k} p_{k} p_{k^{\prime}}=\sum_{k=1}^{|\mathcal{Y}|} p_{k} \sum_{k^{\prime} \neq k} p_{k^{\prime}}=\sum_{k=1}^{|\mathcal{Y}|} p_{k}\left(1-p_{k}\right)=1-\sum_{k=1}^{|\mathcal{Y}|} p_{k}^{2} Gini(D)=k=1Yk=kpkpk=k=1Ypkk=kpk=k=1Ypk(1pk)=1k=1Ypk2
直观来说,基尼值反映了从数据集 D D D中随机抽取两个样本,其类别标记不一致的概率。

基尼指数:
 Gini_index  ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ Gini ⁡ ( D v ) \text { Gini\_index }(D, a)=\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Gini}\left(D^{v}\right)  Gini_index (D,a)=v=1VDDvGini(Dv)
基尼值和基尼指数越小,样本集合纯度越高。

3.2.3.2 CART决策树分类算法:

  1. 根据基尼指数公式找出基尼指数最小的属性【伪代码算法第8行变成 a ∗ = arg ⁡ min ⁡ a ∈ A Gini_index ⁡ ( D , a ) a_{*}=\underset{a \in A}{\arg \min } \operatorname{Gini\_index}(D, a) a=aAargminGini_index(D,a)
  2. 计算属性 a ∗ a_{*} a的所有可能取值的基尼值 Gini ⁡ ( D v ) , v = 1 , 2 , … , V \operatorname{Gini}\left(D^{v}\right), v=1,2, \ldots, V Gini(Dv),v=1,2,,V, 选择基尼指数最小的取值 a ∗ v a^{v}_{*} av作为划分点,将集合 D D D划分为 D 1 , D 2 D_1, D_{2} D1,D2两个集合(分支结点),其中 D 1 D_1 D1集合的样本为 a ∗ = a ∗ v a_{*}=a_{*}^{v} a=av的样本, D 2 D_2 D2集合为 a ∗ ≠ a ∗ v a_{*} \neq a_{*}^{v} a=av
  3. 对集合 D 1 D_1 D1 D 2 D_2 D2重复递归步骤1,2,直到满足停止条件

3.2.3.3 CART决策树回归算法:

  1. 根据以下公式找到最优划分特征 a ∗ a_{*} a和最优划分点 a ∗ v a_{*}^{v} av

a ∗ , a ∗ v = arg ⁡ min ⁡ a , a v [ min ⁡ c 1 ∑ x i ∈ D 1 ( a , a v ) ( y i − c 1 ) 2 + min ⁡ c 2 ∑ x , ∈ D 2 ( a , a v ) ( y i − c 2 ) 2 ] a_{*}, a_{*}^{v}=\underset{a, a^{v}}{\arg \min }\left[\min_{c_{1}} \sum_{x_i \in D_{1}\left(a, a^{v}\right)}\left(y_{i}-c_{1}\right)^{2}+\min _{c_{2}} \sum_{x, \in D_{2}\left(a, a^{v}\right)}\left(y_{i}-c_{2}\right)^{2}\right] a,av=a,avargminc1minxiD1(a,av)(yic1)2+c2minx,D2(a,av)(yic2)2

其中, D 1 ( a , a v ) D_{1}\left(a, a^{v}\right) D1(a,av)表示在属性 a a a上取值小于等于 a v a^{v} av的样本集合, D 2 ( a , a v ) D_2(a, a^{v}) D2(a,av)表示在属性 a a a上取值大于 a v a^{v} av的样本集合, c 1 c_1 c1表示 D 1 D_1 D1的样本输出均值, c 2 c_2 c2表示 D 2 D_2 D2的样本输出均值

  1. 根据划分点 a ∗ v a_{*}^{v} av将集合 D D D划分为 D 1 D_1 D1 D 2 D_2 D2两个集合(分支节点)
  2. 对集合 D 1 D_1 D1 D 2 D_2 D2重复递归步骤1,2,直到满足停止条件

3.3 决策树剪枝处理

剪枝是决策树学习算法对付过拟合的主要手段

3.3.1 预剪枝

在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标注为叶结点。基于信息增益准则

看是否提高在验证集上的准确率

缺点:有些分支的当前划分虽不能提升泛化性能,但是在其基础上的后续划分却有可能导致性能提高。预剪枝基于贪心本质禁止这些分支继续划分,因此有可能导致模型欠拟合

3.3.2后剪枝

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

缺点:时间复杂度比预剪枝更高

预剪枝 后剪枝
时间开销 训练 ↓ \downarrow , 测试 ↓ \downarrow 训练 ↑ \uparrow , 测试 ↓ \downarrow
过/欠拟合风险 ↓ \downarrow , 欠 ↑ \uparrow ↓ \downarrow , 欠不变
泛化能力 更好

3.4 决策树处理连续值、缺失值

3.4.1 连续值处理

最简单的策略是采用二分法对连续属性进行处理。C4.5算法中采用了

给定样本集 D D D和连续属性a, 假定a在 D D D上出现n个不同取值,并将它们从小到大进行排序 { a 1 , a 2 , … , a n } \left\{a^{1}, a^{2}, \ldots, a^{n}\right\} { a1,a2,,an}. 我们课考察包含 n − 1 n-1 n1个元素的候选划分点集合
T a = { a i + a i + 1 2 ∣ 1 ⩽ i ⩽ n − 1 } T_{a}=\left\{\frac{a^{i}+a^{i+1}}{2} \mid 1 \leqslant i \leqslant n-1\right\} Ta={ 2ai+ai+11in1}
也就是把区间 [ a i , a i + 1 ) \left[a^{i}, a^{i+1}\right) [ai,ai+1)的中位点 a i + a i + 1 2 \frac{a^{i}+a^{i+1}}{2} 2ai+ai+1作为候选划分点。然后就可以考察这些划分点,选取最优的划分点进行样本集合的划分。
Gain ⁡ ( D , a ) = max ⁡ t ∈ T a Gain ⁡ ( D , a , t ) = max ⁡ t ∈ T a Ent ⁡ ( D ) − ∑ λ ∈ { − , + } ∣ D t λ ∣ ∣ D ∣ Ent ⁡ ( D t λ ) \begin{aligned} \operatorname{Gain}(D, a) &=\max _{t \in T_{a}} \operatorname{Gain}(D, a, t) \\ &=\max _{t \in T_{a}} \operatorname{Ent}(D)-\sum_{\lambda \in\{-,+\}} \frac{\left|D_{t}^{\lambda}\right|}{|D|} \operatorname{Ent}\left(D_{t}^{\lambda}\right) \end{aligned} Gain(D,a)=tTamaxGain(D,a,t)=tTamaxEnt(D)λ{ ,+}DDtλEnt(Dtλ)
其中 Gain ( D , a , t ) \text{Gain}(D, a, t) Gain(D,a,t)是样本集 D D D基于划分点 t t t二分后的信息增益。于是,我们就可以选择是 Gain ( D , a , t ) \text{Gain}(D, a, t) Gain(D,a,t)最大化的划分点.

3.4.2 缺失值处理

待解决的两个问题:

  1. 如何在属性值确实的情况下进行划分属性选择?
  2. 给定划分选择,若样本在该属性上的值缺失,如何对样本进行划分?

首先考虑问题1.

给定训练集 D D D和属性 a a a,令 D ~ \tilde{D} D~表示 D D D中在属性 a a a上没有缺失值的样本子集。显然我们只能根据 D ~ \tilde{D} D~来判断属性 a a a的优劣。假定属性 a a a V V V个可能取值 { a 1 , a 2 , … , a V } \left\{a^{1}, a^{2}, \ldots, a^{V}\right\} { a1,a2,,aV}, 令 D ~ v \tilde{D}^{v} D~v表示 D ~ \tilde{D} D~中在属性a上取值为 a v a^{v} av的样本子集, D ~ k 表 示 \tilde{D}_{k}表示 D~k D ~ \tilde{D} D~中属于第 k k k类( k = 1 , 2 , … , ∣ Y ∣ k=1,2, \ldots,|\mathcal{Y}| k=1,2,,Y)的样本子集。我们假定为每个样本 x \boldsymbol{x} x赋予一个权重 w x w_{\boldsymbol{x}} wx(在学习开始阶段,根节点中各样本的权重初始化为1), 并定义
ρ = ∑ x ∈ D ~ w x ∑ x ∈ D w x p ~ k = ∑ x ∈ D ~ k w x ∑ x ∈ D ~ w x ( 1 ⩽ k ⩽ ∣ Y ∣ ) r ~ v = ∑ x ∈ D ~ v w x ∑ x ∈ D ~ w x ( 1 ⩽ v ⩽ V ) \begin{aligned} \rho &=\frac{\sum_{\boldsymbol{x} \in \tilde{D}} w_{\boldsymbol{x}}}{\sum_{\boldsymbol{x} \in D} w_{\boldsymbol{x}}} \\ \tilde{p}_{k} &=\frac{\sum_{\boldsymbol{x} \in \tilde{D}_{k}} w_{\boldsymbol{x}}}{\sum_{\boldsymbol{x} \in \tilde{D}} w_{\boldsymbol{x}}} \quad(1 \leqslant k \leqslant|\mathcal{Y}|) \\ \tilde{r}_{v} &=\frac{\sum_{\boldsymbol{x} \in \tilde{D}^{v}} w_{\boldsymbol{x}}}{\sum_{\boldsymbol{x} \in \tilde{D}} w_{\boldsymbol{x}}} \quad(1 \leqslant v \leqslant V) \end{aligned} ρp~kr~v=xDwxxD~wx=xD~wxxD~kwx(1kY)=xD~wxxD~vwx(1vV)
显然,对属性 a a a

  1. ρ \rho ρ表示无缺失值样本所占的比例
  2. p ~ k \tilde{p}_{k} p~k表示无缺失值样本中第 k k k类所占的比例
  3. r ~ v \tilde{r}_{v} r~v则表示无缺失值样本中在属性 a a a上取值 a v a^{v} av的样本所占的比例。

显然: ∑ k = 1 ∣ Y ∣ p ~ k = 1 , ∑ v = 1 V r ~ v = 1 \sum_{k=1}^{|\mathcal{Y}|} \tilde{p}_{k}=1, \sum_{v=1}^{V} \tilde{r}_{v}=1 k=1Yp~k=1,v=1Vr~v=1

信息增益的计算式变为
Gain ⁡ ( D , a ) = ρ × Gain ⁡ ( D ~ , a ) = ρ × ( Ent ⁡ ( D ~ ) − ∑ v = 1 V r ~ v Ent ⁡ ( D ~ v ) ) \begin{aligned} \operatorname{Gain}(D, a) &=\rho \times \operatorname{Gain}(\tilde{D}, a) \\ &=\rho \times\left(\operatorname{Ent}(\tilde{D})-\sum_{v=1}^{V} \tilde{r}_{v} \operatorname{Ent}\left(\tilde{D}^{v}\right)\right) \end{aligned} Gain(D,a)=ρ×Gain(D~,a)=ρ×(Ent(D~)v=1Vr~vEnt(D~v))
其中
Ent ⁡ ( D ~ ) = − ∑ k = 1 ∣ Y ∣ p ~ k log ⁡ 2 p ~ k \operatorname{Ent}(\tilde{D})=-\sum_{k=1}^{|\mathcal{Y}|} \tilde{p}_{k} \log _{2} \tilde{p}_{k} Ent(D~)=k=1Yp~klog2p~k
本质上就是通过无缺失样本的比例对各个量进行比例缩放。其中r和p本质上和之前的 ∣ D v ∣ ∣ D ∣ \frac{\left|D^{v}\right|}{|D|} DDv ∣ D k ∣ ∣ D ∣ \frac{\left|D_{k}\right|}{\left|D\right|} DDk没有区别

然后考虑问题2.我们已经知道选择哪个划分属性了,然后把样本喂入决策树模型。如果样本 x x x在划分属性 a a a上的取值已知,则将 x x x划入与其取值对应的子结点,且样本权值在子结点中保持 w x w_x wx。如果样本 x x x在划分属性 a a a上取值未知,就将 x x x同时划入所有子结点,且样本权值在与属性值 a v a^{v} av对应的子节点中调整为 r ~ v ⋅ w x \tilde{r}_{v} \cdot w_{\boldsymbol{x}} r~vwx.也就是让同一个样本以不同概率划入到不同的子结点中。

你可能感兴趣的:(《机器学习》西瓜书第15期)