ML算法——决策树

文章目录

  • 1、 ID3算法
    • 1.1信息熵
    • 1.2 信息增益
    • 1.3 根据信息增益来选择属性的例子
    • 1.4 ID3算法流程
    • 1.5 ID3算法的缺点
  • 2、 C4.5算法
    • 2.1 信息增益率
    • 2.2 连续特征离散化
    • 2.4 剪枝
    • 2.5 缺失值的处理
    • 2.5 C4.5的缺点
  • 3 CART分类树
    • 3.1 基尼指数
    • 3.2 连续特征和离散特征的处理
    • 3.3 CART分类树算法流程
  • 4、CART回归树
    • 4.1 对于连续值处理的区别
    • 4.2 预测方式的区别
  • 5、决策树损失函数的度量
  • 6、CART树的剪枝
    • 6.1 剪枝的损失函数
    • 6.2 正则化参数的选择
    • 6.3 CART树的缺点
  • 7、决策树算法总结
    • 7.1 决策树的优点
    • 7.2 决策树的缺点

1、 ID3算法

1.1信息熵

  • 衡量不确定性的指标,信息熵越大,不确定性越大
  • 度量样本集合纯度的一种指标,值越小,样本集合的纯度越高

信息熵的定义如下:
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=1Kpklog2(pk)
其中, p k p_k pk为样本集中第k个类别的样本占总样本集的比例

  • 熵H(Y)表示随机变量Y的不确定性程度
  • 条件熵H(Y|X)表示Y在已知X的情况下不确定性的程度
  • H(Y)-H(Y|X)称之为互信息,ID3中叫信息增益,表示Y在已知X情况下不确定减少的程度

1.2 信息增益

  • 假设离散属性a有V个可能的取值, 那么用属性a来划分数据集D就可以产生V个分支结点,第v个分支结点的样本为 D v D^v Dv
  • 考虑到不同分支结点所包含的样本数不同,给分支结点赋予权重 ∣ D v ∣ / ∣ D ∣ |D^v|/|D| Dv/D,那么样本数越多的结点的影响就越大

属性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=1VDDvH(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=aAargmaxg(D,a)

1.3 根据信息增益来选择属性的例子

ML算法——决策树_第1张图片
属性:{色泽、根蒂、敲声、纹理、脐部、触感}
以色泽为例划分样本集,可分为 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=13DDvH(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
可知纹理的信息增益最大,所以选择纹理作为划分属性
ML算法——决策树_第2张图片
接下来,就在每个子样本集中从{色泽、根蒂、敲声、脐部、触感}中选择信息增益最大的属性作为划分属性

1.4 ID3算法流程

输入:训练样本集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=AAg,递归调用以上(1)-(6)步,得到子树 T i T_i Ti

1.5 ID3算法的缺点

  • 没有考虑连续特征
  • 没有考虑处理缺失值
  • 没有考虑过拟合问题
  • 取值较多的特征比取值较少的特征信息增益大,偏向于选择取值较多的特征

2、 C4.5算法

C4.5算法针对ID3算法的各个缺点进行了改进

2.1 信息增益率

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=1VDDvlog2DDvg(D,a)=H(D)v=1VDDvH(Dv)

  • IV(a)为属性a的固有值,属性a的取值数越多(V越多),IV(a)就越大
  • 信息增益率对取值数较少的属性有偏好
  • 使用启发式方法:从候选划分属性中找到信息增益高于平均水平的属性,再从选择信息增益率最大的

2.2 连续特征离散化

  • 连续特征a有m个样本,从小到大排列为 a 1 , a 2 , . . . , a m a_1, a_2,...,a_m a1,a2,...,am
  • 取相邻样本的均值, 得到m-1个划分点
  • 计算这m-1个划分点的信息增益率,取增益率最大的划分点为划分属性将样本划分为两个部分
  • 连续属性再后面还可以参与属性选择(删去之前连续属性的划分点)

2.4 剪枝

利用正则化系数进行初步剪枝,再CART树中讲解

2.5 缺失值的处理

两个子问题

  • 属性有缺失值,如何划分属性
  • 给定划分属性后,样本在该属性上的值缺失,如何划分样本

(1) 对第一个子问题:

  • 将样本集分为两部分,一部分是没有属性缺失值的样本集 D 1 D_1 D1,另一部分是有属性缺失值的样本集 D 2 D_2 D2
  • 计算各个属性对 D 1 D_1 D1的信息增益率,并乘以一个系数(无属性缺失值样本所占总样本的比例子,即 ∣ D 1 ∣ / ∣ D ∣ |D_1|/|D| D1/D)

(2)对第二个子问题

  • 将缺失属性值的样本也划入所有的子结点中
  • 引入权重的概念,无属性缺失值样本的权重为1,缺失属性值样本的权重为其划分到各子结点前,各子结点中样本所占的比例

2.5 C4.5的缺点

  • 剪枝的方法可以优化,预剪枝,在决策树生成的时候决定剪枝;后剪枝,在决策树生成后通过交叉验证来剪枝
  • 生成的是多叉树,但二叉树的运行效率较高
  • 只能用于分类
  • 熵模型,有大量耗时的对数运算,连续值还有大量的排序运算

3 CART分类树

3.1 基尼指数

假设有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=1Kpk(1pk)=1k=1Kpk2
对于样本集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)=1v=1V(DCk)2
C k C^k Ck为第k个类别的样本子集, K是类的个数

  • Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率,
  • Gini(D)越小,反映数据集D的纯度越高

如果样本集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)DA(x)=a},D2=DD1
在特征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)=DD1Gini(D1)+DD2Gini(D2)

