机器学习——分类算法之决策树

机器学习——分类算法之决策树

    • 前言
    • 1、信息熵
    • 2、条件熵
    • ID3算法
    • C4.5决策树
    • CART决策树
      • 1、CART决策树的分类算法
      • 2、CART决策树的回归算法
    • 剪枝
      • 1、预剪枝
      • 2、后剪枝
    • 连续值和缺失值的处理
      • 1、连续值的处理
      • 2、缺失值的处理

前言

主要涉及ID3决策树、C4.5决策树、CART决策树、决策树的剪枝、连续值和缺失值的处理。

决策树是基于树结构来进行决策的,一般的一颗决策树包含一个根结点、若干个内部结点和若干个叶结点。叶结点对应于决策结果,其他每个结点则对应于一个属性测试,每个结点包含的样本集合根据属性测试的结果被划分到子结点中,根结点包含样本全集。

决策树的工作原理和我们平时做决定时所采用的的机制是很相似的,也就是根据一堆if、else规则来进行判断,不同的判断条件也就构成了不同的模型。

决策树的学习目的是为了产生一颗泛化能力强的决策树,为了达到此目的,最重要的环节包括属性的划分、决策树的剪枝。

属性划分的要求、目标:希望决策树的分支结点点所包含的样本尽可能属于同一类别,即结点的纯度越来越高。

那么基于上面的学习目标,产生了三种划分属性的度量指标:信息增益、增益率、基尼指数。

1、信息熵

“信息熵”(information entropy)是度量样本集合纯度最常用的一种指标,代表一个系统中蕴含多少信息量,信息量越大表明一个系统的不确定性就越大,就存在越多的可能性,即信息熵大。

下面开始推导ID3算法。

假定当前样本集合D中第k类样本所占的比例为 P k ( k = 1 , 2 , . . . , ∣ y ∣ ) P_{k}(k=1,2,...,|y|) Pk(k=1,2,...,y),则D的信息熵为:
E n t ( D ) = − ∑ k = 1 ∣ y ∣ P k l o g 2 P k (1) Ent(D)= -\sum_{k=1}^{|y|}P_{k}log_{2}P_{k}\tag{1} Ent(D)=k=1yPklog2Pk(1)
其中,|y|表示样本类别总数, P k P_{k} Pk表示第k类样本所占的比例,且 0 ≤ P k ≤ 1 , ∑ k = 1 n P k = 1 0\leq P_{k}\leq 1,\sum_{k=1}^{n}P_{k}=1 0Pk1,k=1nPk=1Ent(D)值越小,纯度越高。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
举例说明式(1):
假设当前数据集有5个样本 D = { x 1 , x 2 , x 3 , x 4 , x 5 } D = \{x_{1},x_{2},x_{3},x_{4},x_{5}\} D={x1,x2,x3,x4,x5},其标签为分别为{0,0,1,2,2}(三类,k=1,2,3),那么每一类所占比为 P 1 = 2 / 5 , P 2 = 1 / 5 , P 3 = 2 / 5 P_{1} = 2 / 5 ,P_{2} = 1 / 5,P_{3} = 2 / 5 P1=2/5,P2=1/5,P3=2/5,则此时的信息熵为:
E n t ( D ) = − ∑ k = 1 3 P k l o g 2 P k = − P 1 l o g 2 P 1 − P 2 l o g 2 P 2 − P 3 l o g 2 P 3 = − 2 5 l o g 2 2 5 + − 1 5 l o g 2 1 5 + − 2 5 l o g 2 2 5 Ent(D)=-\sum_{k =1}^{3}P_{k}log_{2}P_{k}=-P_{1}log_{2}P_{1}-P_{2}log_{2}P_{2}-P_{3}log_{2}P_{3}\\=-\frac{2}{5}log_{2}\frac{2}{5}+-\frac{1}{5}log_{2}\frac{1}{5}+-\frac{2}{5}log_{2}\frac{2}{5} Ent(D)=k=13Pklog2Pk=P1log2P1P2log2P2P3log2P3=52log252+51log251+52log252
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

上面说了“Ent(D)值越小,纯度越高”,那么这个程度该怎样量化呢?就是说什么样的样本可以说是程度高?什么样的样本可以说是纯度低?下面通过求解信息熵的最大值和最小值来说明这个问题。
+++++++++++++++++++++++++++++++++++++证明信息熵的取值范围+++++++++++++++++++++++++
证明式:
0 ≤ E n t ( D ) ≤ l o g 2 ∣ y ∣ (2) 0\leq Ent(D)\leq log_{2}|y|\tag{2} 0Ent(D)log2y(2)

1、首先求Ent(D)的最大值:
若令 ∣ y ∣ = n , P k = x k |y|=n,P_{k}=x_{k} y=n,Pk=xk,那么信息熵Ent(D)就可以看做一个n元实值函数,也即:
E n t ( D ) = f ( x 1 , x 2 , . . . , x n ) = − ∑ k = 1 n x k l o g 2 x k (3) Ent(D)=f(x_{1},x_{2},...,x_{n})=-\sum_{k=1}^{n}x_{k}log_{2}x_{k}\tag{3} Ent(D)=f(x1,x2,...,xn)=k=1nxklog2xk(3)
其中, 0 ≤ x k ≤ 1 , ∑ k = 1 n x k = 1 0\leq x_{k}\leq1,\sum_{k=1}^{n} x_{k}=1 0xk1,k=1nxk=1

所以,此时若想求信息熵的最大值,等价于求n元实值函数 f ( x 1 , x 2 , . . . , x n ) f(x_{1},x_{2},...,x_{n}) f(x1,x2,...,xn)的最大值,也就是将原求信息熵的最大值转成了求多元实值函数求最值的问题,并且对于每一个 x k x_{k} xk都要满足约束 0 ≤ x k ≤ 1 , ∑ k = 1 n x k = 1 0\leq x_{k}\leq1,\sum_{k=1}^{n} x_{k}=1 0xk1,k=1nxk=1,即求有约束的最大值问题。

