信息熵的定义如下:
H ( D ) = − ∑ k = 1 K p k l o g 2 ( p k ) H(D)=-\sum_{k=1}^{K}p_{k}log_2(p_k) H(D)=−k=1∑Kpklog2(pk)
其中, p k p_k pk为样本集中第k个类别的样本占总样本集的比例
属性a对样本集D划分的信息增益为:
g ( D , a ) = H ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ H ( D v ) g(D, a) = H(D)-\sum_{v=1}^{V}\frac{|D^v|}{|D|}H(D^v) g(D,a)=H(D)−v=1∑V∣D∣∣Dv∣H(Dv)
信息增益越大,则使用属性a划分所获得的纯度提升就越大
ID3中使用最大化信息增益来选择划分属性
a ∗ = a r g m a x a ∈ A g ( D , a ) a_* = \mathop{argmax}\limits_{a\in A}g(D, a) a∗=a∈Aargmaxg(D,a)
属性:{色泽、根蒂、敲声、纹理、脐部、触感}
以色泽为例划分样本集,可分为 D 1 D^1 D1(色泽=青绿)、 D 2 D^2 D2(色泽=乌黑)、 D 3 D^3 D3(色泽=浅白)三个子集
H ( D ) = − ( 8 17 l o g 2 8 17 + 9 17 l o g 2 9 17 ) = 0.998 H ( D 1 ) = − ( 3 6 l o g 2 3 6 + 3 6 l o g 2 3 6 ) = 1 H ( D 2 ) = − ( 4 6 l o g 2 4 6 + 2 6 l o g 2 2 6 ) = 0.918 H ( D 3 ) = − ( 1 5 l o g 2 1 5 + 4 5 l o g 2 4 5 ) = 0.722 \begin{aligned} &H(D) = -(\frac{8}{17}log_2\frac{8}{17}+\frac{9}{17}log_2\frac{9}{17}) =0.998\\ &H(D^1) = -(\frac{3}{6}log_2\frac{3}{6}+\frac{3}{6}log_2\frac{3}{6}) = 1\\ &H(D^2) = -(\frac{4}{6}log_2\frac{4}{6} + \frac{2}{6}log_2\frac{2}{6}) = 0.918\\ &H(D^3) = -(\frac{1}{5}log_2\frac{1}{5}+\frac{4}{5}log_2\frac{4}{5}) = 0.722 \end{aligned} H(D)=−(178log2178+179log2179)=0.998H(D1)=−(63log263+63log263)=1H(D2)=−(64log264+62log262)=0.918H(D3)=−(51log251+54log254)=0.722
属性“色泽”的信息增益为:
g ( D , 色 泽 ) = H ( D ) − ∑ v = 1 3 ∣ D v ∣ ∣ D ∣ H ( D v ) = 0.998 − ( 6 17 × 1 + 6 17 × 0.918 + 5 17 × 0.722 ) = 0.109 \begin{aligned} g(D, 色泽) &= H(D)-\sum_{v=1}^{3}\frac{|D^v|}{|D|}H(D^v)\\ &=0.998-(\frac{6}{17}\times1+\frac{6}{17}\times0.918+\frac{5}{17}\times0.722)\\ &=0.109 \end{aligned} g(D,色泽)=H(D)−v=1∑3∣D∣∣Dv∣H(Dv)=0.998−(176×1+176×0.918+175×0.722)=0.109
同理,依次算出其他属性的信息增益
g(D, 根蒂) = 0.143,g(D, 敲声)=0.141, g(D, 纹理) = 0.381, g(D, 脐部) = 0.289, g(触感) = 0.006
可知纹理的信息增益最大,所以选择纹理作为划分属性
接下来,就在每个子样本集中从{色泽、根蒂、敲声、脐部、触感}中选择信息增益最大的属性作为划分属性
输入:训练样本集D,特征集A,阈值 ϵ \epsilon ϵ
输出:决策树T
(1) 若D中实例全为同一个类别 C k C_k Ck,则返回单结点树T, C k C_k Ck为该结点的类标记
(2) 若A= ϕ \phi ϕ,则返回单结点数T,将D中实例数最多的类 C k C_k Ck作为该节点的类标记
(3) 否则,计算A中各个特征对D的信息增益,选取信息增益最大的那个特征 A g A_g Ag
(4) 若 g ( D , A g ) < ϵ g(D,A_g)<\epsilon g(D,Ag)<ϵ,则返回单结点树,并将D中实例数最多的类 C k C_k Ck作为该结点的类标记
(5) 否则,根据 A g A_g Ag的取值划分样本到各个分支,记为 D i D_i Di, 返回增加结点的树T
(6) 对所有子结点,令 D = D i , A = A − A g D=D_i, A=A-A_g D=Di,A=A−Ag,递归调用以上(1)-(6)步,得到子树 T i T_i Ti
C4.5算法针对ID3算法的各个缺点进行了改进
g r ( D , a ) = g ( D , a ) I V ( a ) g_r(D, a) = \frac{g(D, a)}{IV(a)} gr(D,a)=IV(a)g(D,a)
其中,
I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ l o g 2 ∣ D v ∣ ∣ D ∣ g ( D , a ) = H ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ H ( D v ) \begin{aligned} & IV(a) = -\sum_{v=1}^{V}\frac{|D^v|}{|D|}log_2\frac{|D^v|}{|D|}\\ & g(D, a) = H(D) - \sum_{v=1}^{V}\frac{|D^v|}{|D|}H(D^v) \end{aligned} IV(a)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣g(D,a)=H(D)−v=1∑V∣D∣∣Dv∣H(Dv)
利用正则化系数进行初步剪枝,再CART树中讲解
两个子问题
(1) 对第一个子问题:
(2)对第二个子问题
假设有K个类别,样本点属于第k类的概率为 p k p_k pk,概率分布的基尼指数定义如下
G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini(p) =\sum_{k=1}^{K}p_k(1-p_k) = 1-\sum_{k=1}^{K}{p_k}^2 Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
对于样本集D
G i n i ( D ) = 1 − ∑ v = 1 V ( ∣ C k ∣ ∣ D ∣ ) 2 Gini(D) = 1-\sum_{v=1}^{V}(\frac{|C^k|}{|D|})^2 Gini(D)=1−v=1∑V(∣D∣∣Ck∣)2
C k C^k Ck为第k个类别的样本子集, K是类的个数
如果样本集D根据特征A的某一可能取值a被划分为 D 1 D_1 D1和 D 2 D_2 D2两个部分
D 1 = { ( x , y ) ∈ D ∣ A ( x ) = a } , D 2 = D − D 1 D_1= \{(x,y)\in D|A(x)=a\}, D_2 = D-D_1 D1={(x,y)∈D∣A(x)=a},D2=D−D1
在特征A的条件下
G i n i ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) Gini(D, A) = \frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2) Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
CART分类树中,使用基尼指数来代替信息增益率,选择划分属性,且只对某个特征值进行二分, 建立二叉树
(1) 连续特征, 离散化和C4.5一样只是将信息增益率换成了基尼指数
(2) 离散特征, 不停的二分离散特征
输入:数据集D, 样本个数阈值,基尼指数阈值
输出:决策树T
从根节点开始,用训练集递归的建立CART树
(1) 对当前结点的数据集D, 如果其样本个数小于阈值或没有特征, 返回决策子树, 当前结点停止递归
(2) 计算样本集D的基尼指数, 如果小于阈值,返回决策子树,当前结点停止递归
(3)计算当前结点现有的各个特征的各个特征值对数据集D的基尼指数
(4) 选择基尼指数最小的特征A对应的特征值a,将数据集划分为D1和D2两个部分
(5) 对左右子结点递归调用1-4步,生成决策树
回归树和分类树的区别:
CART回归树的度量指标:对于特征A的取值s,划分成的数据集D1和D2,使D1和D2各自集合的均方差最小,同时D1和D2的均方差之和最小。
m i n A , s [ m i n c 1 ∑ x i ∈ D 1 ( A , s ) ( y i − c 1 ) 2 + m i n c 1 ∑ x i ∈ D 2 ( A , s ) ( y i − c 2 ) 2 ] \mathop{min}\limits_{A,s}[\mathop{min}\limits_{c_1} \sum_{x_i \in D_1(A,s)} (y_i-c_1)^2+\mathop{min}\limits_{c_1} \sum_{x_i \in D_2(A,s)} (y_i-c_2)^2] A,smin[c1minxi∈D1(A,s)∑(yi−c1)2+c1minxi∈D2(A,s)∑(yi−c2)2]
其中, c 1 c_1 c1为 D 1 D_1 D1数据集的样本输出均值, c 2 c_2 c2为 D 2 D_2 D2数据集的样本输出均值
假设树T的叶子结点为|T|,t是树T的叶子结点,该叶结点有 N t N_t Nt个样本点,其中k类样本点有 N t k N_{tk} Ntk
H t ( T ) H_t(T) Ht(T)表示叶结点t的经验熵(CART分类树用基尼指数)
H t ( T ) = − ∑ k N t k N t l o g N t k N t H_t(T) = -\sum_k\frac{N_{tk}}{N_t}log\frac{N_{tk}}{N_t} Ht(T)=−k∑NtNtklogNtNtk
CART分类树表示为 H t ( T ) = 1 − ∑ k p k 2 H_t(T) = 1-\sum_k{p_k}^2 Ht(T)=1−∑kpk2
决策树的损失函数:
C α ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) + α ∣ T ∣ = C ( T ) + α ∣ T ∣ C_\alpha(T) = \sum_{t=1}^{|T|}N_tH_t(T)+\alpha|T| = C(T)+\alpha|T| Cα(T)=t=1∑∣T∣NtHt(T)+α∣T∣=C(T)+α∣T∣
CART树的剪枝算法可以分为两步:
在剪枝过程中,对于任意一颗子树的损失函数为:
C α ( T ) = C ( T ) + α ∣ T ∣ C_\alpha(T) = C(T)+\alpha|T| Cα(T)=C(T)+α∣T∣用和均方差度量
其中, α ≥ 0 \alpha \ge0 α≥0 为正则化参数, C ( T ) C(T) C(T)为训练数据的预测误差(分类树用基尼指数,回归树用和均方差度量),|T|为子树T的叶子结点数量。
位于结点t的任意一棵子树 T t T_t Tt,如果没有剪枝,损失为:
C α ( T t ) = C ( T t ) + α ∣ T t ∣ C_\alpha(T_t) = C(T_t)+\alpha|T_t| Cα(Tt)=C(Tt)+α∣Tt∣
如果将t剪掉,只保留t的根节点,损失为:
C α ( T ) = C ( T ) + α C_\alpha(T) = C(T)+\alpha Cα(T)=C(T)+α
算法 | 支持模型 | 树结构 | 特征选择 | 连续值处理 | 缺失值处理 | 剪枝 |
---|---|---|---|---|---|---|
ID3 | 分类 | 多叉树 | 信息增益 | 不支持 | 不支持 | 不支持 |
C4.5 | 分类 | 多叉树 | 信息增益率 | 支持 | 支持 | 支持 |
CART | 分类、回归 | 二叉树 | 基尼指数 | 支持 | 支持 | 支持 |
参考博客
ML算法推导细节04—决策树DT
决策树算法原理(上)
决策树算法原理(下)