ML算法——决策树

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 根据信息增益来选择属性的例子

在这里插入图片描述
属性:{色泽、根蒂、敲声、纹理、脐部、触感}
以色泽为例划分样本集,可分为 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
可知纹理的信息增益最大,所以选择纹理作为划分属性
在这里插入图片描述
接下来,就在每个子样本集中从{色泽、根蒂、敲声、脐部、触感}中选择信息增益最大的属性作为划分属性

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 正则化参数的选择

在这里插入图片描述
位于结点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(T) C(Tt)<C(T), 当 α = 0 \alpha=0 α=0或很小时, C α ( T t ) < C α ( T ) C_\alpha(T_t)<C_\alpha(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
决策树算法原理(上)
决策树算法原理(下)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值