如果不考虑约束 0 ≤ x k ≤ 1 0\leq x_{k}\leq1 0xk1,仅考虑 ∑ k = 1 n x k = 1 \sum_{k=1}^{n} x_{k}=1 k=1nxk=1的话,对 f ( x 1 , x 2 , . . . , x n ) f(x_{1},x_{2},...,x_{n}) f(x1,x2,...,xn)求最大值等价于如下最小化问题:
m i n   ∑ k = 1 n x k l o g 2 x k (4) min\ \sum_{k=1}^{n}x_{k}log_{2}x_{k}\tag{4} min k=1nxklog2xk(4)
s . t .   ∑ k = 1 n x k = 1 (5) s.t.\ \sum_{k=1}^{n}x_{k}=1\tag{5} s.t. k=1nxk=1(5)
很明显上面的目标函数(4)是凸函数(结合x的取值范围和目标函数的二阶导数恒大于0),并且其约束条件(5)明显是线性函数,所以该问题就是凸优化问题。

显然,对于 0 ≤ x k ≤ 1 0\leq x_{k}\leq1 0xk1时,该问题为凸优化问题,而对于凸优化问题来说,满足KKT条件的点即为最优解。由于此最小化问题仅含等式约束,那么能另其拉格朗日函数的一阶偏导数等于0的点即为满足KKT条件的点。

由上面红色字体的分析,根据拉格朗日乘子法,该优化问题的拉格朗日函数为:
L ( x 1 , x 2 , . . . , x n , λ ) = ∑ k = 1 n x k l o g 2 x k + λ ( ∑ k = 1 n x k − 1 ) (6) L(x_{1},x_{2},...,x_{n},\lambda) =\sum_{k=1}^{n}x_{k}log_{2}x_{k}+\lambda (\sum_{k=1}^{n}x_{k}-1)\tag{6} L(x1,x2,...,xn,λ)=k=1nxklog2xk+λ(k=1nxk1)(6)
对上面拉格朗日函数分别关于 x 1 , . . . , x n , λ x_{1},...,x_{n},\lambda x1,...,xn,λ求一阶偏导数,并令偏导数等于0

首先 x 1 x_{1} x1求偏导,并令其等于0:
∂ L ( x 1 , x 2 , . . . , x n ) ∂ x 1 = ∂ ∂ x 1 [ ∑ k = 1 n x k l o g 2 x k + λ ( ∑ k = 1 n x k − 1 ) ] = l o g 2 x 1 + x 1 ⋅ 1 x 1 l n 2 + λ = l o g 2 x 1 + ⋅ 1 l n 2 + λ = 0 (7) \frac{\partial L(x_{1},x_{2},...,x_{n})}{\partial x_{1}}=\frac{\partial }{\partial x_{1}}[\sum_{k=1}^{n}x_{k}log_{2}x_{k}+\lambda (\sum_{k=1}^{n}x_{k}-1)]=log_{2}x_{1}+x_{1\cdot \frac{1}{x_{1}ln2}}+\lambda \\=log_{2}x_{1}+\cdot \frac{1}{ln2}+\lambda =0\tag{7} x1L(x1,x2,...,xn)=x1[k=1nxklog2xk+λ(k=1nxk1)]=log2x1+x1x1ln21+λ=log2x1+ln21+λ=0(7)
所以可得 λ \lambda λ:
λ = − l o g 2 x 1 − 1 l n 2 (8) \lambda = -log_{2}x_{1}-\frac{1}{ln2}\tag{8} λ=log2x1ln21(8)

同理,当令剩下的 x 2 , . . x n x_{2},..x_{n} x2,..xn的导数为0时,求出的 l a m b d a lambda lambda都类似于式(8),这里就不一一求了,即:
λ = − l o g 2 x 1 − 1 l n 2 = − l o g 2 x 2 − 1 l n 2 = . . . = − l o g 2 x n − 1 l n 2 (9) \lambda = -log_{2}x_{1}-\frac{1}{ln2}=-log_{2}x_{2}-\frac{1}{ln2}=...=-log_{2}x_{n}-\frac{1}{ln2}\tag{9} λ=log2x1ln21=log2x2ln21=...=log2xnln21(9)
然后对式(6)中的 λ \lambda λ求偏导:
∂ L ( x 1 , x 2 , . . . , x n ) ∂ λ = ∂ ∂ λ [ ∑ k = 1 n x k l o g 2 x k + λ ( ∑ k = 1 n x k − 1 ) ] = 0 (10) \frac{\partial L(x_{1},x_{2},...,x_{n})}{\partial \lambda}=\frac{\partial }{\partial \lambda}[\sum_{k=1}^{n}x_{k}log_{2}x_{k}+\lambda (\sum_{k=1}^{n}x_{k}-1)]=0\tag{10} λL(x1,x2,...,xn)=λ[k=1nxklog2xk+λ(k=1nxk1)]=0(10)
由式(10)可得:
∑ k = 1 n x k = 1 (11) \sum_{k=1}^{n}x_{k}=1\tag{11} k=1nxk=1(11)
所以根据式(9)和(11)可得该最小化问题的最优解
x 1 = x 2 = . . . = x n = 1 n (12) x_{1}=x_{2}=...=x_{n}=\frac{1}{n}\tag{12} x1=x2=...=xn=n1(12)
又因为 x k x_{k} xk还需要满足约束 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 x_{1}=x_{2}=...=x_{n} x1=x2=...=xn是满足所有约束的最优解,也即为当前最小化问题的最小值点,同时也是 f ( x 1 , x 2 , . . . , x n ) 的 最 大 值 点 。 f(x_{1},x_{2},...,x_{n})的最大值点。 f(x1,x2,...,xn)
x 1 , x 2 , . . . , x n = 1 n x_{1},x_{2},...,x_{n}=\frac{1}{n} x1,x2,...,xn=n1带入 f ( x 1 , x 2 , . . . , x n ) f(x_{1},x_{2},...,x_{n}) f(x1,x2,...,xn)中可得:
f ( 1 n , . . . , 1 n ) = = ∑ k = 1 n 1 n l o g 2 1 n = − n ⋅ 1 n l o g 2 1 n = l o g 2 n (13) f(\frac{1}{n},...,\frac{1}{n})==\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\tag{13} f(n1,...,n1)==k=1nn1log2n1=nn1log2n1=log2n(13)