CART分类树中,使用基尼指数来代替信息增益率,选择划分属性,且只对某个特征值进行二分, 建立二叉树

3.2 连续特征和离散特征的处理

(1) 连续特征, 离散化和C4.5一样只是将信息增益率换成了基尼指数
(2) 离散特征, 不停的二分离散特征

  • CART分类树会把特征A, 分为{A1}和{A2,A3}, {A2}和{A1, A3}, {A3}和{A1, A2}三种情况
  • 选择基尼指数最小的组合, 如{A1}和{A2, A3},建立二叉树结点
  • 由于没有将特征A的取值完全分开,后面还有机会选择{A2}和{A3}
  • 与ID3和C4.5不同,在ID3和C4.5的一棵子树中,离散特征只会参与一次结点的建立

3.3 CART分类树算法流程

输入:数据集D, 样本个数阈值,基尼指数阈值
输出:决策树T

从根节点开始,用训练集递归的建立CART树
(1) 对当前结点的数据集D, 如果其样本个数小于阈值或没有特征, 返回决策子树, 当前结点停止递归
(2) 计算样本集D的基尼指数, 如果小于阈值,返回决策子树,当前结点停止递归
(3)计算当前结点现有的各个特征的各个特征值对数据集D的基尼指数
(4) 选择基尼指数最小的特征A对应的特征值a,将数据集划分为D1和D2两个部分
(5) 对左右子结点递归调用1-4步,生成决策树

4、CART回归树

回归树和分类树的区别:

  • 样本输出的离散值,那么这是分类树
  • 样本输出是连续值,那么这是回归树
    CART回归树和分类树的建立和预测的2点区别:
  • 连续值的处理方法不同
  • 决策树建立后预测的方式不同

4.1 对于连续值处理的区别

  • CART分类树,采用基尼指数选择特征
  • 回归树采用了和方差的度量方式

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[c1minxiD1(A,s)(yic1)2+c1minxiD2(A,s)(yic2)2]

其中, c 1 c_1 c1 D 1 D_1 D1数据集的样本输出均值, c 2 c_2 c2 D 2 D_2 D2数据集的样本输出均值

4.2 预测方式的区别

  • CART分类树,采用叶子结点中多数样本的类
  • CART回归树,采用叶子结点的均值或中位数

5、决策树损失函数的度量

  • 决策树学习的损失函数通常是正则化的极大似然函数
  • 选取最优决策树是NP难问题,采用启发式方法,近似求解,得到次优解的决策树
  • 决策树学习算法,递归的选择最优特征,使各子集在当前条件下分类最好。
  • 决策树的生成只考虑局部最优,决策树的剪枝考虑全局最优
  • 决策树算法包括:特征选择, 决策树生成,决策树剪枝
  • 决策树的剪枝往往通过极小化决策树整体的损失函数决定来实现

