一颗决策树包括:
基本流程遵循分而治之
伪代码:
决策树算法是典型的递归算法。三种递归返回情况:
【后验概率 ∝ \propto ∝ 可能性 × \times × 先验概率】
划分标准是能不断提高提高结点纯度
定义:度量样本集合纯度最常用的一种指标,其定义如下
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=1∑∣Y∣pklog2pk
其中 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 0≤pk≤1,∑k=1∣Y∣pk=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}| 0≤Ent(D)≤log2∣Y∣
第一步,我们先求信息熵的最大值。
令 ∣ 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=1∑nxklog2xk
其中 0 ≤ x k ≤ 1. ∑ k = 1 n x k = 1 0 \leq x_{k} \leq 1 . \sum_{k=1}^{n} x_{k}=1 0≤xk≤1.∑k=1nxk=1,下面考虑求该多元函数的最值。
如果不考虑约束 0 ≤ x k ≤ 1 0 \leq x_{k} \leq 1 0≤xk≤1仅考虑 ∑ 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=1∑nxklog2xk s.t. k=1∑nxk=1
显然,在 0 ≤ x k ≤ 1 0 \leq x_{k} \leq 1 0≤xk≤1 时,此问题为凸优化问题。【因为我们同样可以把目标函数看成是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=1∑nxklog2xk+λ(k=1∑nxk−1)
对拉格朗日函数分别关于各个参数求一阶偏导,并令偏导数等于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} ∂x1∂L(x1,…,xn,λ)=∂x1∂[k=1∑nxklog2xk+λ(k=1∑nxk−1)]=0=log2x1+x1⋅x1ln21+λ=0=log2x1+ln21+λ=0⇒λ=−log2x1−ln21
同理
λ = − 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} λ=−log2x1−ln21=−log2x2−ln21=…=−log2xn−ln21
又
∂ 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=1∑nxklog2xk+λ(k=1∑nxk−1)]=0⇒k=1∑nxk=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 0≤xk≤1, 显然 0 ≤ 1 n ≤ 1 0 \leq \frac{1}{n} \leq 1 0≤n1≤1, 所以 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=1∑nn1log2n1=−n⋅n1log2n1=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 0≤xk≤1.∑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 0≤xk≤1, 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=1∑ng(xk)g(xk)=−xklog2xk,0≤xk≤1
因此当 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)=−log2x1−x1⋅x1ln21=−log2x1−ln21g′′(x1)=dx1d(g′(x1))=dx1d(−log2x1−ln21)=−x1ln21
显然,当 0 ≤ x k ≤ 1 0 \leq x_{k} \leq 1 0≤xk≤1时, 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 0≤xk≤1下, 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=…=xk−1=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)=−0log20−0log20…−0log20−1log21−0log20…−0log20=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=…=xk−1=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 0≤xk≤1,∑k=1nxk=1的条件下的最小值点,最小值为0.
【也就是说,在一个集合中,针对n种标记取值,属于每一种标记的样本数量都相等,比例都为 1 n \frac{1}{n} n1的时候,信息熵取值最大,纯度最低。而所有样本标记都等于某一个标记、其他标记样本数量为0的时候,信息熵取值最小,纯度最高。】
定义: 在已知样本属性 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(D∣a)=v=1∑V∣D∣∣Dv∣Ent(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=1∑V∣D∣∣Dv∣Ent(Dv)=Ent(D)−H(D∣a)
选择信息增益值最大的属性作为划分属性,因为信息增益越大,该属性用作划分所获得的的”纯度提升“越大。【注意这里的加和,对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=1∑V∣D∣∣Dv∣Ent(Dv)=Ent(D)−v=1∑V∣D∣∣Dv∣⎝⎛−k=1∑∣Y∣pkvlog2pkv⎠⎞=Ent(D)−v=1∑V∣D∣∣Dv∣⎝⎛−k=1∑∣y∣∣Dv∣∣Dkv∣log2∣Dv∣∣Dkv∣⎠⎞
其中 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∗=a∈AargmaxGain(D,a).
缺点:如果某个属性的取值类别太多,就可能把每一个取值类别划分后就导致每个分支节点的纯度很高(只有一两个样本),虽然信息增益很大,但是因为结点划分太多,得到一个庞大且浅的树,失去了泛化能力
定义:以信息增益率为准则来选择划分属性的决策树。为了解决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=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣
如果属性a的可能取值数目越多,也就是V变大,那么IV的值也变大。
缺点:信息增益率对可取值数目较少的属性有所偏好。无法处理回归问题、使用较为复杂的熵来作为特征选择的标准、生成的决策树是一颗较为复杂的多叉树结构。
因此C4.5算法并不是直接选择增益率最大的候选划分属性,而是采用了一个启发式:
以基尼指数为准则来选择划分属性的决策树
基尼值:
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=1∑∣Y∣k′=k∑pkpk′=k=1∑∣Y∣pkk′=k∑pk′=k=1∑∣Y∣pk(1−pk)=1−k=1∑∣Y∣pk2
直观来说,基尼值反映了从数据集 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=1∑V∣D∣∣Dv∣Gini(Dv)
基尼值和基尼指数越小,样本集合纯度越高。
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∗,a∗v=a,avargmin⎣⎡c1minxi∈D1(a,av)∑(yi−c1)2+c2minx,∈D2(a,av)∑(yi−c2)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的样本输出均值
剪枝是决策树学习算法对付过拟合的主要手段
在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标注为叶结点。基于信息增益准则
【看是否提高在验证集上的准确率】
缺点:有些分支的当前划分虽不能提升泛化性能,但是在其基础上的后续划分却有可能导致性能提高。预剪枝基于贪心本质禁止这些分支继续划分,因此有可能导致模型欠拟合
先从训练集生成一颗完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将子树替换为叶子结点
缺点:时间复杂度比预剪枝更高
预剪枝 | 后剪枝 | |
---|---|---|
时间开销 | 训练 ↓ \downarrow ↓, 测试 ↓ \downarrow ↓ | 训练 ↑ \uparrow ↑, 测试 ↓ \downarrow ↓ |
过/欠拟合风险 | 过 ↓ \downarrow ↓, 欠 ↑ \uparrow ↑ | 过 ↓ \downarrow ↓, 欠不变 |
泛化能力 | 更好 |
最简单的策略是采用二分法对连续属性进行处理。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 n−1个元素的候选划分点集合
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+1∣1⩽i⩽n−1}
也就是把区间 [ 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)=t∈TamaxGain(D,a,t)=t∈TamaxEnt(D)−λ∈{ −,+}∑∣D∣∣∣Dtλ∣∣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)最大化的划分点.
待解决的两个问题:
首先考虑问题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=∑x∈Dwx∑x∈D~wx=∑x∈D~wx∑x∈D~kwx(1⩽k⩽∣Y∣)=∑x∈D~wx∑x∈D~vwx(1⩽v⩽V)
显然,对属性 a a a:
显然: ∑ 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=1∣Y∣p~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=1∑Vr~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=1∑∣Y∣p~klog2p~k
【本质上就是通过无缺失样本的比例对各个量进行比例缩放。其中r和p本质上和之前的 ∣ D v ∣ ∣ D ∣ \frac{\left|D^{v}\right|}{|D|} ∣D∣∣Dv∣和 ∣ D k ∣ ∣ D ∣ \frac{\left|D_{k}\right|}{\left|D\right|} ∣D∣∣Dk∣没有区别】
然后考虑问题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~v⋅wx.也就是让同一个样本以不同概率划入到不同的子结点中。