证明完了信息熵的最大值,现在给出一个总结:
f ( x 1 , x 2 , . . . , x n ) f(x_{1},x_{2},...,x_{n}) f(x1,x2,...,xn)在满足约束 0 ≤ x k ≤ 1 , ∑ k = 1 n x k = 1 0\leq x_{k}\leq1,\sum_{k=1}^{n} x_{k}=1 0xk1,k=1nxk=1时的最大值为 l o g 2 n log_{2}n log2n
关于信息熵的取值范围已经给出证明,当信息熵取值最大时,表明信息是最不纯的,那么最不纯的时候有什么表现呢,即当信息熵取值最大时,样本有什么样的表现呢?
我们知道 x k x_{k} xk表示的就是第k类样本在集合中所占比例,观察式(12),当信息熵值最大时, x k x_{k} xk均相等,也即 P k P_{k} Pk均相等。也就是说,此时样本集合中的各类样本式均匀分布的,那么这时候样本集合的纯度就是最低的时候。


2、现在开始证明信息熵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的话,由式(3),可知 f ( x 1 , x 2 , . . . , x n ) f(x_{1},x_{2},...,x_{n}) f(x1,x2,...,xn)可以看做是n个互不相关的一元函数的加和,也即:
f ( x 1 , x 2 , . . . , x n ) = ∑ k = 1 n g ( x k ) (14) f(x_{1},x_{2},...,x_{n})=\sum_{k=1}^{n}g(x_{k})\tag{14} f(x1,x2,...,xn)=k=1ng(xk)(14)
其中, g ( x k ) = − ∑ k = 1 n x k l o g 2 x k , 0 ≤ x k ≤ 1 g(x_{k})=-\sum_{k=1}^{n}x_{k}log_{2}x_{k},0\leq x_{k}\leq 1 g(xk)=k=1nxklog2xk,0xk1

那么当 g ( x 1 ) , g ( x 2 ) , , . . . , g ( x n ) g(x_{1}),g(x_{2}),,...,g(x_{n}) g(x1),g(x2),,...,g(xn)分别取到其最小值时, f ( x 1 , x 2 , . . . , x n ) f(x_{1},x_{2},...,x_{n}) f(x1,x2,...,xn)也就取到了最小值。

由于 g ( x 1 ) , g ( x 2 ) , , . . . , g ( x n ) g(x_{1}),g(x_{2}),,...,g(x_{n}) g(x1),g(x2),,...,g(xn)定义域和函数表达式均相同,所以只需求出 g ( x 1 ) g(x_{1}) g(x1)的最小值也就求出了 g ( x 1 ) , g ( x 2 ) , , . . . , g ( x n ) g(x_{1}),g(x_{2}),,...,g(x_{n}) 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 l o g 2 x 1 ) d x 1 = − l o g 2 x 1 − x 1 ⋅ 1 x 2 l n 2 = − l o g 2 x 1 − 1 l n 2 14 ) (() g^{,}(x_{1})=\frac{d(-x_{1}log_{2}x_{1})}{dx_{1}}=-log_{2}x_{1}-x_{1 }\cdot\frac{1}{x_{2}ln2}=-log_{2}x_{1}-\frac{1}{ln2}\tag(14) g,(x1)=dx1d(x1log2x1)=log2x1x1x2ln21=log2x1ln2114)(()
g , , ( x 1 ) = d ( g , ( x 1 ) ) d x 1 = d ( − l o g 2 x 1 − 1 l n 2 ) d x 1 = − 1 x 1 l n 2 (15) g^{,,}(x_{1})=\frac{d(g^{,}(x_{1}))}{dx_{1}}=\frac{d(-log_2x_1-\frac{1}{ln2})}{dx_{1}}=-\frac{1}{x_{1}ln2}\tag{15} g,,(x1)=dx1d(g,(x1))=dx1d(log2x1ln21)=x1ln21(15)

显然,当 0 ≤ x k ≤ 1 0\leq x_{k}\leq 1 0xk1时,所以 g ( x 1 ) g(x_{1}) g(x1)的二阶导小于0,所以 g ( x 1 ) g(x_{1}) g(x1)是一个在其定义域范围内开口向下的凹函数,那么其最小值必然在边界取,于是分别取 x 1 = 0 和 x 1 = 1 x_{1}=0和x_{1}=1 x1=0x1=1带入到 g ( x 1 ) g(x_{1}) g(x1)可得:
g ( 0 ) = − 0 l o g 2 0 = 0 g ( 1 ) = − 1 l o g 2 1 = 0 (16) g(0)=-0log_{2}0=0 \\ g(1)=-1log_{2}1=0\tag{16} g(0)=0log20=0g(1)=1log21=0(16)

所以 g ( x 1 ) g(x_1) g(x1)的最小值为0,同理可得 g ( x 2 ) , g ( x 3 ) , . . . , g ( x n ) g(x_{2}),g(x_{3}),...,g(x_{n}) g(x2),g(x3),...,g(xn)的最小值也为0,那么 f ( x 1 , x 2 , . . . , x n ) f(x_{1},x_{2},...,x_{n}) f(x1,x2,...,xn)的最小值此时也为0。

但是此时仅考虑 0 ≤ x k ≤ 1 0\leq x_{k}\leq1 0xk1时取到的最小值,若考虑约束 ∑ k = 1 n x k = 1 \sum_{k=1}^{n} x_{k}=1 k=1nxk=1的话,那么 ( x 1 , x 2 , . . . , x n ) (x_{1},x_{2},...,x_{n}) (x1,x2,...,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}=...=x_{k-1}=x_{k+1}=...=x_{n}=0 x1=x2=...=xk1=xk+1=...=xn=0将其带入式(3)中可得:
f ( 0 , 0 , . . . , 0 , 1 , 0 , . . . , 0 ) = − 0 l o g 2 0 − 0 l o g 2 0 − . . . − 0 l o g 2 0 − 1 l o g 2 1 − 0 l o g 2 0 − , . . . , − 0 l o g 2 0 = 0 (17) f(0,0,...,0,1,0,...,0)=-0log_{2}0-0log_{2}0-...-0log_{2}0-1log_{2}1-0log_{2}0-,...,-0log_{2}0=0\tag{17} f(0,0,...,0,1,0,...,0)=0log200log20...0log201log210log20,...,0log20=0(17)

所以 x k = 1 , x 1 = x 2 = . . . = x k − 1 = x k + 1 = . . . = x n = 0 x_{k}=1,x_{1}=x_{2}=...=x_{k-1}=x_{k+1}=...=x_{n}=0 xk=1,x1=x2=...=xk1=xk+1=...=xn=0一定是 f ( x 1 , x 2 , . . . , f n ) f(x_{1},x_{2},...,f_{n}) f(x1,x2,...,fn)在满足约束 0 ≤ x k ≤ 1 , ∑ k = 1 n x k = 1 0\leq x_{k}\leq1,\sum_{k=1}^{n} x_{k}=1 0xk1,k=1nxk=1的条件下的最小值点,其最小值为0。

证明完了信息熵的最大值,现在给出一个总结: 当样本的信息熵等于0的时候,样本的纯度是最高的,那么纯度最高时样本有什么样的特性呢? 由信息熵最小值的推导过程可知,当信息熵最小时,某个样本$x_{k}=1$,其他的等于0,而$x_{k}$表示得到就是$P_{k}$,这就说明该样本集合中仅仅只包含一类样本(k类),那么很显然,这时候的纯度就是最高的

+++++++++++++++++信息熵的最大值、最小值证明完毕,以及最取最大值和最小值时样本的特征也已说明+++++++++

2、条件熵

什么是条件熵?
答:通俗地说,可以理解为 在知道一些已知条件下,计算出来的信息熵。

条件熵的定义:在已知样本属性a的取值情况下,度量样本集合纯的一种指标

H ( D ∣ a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) (17) H(D|a)=\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}Ent(D^{v})\tag{17} H(Da)=v=1VDDvEnt(Dv)(17)