假设树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)=kNtNtklogNtNtk
CART分类树表示为 H t ( T ) = 1 − ∑ k p k 2 H_t(T) = 1-\sum_k{p_k}^2 Ht(T)=1kpk2
决策树的损失函数:
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=1TNtHt(T)+αT=C(T)+αT

  • C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,|T|表示模型的复杂度。
  • α \alpha α确定是,子树越大,往往与训练数据的拟合越好,模型复杂度越高
    只有在剪枝过程中才有损失函数

6、CART树的剪枝

  • CART回归树和CART分类树的剪枝策略:除了在度量损失的时候一个使用均方差,一个使用基尼系数,算法基本完全一样。
  • 解决过拟合的方法:对CART树进行剪枝,类似正则化
  • CART树采用后剪枝,即先生成决策树,然后产生所有可能的剪枝后的CART树,然后使用交叉验证来检验各种剪枝的效果,选择泛化能力最好的剪枝策略。

CART树的剪枝算法可以分为两步:

  • 从生成的决策树 T 0 T_0 T0底端开始不断剪枝, 直到 T 0 T_0 T0的根结点,形成一个子树序列 T 0 , T 1 , . . . , T n {T_0,T_1,...,T_n} T0,T1,...,Tn
  • 然后用交叉验证法对子树序列进行测试,选择最优树

6.1 剪枝的损失函数

在剪枝过程中,对于任意一颗子树的损失函数为:
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的叶子结点数量。

  • α = 0 \alpha=0 α=0, 没有正则化,原始生成的CART树就是最优树
  • α = ∞ \alpha=\infty α=, 正则化最大,只有根节点的子树是最优树
  • α \alpha α越大,剪枝越厉害,生成的最优子树越小
    对于固定的 α \alpha α,一定存在损失函数最小的子树

6.2 正则化参数的选择

ML算法——决策树_第3张图片
位于结点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)+α

  • C ( T t ) < C ( T ) C(T_t)C(Tt)<C(T), 当 α = 0 \alpha=0 α=0或很小时, C α ( T t ) < C α ( T ) C_\alpha(T_t)Cα(Tt)<Cα(T)
  • α \alpha α增大到一定时, C α ( T t ) = C α ( T ) , α = C ( T ) − C ( T t ) ∣ T t ∣ − 1 C_\alpha(T_t) = C_\alpha(T), \alpha = \frac{C(T)-C(T_t)}{|T_t|-1} Cα(Tt)=Cα(T),α=Tt1C(T)C(Tt), T t T_t Tt ∣ T ∣ |T| T的损失相同,但T结点更少,可以对 T t T_t Tt剪枝
    CART树的交叉验证策略
  • 计算每个子树是否剪枝的阈值 α \alpha α
  • 针对不同的 α \alpha α所对应的剪枝后的最优子树,做交叉验证,选取一个最好的 α \alpha α

6.3 CART树的缺点

  • 分类决策时由一个特征决定,而不是由一组特征决定(改进:多变量决策树,选择最优的特征线性组合来决策)
  • 如果样本发生一点点的改动,会导致树结构剧烈改变(改进:集成学习)

7、决策树算法总结

算法 支持模型 树结构 特征选择 连续值处理 缺失值处理 剪枝
ID3 分类 多叉树 信息增益 不支持 不支持 不支持
C4.5 分类 多叉树 信息增益率 支持 支持 支持
CART 分类、回归 二叉树 基尼指数 支持 支持 支持

7.1 决策树的优点

  • 简单直观,决策树的生成很直观,可解释性好
  • 不需要预处理,不需要归一化
  • 能处理缺失值,离散值和连续值
  • 通过交叉验证的剪枝来选择模型,提高泛化能力
  • 对异常点的容错能里好健壮性高

7.2 决策树的缺点

  • 非常任意过拟合,泛化能力不强。通过设置结点最少样本数和决策树的深度来改进。
  • 样本发生一点点的变动,会导致树结构的剧烈改变。通过集成学习改进
  • 寻找最优决策树的一个NP难问题,一般通过启发式方法,容易陷入局部最优。通过集成学习改进。
  • 比较复杂的关系,决策树很难学习,比如异或。通过神经网络解决。
  • 如果某些特征样本比例过大,生成的决策树容易偏向这些特征。通过调节样本的权重来改善。

参考博客

ML算法推导细节04—决策树DT
决策树算法原理(上)
决策树算法原理(下)

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