上式中关于各个变量一定要搞懂!其中,a表示样本的某个属性,假定属性a由V个可能的取值 { a 1 , a 2 , . . . , a V } \{a^{1},a^{2},...,a^{V}\} {a1,a2,...,aV},样本集合D中在属性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 ( D ∣ a ) H(D|a) H(Da)值越小,纯度越高。

ID3算法

现在知道了信息熵和条件熵了,那么就可以定义ID3算法了。

ID3决策树是以信息增益为准则来划分属性的决策树。

信息增益:
G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) = E n t ( D ) − H ( D ∣ a ) (18) Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}Ent(D^{v})=Ent(D)-H(D|a)\tag{18} Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)=Ent(D)H(Da)(18)
观察上式(18),信息增益就等于信息熵减去条件熵,得出来的差值就表示样本集合纯度的提升度。为什么这么说?因为信息熵表示的是没有任何已知条件下,计算出来的样本的纯度;而条件熵是在知道一些一直条件下算出来的集合的纯度,那么他们的差值就表示:在知道一些已知条件情况下,纯度得到的提升
选择信息增益值最大的属性作为划分属性,因为信息增益越大,则意味着使用该属性来进行划分所获得的“纯度提升”越大。


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
下面举个具体例子来实现ID3算法(来自西瓜书)。
以下面的西瓜数据集来学习一棵没剥开的是不是好瓜的决策树,显然|y|=2。
机器学习——分类算法之决策树_第1张图片
观察上面数据集,其中“是好瓜”的视为正例,“不是好瓜”视为负例,其中正例占 p 1 = 8 17 p_{1}=\frac{8}{17} p1=178,反例占 p 2 = 9 17 p_{2}=\frac{9}{17} p2=179
于是根据式(1)可计算出根节点的信息熵:
E n t ( D ) = − ∑ k = 1 2 p k l o g 2 p k = − ( 8 17 l o g 2 8 17 + 9 17 l o g 2 9 17 ) = 0.998 Ent(D)=-\sum_{k=1}^{2}p_{k}log_{2}p_{k}=-(\frac{8}{17}log_{2}\frac{8}{17}+\frac{9}{17}log_{2}\frac{9}{17})=0.998 Ent(D)=k=12pklog2pk=(178log2178+179log2179)=0.998
然后分别计算出当前属性集合{色泽,根蒂,敲声,纹理,脐部,触感}中每个属性的信息增益。
以"色泽"为例,它有3个可能的取值:{青绿,乌黑,浅白},若使用该属性对D进行划分,则可得到3个子集,分别记为: D 1 ( 色 泽 = 青 绿 ) D^{1}(色泽=青绿) D1(=绿) D 2 ( 色 泽 = 乌 黑 ) D^{2}(色泽= 乌黑) D2(=) D 3 ( 色 泽 = 浅 白 ) D^{3}(色泽= 浅白) D3(=)
那么按照这三个子集,可将原数据集分成如下三个部分:子集 D 1 D^{1} D1包含编号为{1,4,6,10,1317}的6个样例,其中正例占 p 1 = 3 6 p_{1}=\frac{3}{6} p1=63,反例占 p 2 = 3 6 p_{2}=\frac{3}{6} p2=63; D 2 D^{2} D2包含编号为{2,3,7,8,9,15}的6个样例,其中正、反例分别占 p 1 = 4 6 , p 2 = 2 6 p_{1}=\frac{4}{6},p_{2}=\frac{2}{6} p1=64p2=62; D 3 D^{3} D3包含编号为{5,11,12,14,16}的五个样例,其中正、反例分别占 p 1 = 1 5 , p 2 = 4 5 p_{1}=\frac{1}{5},p_{2}=\frac{4}{5} p1=51,p2=54
计算用“色泽”划分之后所获得的3个分支节点的信息熵为:
E n t ( D 1 ) = − ( 3 6 l o g 2 3 6 + 3 6 l o g 2 3 6 ) = 1.00 Ent(D^{1})=-(\frac{3}{6}log_{2}\frac{3}{6}+\frac{3}{6}log_{2}\frac{3}{6})=1.00 Ent(D1)=(63log263+63log263)=1.00
E n t ( D 2 ) = − ( 4 6 l o g 2 4 6 + 2 6 l o g 2 2 6 ) = 0.918 Ent(D^{2})=-(\frac{4}{6}log_{2}\frac{4}{6}+\frac{2}{6}log_{2}\frac{2}{6})=0.918 Ent(D2)=(64log264+62log262)=0.918
E n t ( D 3 ) = − ( 1 5 l o g 2 1 5 + 4 5 l o g 2 4 5 ) = 0.722 Ent(D^{3})=-(\frac{1}{5}log_{2}\frac{1}{5}+\frac{4}{5}log_{2}\frac{4}{5})=0.722 Ent(D3)=(51log251+54log254)=0.722
然后,根据式(18)可计算出属性“色泽”的信息增益为:
G a i n ( D , 色 泽 ) = E n t ( D ) − ∑ v = 1 3 ∣ D v ∣ ∣ D ∣ E n t ( D v ) = 0.998 − ( 6 17 × E n t ( D 1 ) + 6 17 × E n t ( D 2 ) + 5 17 × E n t ( D 3 ) ) = 0.998 − ( 6 17 × 1.000 + 6 17 × 0.918 + 5 17 × 0.722 ) = 0.109 Gain(D,色泽)=Ent(D)-\sum_{v=1}^{3}\frac{|D^{v}|}{|D|}Ent(D^{v})\\=0.998-(\frac{6}{17}\times Ent(D^{1}) +\frac{6}{17} \times Ent(D^{2})+\frac{5}{17}\times Ent(D^{3}) )\\=0.998-(\frac{6}{17}\times1.000+\frac{6}{17} \times 0.918+\frac{5}{17}\times 0.722 )=0.109 Gain(D,)=Ent(D)v=13DDvEnt(Dv)=0.998(176×Ent(D1)+176×Ent(D2)+175×Ent(D3))=0.998(176×1.000+176×0.918+175×0.722)=0.109
类似的,可计算出其他属性的信息增益:
G a i n ( D , 根 蒂 ) = 0.143 ;   G a i n ( D , 敲 声 ) = 0.141 ;   G a i n ( D , 纹 理 ) = 0.381 ;   G a i n ( D , 脐 部 ) = 0.289 ;   G a i n ( D , 触 感 ) = 0.006 Gain(D,根蒂)=0.143;\ Gain(D,敲声)=0.141;\ Gain(D,纹理)=0.381;\ Gain(D,脐部)=0.289;\ Gain(D,触感)=0.006 Gain(D,)=0.143 Gain(D,)=0.141; Gain(D,)=0.381 Gain(D,)=0.289 Gain(D,)=0.006
对比上面求出的所有属性的信息增益,属性“纹理”的信息增益最大,所以它被选为划分属性,下图是基于“纹理”对根节点进行划分的结果:
机器学习——分类算法之决策树_第2张图片
然后,决策树学习算法将对每个分支节点做进一步划分,以上图中第一个分直节点(“纹理=清晰”)为例,该节点包含的样例集合 D 1 D^{1} D1中有编号{1,2,3,4,5,6,8,10,15}的9个样例,可用属性集合为{色泽,根蒂,敲声,脐部,触感}。基于 D 1 D^{1} D1计算出各属性的信息增益:
G a i n ( D 1 , 色 泽 ) = 0.043 ;   G a i n ( D 1 , 根 蒂 ) = 0.458 ;   G a i n ( D 1 , 敲 声 ) = 0.331 ;   G a i n ( D 1 , 脐 部 ) = 0.458 ;   G a i n ( D 1 , 触 感 ) = 0.458 Gain(D^{1},色泽)=0.043;\ Gain(D^{1},根蒂)=0.458;\ Gain(D^{1},敲声)=0.331;\ Gain(D^{1},脐部)=0.458;\ Gain(D^{1},触感)=0.458 Gain(D1,)=0.043; Gain(D1,)=0.458 Gain(D1,)=0.331; Gain(D1,)=0.458 Gain(D1,)=0.458
“根蒂”、“脐部”、“触感”3个属性均取得了最大的信息增益,可选其中之一作为划分属性(注意:叶节点就是当前属性的特征全部属于一类,即全部属于正例或全部属于负例,例如下图中的属性根蒂的两个特征:蜷缩和硬挺)。类似的,对每个分支节点进行上述操作,最终得到的决策树如下:
机器学习——分类算法之决策树_第3张图片

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

C4.5决策树

ID3算法没有考虑连续特征,也没有考虑缺失值的问题。
使用信息增益来进行属性的划分会存在一个缺陷:以信息增益为准则的ID3决策树对可取值数目较多的属性有所偏好
下面就用数学来说明上述问题:
信息熵增益:
G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ ( − ∑ k 1 ∣ y ∣ p k l o g 2 p k ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ ( − ∑ k = 1 ∣ y ∣ ∣ D k v ∣ ∣ D v ∣ l o g 2 ∣ D k v ∣ ∣ D v ∣ ) (19) Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}Ent(D^{v})\\=Ent(D)-\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}(-\sum_{k1}^{|y|}p_{k}log_{2}p_{k})\\=Ent(D)-\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}(-\sum_{k=1}^{|y|}\frac{|D_{k}^{v}|}{|D^{v}|}log_{2}\frac{|D_{k}^{v}|}{|D^{v}|})\tag{19} Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)=Ent(D)v=1VDDv(k1ypklog2pk)=Ent(D)v=1VDDv(k=1yDvDkvlog2DvDkv)(19)

其中, D k v D^{v}_{k} Dkv表示在样本集合D中在属性a上取值为 a v a^{v} av且类别为k的样本。

为了说明问题,假设一种极端的情况,即假设取 a v a^{v} av的样本个数只有1个,说明属性a可取值个数和样本个数是一样多,即: V = ∣ D ∣ , D k v = D v = 1 V=|D|,D^{v}_{k}=D^{v}=1 V=D,Dkv=Dv=1,显然此时属性a可以视为取值数目较多的属性。将该情况下的 D k v = D v = 1 D^{v}_{k}=D^{v}=1 Dkv=Dv=1带入到式(19)中,发现H(D|a)=0,当被减数条件熵取0的时候信息增益取最大,所以此时以信息增益最大的那个属性作为划分属性的话,那么肯定选属性a作为划分属性,但是这样选择出来的决策树泛化能力特别差,严重过拟合

要修复ID3算法的这个缺陷,就提出了C4.5决策树,下面开始说明C4.5决策树。

C4.5决策树是以信息增益率为准则来选择划分属性的决策树。
定义信息增益率:
G a i n r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) (20) Gain_ratio(D,a)=\frac{Gain(D,a)}{IV(a)}\tag{20} Gainratio(D,a)=IV(a)Gain(D,a)(20)
其中,
I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ l o g 2 ∣ D v ∣ ∣ D ∣ (21) IV(a)=-\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}log_{2}\frac{|D^{v}|}{|D|}\tag{21} IV(a)=v=1VDDvlog2DDv(21)
观察信息增益率(20)可知,它在信息增益的基础上再除以一个惩罚项 I V ( a ) IV(a) IV(a),那么再观察惩罚项 I V ( a ) IV(a) IV(a),发现其类似于前面说的信息熵的表达式。在说信息熵的时候已经交代过:当各类样本分布均匀的时候,它们的信息熵就越大。那么将这个思想应用到信息增益率(20)上,即属性a的可取值数目越多的话,那么惩罚项 I V ( a ) IV(a) IV(a)就会越来越大,从而导致信息增益率越来越小这样一来,对于那些可取值数目较多的属性获得更大的惩罚,使得其信息增益率小。

C4.5决策树解决了“可取值较多数目的偏好”问题,那么又带来了另一个问题:相反的,信息增益率偏好于那些取值数目较少的属性
为了解决这个问题,C4.5决策树提出了这个方法:算法首先找出信息增益高出平均水平的属性,再在这些属性里面选择信息增益率最高的属性作为最优划分属性

C4.5算法的不足:

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

CART决策树

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

基尼值:
G i n i ( 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 (22) Gini(D)=\sum_{k=1}^{|y|}\sum_{k^{'}\neq k}p_{k}p_{k^{'}}=\sum_{k=1}^{|y|}p_{k}\sum_{k^{'}\neq k}p_{k^{'}}=\sum_{k=1}^{|y|}p_{k}(1-p_{k})=1-\sum_{k=1}^{|y|}p^{2}_{k}\tag{22} Gini(D)=k=1yk=kpkpk=k=1ypkk=kpk=k=1ypk(1pk)=1k=1ypk2(22)
直观地来看,基尼值就是表示集合D中,随机抽出两个样本,不是同一类别的概率。
基尼指数:
G i n i i n d e x ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) (23) Gini_index(D,a)=\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}Gini(D^{v})\tag{23} Giniindex(D,a)=v=1VDDvGini(Dv)(23)
基尼指数就是在基尼值得前面加上了权重,基尼值和基尼指数越小,样本集合纯度越高。
CART决策树既能做分类任务,又能做回归任务。

1、CART决策树的分类算法

算法流程:

  1. 根据基尼指数公式 G i n i i n d e x ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini_index(D,a)=\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}Gini(D^{v}) Giniindex(D,a)=v=1VDDvGini(Dv)找出基尼指数最小的属性 a ∗ a_{*} a;
  2. 计算属性 a ∗ a_{*} a的所有可能取值的基尼值 G a i n ( D v ) , v = 1 , 2 , . . . , V Gain(D^{v}),v=1,2,...,V Gain(Dv),v=1,2,...,V,选择基尼值最小的取值 a ∗ v a^{v}_{*} av作为划分点,将集合D划分为D1和D2两个集合(节点),其中D1集合的样本为 a ∗ = a ∗ v a_{*}=a_{*}^{v} a=av的样本,D2集合为 a ∗ ≠ a ∗ v a_{*}\neq a_{*}^{v} a=av的样本;
  3. 对集合D1和D2重复步骤1和步骤2,直至满足停止条件。

2、CART决策树的回归算法

CART决策树的回归算法几乎和CART决策树的分类算法几乎是一样的,只是换了一个公式来寻找最优划分属性。
CART决策树的回归算法:

  1. 根据以下公式找出最优化分属性 a ∗ a_{*} a和最优划分点 a ∗ v a_{*}^{v} av:

    a ∗ , a ∗ v = a r g m i n a , a v [ m i n c 1 ∑ x i ∈ D 1 ( a , a v ) ( y i − c 1 ) 2 + m i n c 1 ∑ x i ∈ D 1 ( a , a v ) ( y i − c 2 ) 2 ] (24) a_{*},a^{v}_{*}=\underset {a,a^{v}}{argmin}[\underset{c1}{min}\sum_{x_{i}\in D_{1}(a,a^{v})}(y_{i}-c1)^{2}+\underset{c1}{min}\sum_{x_{i}\in D_{1}(a,a^{v})}(y_{i}-c2)^{2}]\tag{24} a,av=a,avargmin[c1minxiD1(a,av)(yic1)2+c1minxiD1(a,av)(yic2)2](24)
    其中, D 1 ( a , a v ) D_{1}(a,a^{v}) D1(a,av)表示属性a上取值小于等于 a v a^{v} av的样本集合, D 2 ( a , a v ) D_{2}(a,a^{v}) D2(a,av)表示属性a上取值大于 a v a^{v} av的样本集合,c1表示 D 1 D_{1} D1的样本输出均值,c2表示 D 2 D_{2} D2的样本输出均值(式(24)是该算法的损失函数);

  2. 根据 a ∗ v a_{*}^{v} av将集合D划分为 D 1 D_{1} D1 D 2 D_{2} D2两个集合(节点);

  3. 对集合D_{1}和 D 2 D_{2} D2重复步骤1和步骤2,直至满足停止条件。

剪枝

由于决策树算法非常容易过拟合,对于生成的决策树必须要进行剪枝。

1、预剪枝

预剪枝就是在构造决策树的过程中,先对每个节点在划分前进行估计,如果当前结点的划分不能带来决策树模型的泛华性增加,则不对当前结点进行划分并且将当前结点标记为叶结点。
举例(使用西瓜书数据集4.2):
机器学习——分类算法之决策树_第4张图片
观察上面的数据集,是好瓜和不是好瓜各有5个,那么根节点的信息熵为:
E n t ( D ) = − ∑ k = 1 2 p k l o g 2 p k = − ( 1 2 l o g 2 1 2 + 1 2 l o g 2 1 2 ) = 1 Ent(D)= -\sum_{k=1}^{2}p_{k}log{2}p_{k}=-(\frac{1}{2}log_{2}\frac{1}{2}+\frac{1}{2}log_{2}\frac{1}{2})=1 Ent(D)=k=12pklog2pk=(21log221+21log221)=1
基于根节点,计算出每个属性的信息增益(直接给结果了):
色 泽 : G a i n ( D , a 1 ) = 1 − ( 4 10 × 1 + 4 10 × 0.811 + 0 ) = 0.276 根 蒂 : G a i n ( D , a 2 ) = 1 − ( 1 2 × 0.971 + 2 5 × 1 + 0 ) = 0.115 敲 声 : G a i n ( D , a 3 ) = 1 − ( 6 10 × 1 + 3 10 × 0.918 + 0 ) = 0.174 纹 理 : G a i n ( D , a 4 ) = 1 − ( 6 10 × 1 + 3 10 × 0.918 + 0 ) = 0.174 脐 部 : G a i n ( D , a 5 ) = 1 − ( 4 10 × 0.811 + 4 10 × 01 + 0 ) = 0.276 触 感 : G a i n ( D , a 6 ) = 1 − ( 6 10 × 1 + 4 10 × 1 ) = 0 色泽:Gain(D,a_{1})=1-(\frac{4}{10}\times 1 + \frac{4}{10} \times 0.811 + 0)=0.276\\ 根蒂:Gain(D,a_{2})=1-(\frac{1}{2}\times 0.971 + \frac{2}{5} \times 1 + 0)=0.115\\ 敲声:Gain(D,a_{3})=1-(\frac{6}{10}\times 1 + \frac{3}{10} \times 0.918 + 0)=0.174\\ 纹理:Gain(D,a_{4})=1-(\frac{6}{10}\times 1 + \frac{3}{10} \times 0.918 + 0)=0.174\\ 脐部:Gain(D,a_{5})=1-(\frac{4}{10}\times 0.811 + \frac{4}{10} \times 01 + 0)=0.276\\ 触感:Gain(D,a_{6})=1-(\frac{6}{10}\times 1 + \frac{4}{10} \times 1 )=0 Gain(D,a1)=1(104×1+104×0.811+0)=0.276Gain(D,a2)=1(21×0.971+52×1+0)=0.115Gain(D,a3)=1(106×1+103×0.918+0)=0.174Gain(D,a4)=1(106×1+103×0.918+0)=0.174Gain(D,a5)=1(104×0.811+104×01+0)=0.276Gain(D,a6)=1(106×1+104×1)=0
通过比较,“脐部”和“色泽”的信息增益最大,均为0.276,所以可以从这两个属性中随机挑选一个作为划分属性。这里选择脐部作为划分属性,那么会产生3个分支:
机器学习——分类算法之决策树_第5张图片
下面就需要用预剪枝来判断是不是应该进行这个划分,判断的标准就是比较划分前后其泛华能力是否有提升
划分之前,所有的样本都在根结点,把该节点记为叶节点,其类别标记为训练集中样本数量最多的类

别,因此该节点可以标记为好瓜(正负例一样多,所以坏瓜也行)。然后用验证集对其性能进行评估,

可以看出上面图中的验证集中,样本{4,5,8}为好瓜,被决策树分类正确;其他的样本{9,11,12,13}被

误分类为好瓜,所以此时的正确率为 3 7 ≈ 43 % \frac{3}{7}\approx 43\% 7343%。(记住这是没划分之前的正确率)

根据信息增益最大选择划分属性后的决策时如上图,那么此时再次用验证集来来评估这个决策树,此

时的正确率是: 5 7 ≈ 71 % \frac{5}{7}\approx71\% 7571%,很明显这个准确率大于没划分前的准确率,因此可以用

属性“脐部”进行划分。

决策树算法对结点2继续进行划分,再次使用信息增益挑选出值最大的那个特征,信息增益最大的那个特征是“色泽”(具体计算不写了),则使用“色泽”划分后的决策树为:

机器学习——分类算法之决策树_第6张图片
再使用预剪枝方法对此次划分进行判断,应不应该进行这个划分:首先“脐部”为“凹陷”的属性集合中

有3个好瓜,1个不是好瓜,那么在使用属性“色泽”划分之前的决策树的划分应该为好瓜;使用“色泽”

属性划分后,使用验证集进行计算,划分后的有4个被正确分类,3个被误分类,那么此时的正确率

4 7 ≈ 57.1 % \frac{4}{7}\approx 57.1\% 7457.1% ,明显小于使用“色泽”划分之前的准确率,所以禁止划分该分支。

后面也是按照这个方法来,这里就不一一赘述了。
那么最后的得到如下的决策树:
机器学习——分类算法之决策树_第7张图片

**总结:**对比剪枝决策树和未剪枝决策树,可以看出,预剪枝决策树的很多分支都没有展开,这虽然降低了过拟合的风险,但有可能带来欠拟合的风险

2、后剪枝

后剪枝就是先把决策树构造完毕,然后自底向上的对非叶结点进行考察,若将该节点对应的子树换为叶结点能够带来泛化性能的提升,则把该子树替换为叶结点。
举例:
假设使用上面的数据集,利用信息增益最大的算法得到的决策树如下,下面开始对该树进行后剪枝。
机器学习——分类算法之决策树_第8张图片后剪枝算法首先考察图中的结点(6),若将以其为根节点的子树删除,即相当于把结点(6)替换为

子节点,替换后的叶结点的样本(脐部=稍凹,根蒂=稍蜷,色泽=乌黑)包括编号为{7,15}的训练样

本,把该叶结点标记为“好瓜”(因为这里正负样本数量相等,所以随便寄一个类别),因此此时的决

策树在验证集上分类正确的样本为{4,8,11,12},,准确率为 4 7 = 57.1 % \frac{4}{7}=57.1\% 74=57.1%(未剪枝的决策

树分类正确的样本为{4,11,13},精度为 42.9 % 42.9\% 42.9%),所以后剪枝策略决定剪枝。接着考察结点(5),

同样的操作,把其为根节点的子树替换为叶结点,替换后的叶结点包含编号为{6,7,15}的训练样本,

根据“多数原则”把该叶结点标记为“好瓜”,测试的决策树准确率认为57.1%,所以不进行剪枝。结点

(2)和(3)仍然进行上述操作(不具体说了),最后得到的决策树如下,其准确率为71.4%:
机器学习——分类算法之决策树_第9张图片
总结:对比预剪枝和后剪枝策略,能够发现后剪枝决策树通常比预剪枝保留了更多的分支,一般情况

下,后剪枝决策树的欠拟合风险小,泛化性能往往也要优于预剪枝。但后剪枝过程是在构建完全

决策树之后进行的,并且要自底向上的对树中的所有非叶结点进行逐一考察,因此其**训练时间开

要比未剪枝决策树和预剪枝决策树都要大得多**。

连续值和缺失值的处理

上面也有提到,ID3算法不能处有缺实值的数据集,而C4.5和CART弥补了这个缺陷。

1、连续值的处理

对于大多数数据,因为连续性数据的取值数目不再有限,所以不能像前面一样处理离散属性使用枚举法对属性进行划分,因此需要将连续属性离散化,常用的离散化方法是二分法。(C4.5采用的策略)

样本集D中的连续属性a,假设属性a有n个不同的取值,对其进行大小排序,记为 { a 1 , a 2 , . . . , a n } \{a^{1},a^{2},...,a^{n}\} {a1,a2,...,an},根据属性可得到n-1个划分点,划分点的集合为:
T a = { a i + a i + 1 2   ∣ 1 ≤ i ≤ n − 1 } (24) T_{a}=\{\frac{a^{i}+a^{i+1}}{2}\ |1\leq i \leq n-1\}\tag{24} Ta={2ai+ai+1 1in1}(24)

对于取值集合 T a T_{a} Ta中的每t值会将属性a离散为一个属性值只有两个值,分别是{a>t}和{a<=t}的属性,计算新属性的信息增益,找到信息增益最大的t值即为该属性的最优划分点:
G a i n ( D , a ) = m a x t ∈ T a   G a i n ( D , a , t ) = m a x ∈ T a   E n t ( D ) − ∑ λ ∈ − , + ∣ D t λ ∣ ∣ D ∣ E n t ( D t λ ) (25) Gain(D,a)=\underset{t\in T_{a}}{max}\ Gain(D,a,t)=\underset{\in T_{a}}{max}\ Ent(D)-\sum_{\lambda \in{-,+}}\frac{|D_{t}^{\lambda }|}{|D|}Ent(D_{t}^{\lambda})\tag{25} Gain(D,a)=tTamax Gain(D,a,t)=Tamax Ent(D)λ,+DDtλEnt(Dtλ)(25)

2、缺失值的处理

现实数据集中的样本通常因为某种原因是缺失的,如果有缺失值的属性的个数比较小,那么可以粗暴地将有缺失值的属性剔除掉;如果有缺失值的属性较多,就不能简单地删除。

在决策树中处理含有缺失值的样本的时候,需要解决两个问题:

  • 1、如何在属性缺失值缺失的情况下进行划分属性的选择?
  • 2、给定划分属性,若该样本在该属性上的值是缺失的,那么该如何对这个样本进行划分?
    举例说明解决方法:
    对于问题1
    含有缺失值的数据集合如下:

机器学习——分类算法之决策树_第10张图片
给定训练集D和属性a,令表示 D − \overset{-}{D} D中在属性a上没有缺失值得样本集(比如,假设a=色泽,则 D − = 2 , 3 , 4 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 14 , 15 , 16 , 17 \overset{-}{D}={2,3,4,6,7,8,9,10,11,12,14,15,16,17} D=2,3,4,6,7,8,9,10,11,12,14,15,16,17

那么对于第一个问题:我们可以根据 D − \overset{-}{D} D(即在该属性上没有缺失值的样本集)来计算属性a的信息增益或者其他指标。我们只要再给根据计算出来的值一个权重,皆可以表示该训练集D中属性a的优劣。

假定属性a有V个可取值 { a 1 , a 2 , . . . , a V } \{a^{1},a^{2},...,a^{V}\} {a1,a2,...,aV},令 D v − \overset {-}{D^{v}} Dv表示D中在属性a上取值为 a v a^{v} av的样本集, D k − \overset{-}{D_{k}} Dk表示 D − \overset {-}{D} D中属于第k个类(k=1,2,…,|y|)的样本子集,则显然 D − = ∪ k = 1 V 1 D k − , D − ∪ V = 1 v 1 D v − \overset {-}{D}=\cup ^{V_{1}}_{k=1}\overset{-}{D_{k}},\overset {-}{D}\cup ^{v_{1}}_{V=1}\overset{-}{D^{v}} D=k=1V1Dk,DV=1v1Dv,假定为每个样本X赋予一个权重 W x W_{x} Wx(在决策树的初始阶段,根节点中样本的权重初始化为1),并定义:
ρ = ∑ x ∈ D v − W x ∑ x ∈ D W x ,   表 示 无 缺 失 值 样 本 所 占 的 比 例 (25) \rho = \frac {\sum_{x\in \overset {-}{D^{v}}}W_{x}}{{\sum_{x\in D}}W_{x}}\tag{25},\ 表示无缺失值样本所占的比例 ρ=xDWxxDvWx, (25)
p k − = ∑ x ∈ D k − W x ∑ x ∈ D − W x   ( 1 ≤ k ≤ ∣ y ∣ ) ,   表 示 无 缺 失 值 样 本 中 第 k 类 所 占 的 比 例 (26) \overset{-}{p_{k}}=\frac{\sum_{x\in \overset{-}{D_{k}}}W_{x}}{\sum_{x\in \overset{-}{D}}W_{x}}\ (1\leq k\leq |y|)\tag{26},\ 表示无缺失值样本中第k类所占的比例 pk=xDWxxDkWx (1ky), k(26)
r v − = ∑ x ∈ D v − W x ∑ x ∈ D − W x   ( 1 ≤ v ≤ V ) ,   表 示 无 缺 失 值 样 本 中 在 属 性 a 上 取 值 a v 的 样 本 所 占 比 例 (27) \overset{-}{r_{v}}=\frac{\sum_{x\in \overset{-}{D_{v}}}W_{x}}{\sum_{x\in \overset{-}{D}}W_{x}}\ (1\leq v\leq V)\tag{27},\ 表示无缺失值样本中在属性a上取值a^{v}的样本所占比例 rv=xDWxxDvWx (1vV), aav(27)
根据上面的三个公式,此时可以将信息增益推广为:
G a i n ( D , a ) = ρ × G a i n ( D − , a ) = ρ × ( E n t ( D − ) − ∑ v = 1 V r v − E n t ( D v − ) ) (28) Gain(D,a)=\rho \times Gain(\overset{-}{D},a)=\rho \times (Ent(\overset{-}{D})-\sum_{v=1}^{V}\overset{-}{r_{v}}Ent(\overset {-}{D^{v}}))\tag{28} Gain(D,a)=ρ×Gain(D,a)=ρ×(Ent(D)v=1VrvEnt(Dv))(28)

那么上面给出的第一个问题,用式(28)就可以估算出来。

对于问题2:
若样本x在划分属性a上的取值已知,则将x划入与其取值对应的子节点,且样本权值在子节点中保持为 w x w_{x} wx。若样本x在划分属性a上的取值未知,则将x同时划入所有子节点,且样本权值在与属性值 a v a^{v} av对应的子节点中调整为 r v − ⋅ w x \overset{-}{r_{v}}\cdot w_{x} rvwx;直观的看,这就是让同一个样本以不同的概率划入到不同的子节点中去。

用一个实例说明C4.5是怎样利用上述思想来解决缺失值的(直接截图了!!!!)
机器学习——分类算法之决策树_第11张图片
机器学习——分类算法之决策树_第12张图片
生成的决策树如下:
机器学习——分类算法之决策树_第13张图片

你可能感兴趣的:(机器学习算法)