机器学习算法——决策树

目录

  • 1. 信息论基础
  • 2. 决策树ID3算法
    • 2.1 ID3算法原理
    • 2.2 ID3算法的不足
  • 3. 决策树C4.5算法
    • 3.1 C4.5算法原理
    • 3.2 C4.5算法的不足
  • 4. CART分类树算法
  • 5. CART分类树算法对于连续特征和离散特征处理的改进
  • 6. CART分类树建立算法的具体流程
  • 7. CART回归树建立算法
  • 8. 决策树算法的剪枝(正则化)
    • 8.1 预剪枝
    • 8.2 后剪枝
      • 8.2.1 REP(Reduced Error Pruning)方法
      • 8.2.2 PEP(Pessimistic Error Pruning)方法
      • 8.2.3 MEP(Minimum Error Pruning)方法
      • 8.2.4 CCP(Cost-Complexity Pruning)方法

1. 信息论基础

熵    ⟹    联 合 熵    ⟹    条 件 熵 熵\implies联合熵\implies条件熵

  • 熵:
    熵度量了事物的不确定性,越不确定的事物,它的熵就越大。具体的,随机变量X的熵的表达式如下: H ( x ) = − ∑ i = 1 m p i l o g p i H(x) = -\sum^m_{i=1}p_ilogp_i H(x)=i=1mpilogpi
n代表X的n种不同的离散取值
$p_i$代表X取值为i的概率
log为以2或者e为底的对数
  • 联合熵
    由一个变量X的熵,很容易推广到多个变量的联合熵,这里给出两个变量X和Y的联合熵表达式 H ( X , Y ) H(X,Y) H(XY) H ( X , Y ) = − ∑ i = 1 n p ( x i , y i ) l o g p ( x i , y i ) H(X,Y) = -\sum^n_{i=1}p(x_i,y_i)logp(x_i,y_i) H(X,Y)=i=1np(xi,yi)logp(xi,yi)

  • 条件熵
    由联合熵,容易推广得到条件熵的表达式 H ( X ∣ Y ) H(X|Y) H(XY),条件熵类似于条件概率,它度量了我们的X在知道Y以后剩下的不确定性。表达式如下: H ( X ∣ Y ) = − ∑ i = 1 n ( x i , y i ) l o g p ( x i ∣ y i ) = ∑ j = 1 n p ( y j ) H ( X ∣ y j ) H(X|Y)=-\sum^n_{i=1}(x_i,y_i)logp(x_i|y_i) = \sum^n_{j=1}p(y_j)H(X|y_j) H(XY)=i=1n(xi,yi)logp(xiyi)=j=1np(yj)H(Xyj)

  • 互信息(信息增益)
    由条件熵和熵推广得到互信息(信息增益)的表达式: I ( X , Y ) , I(X,Y), I(X,Y),它度量了 X X X在知道 Y Y Y以后不确定性减少程度,这个度量我们在信息论中称为互信息(信息增益),表达式如下:
    I ( X , Y ) = H ( X ) − H ( X ∣ Y ) I(X,Y) =H(X)-H(X|Y) I(X,Y)=H(X)H(XY)

  • 信息增益比
    特征 A A A对训练数据集 D D D的信息增益比 g R ( D , A ) g_R(D,A) gR(D,A)定义为其信息增益 I ( D , A ) I(D,A) I(D,A)与训练数据集 D D D关于特征 A A A的值的熵 H A ( D ) H_A(D) HA(D)之比,即 g R ( D , A ) = ( I ( D , A ) H A ( D ) ) g_R(D,A)=(\frac{I(D,A)}{H_A(D)}) gR(D,A)=(HA(D)I(D,A))

H A ( D ) = − ∑ i − i n ∣ D i ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ , n 是 特 征 A 取 值 的 个 数 。 H_A(D)=-\sum^n_{i-i}\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|},n是特征A取值的个数。 HA(D)=iinDDilog2DDi,nA

  • 基尼系数(基尼不纯度)
    由于ID3还是C4.5,都是基于信息论的熵模型的,计算时会涉及大量的对数运算,因此,CART分类树算法使用基尼系数来代替信息增益比,基尼系数代表了模型的不纯度,基尼系数越小,则不纯度越低,特征越好。这和信息增益(比)是相反的。假设有K个类,样本点属于第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_{k=1}p_k(1-p_k)=1-\sum^K_{k=1}p_k^2 Gini(p)=k=1Kpk(1pk)=1k=1Kpk2
    对于给定的样本D,其基尼指数为:
    G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 , C k 是 D 中 属 于 第 k 类 的 样 本 集 , K 是 类 的 个 数 Gini(D)=1-\sum^K_{k=1}(\frac{|C_k|}{|D|})^2,C_k是D中属于第k类的样本集,K是类的个数 Gini(D)=1k=1K(DCk)2,CkDkK
    那么在给定特征A的条件下,集合D的基尼指数定义为:
    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)

2. 决策树ID3算法

2.1 ID3算法原理

  1. 算法原理
    用信息增益大小来判断当前节点应该用什么特征来构建决策树,用计算出的信息增益最大的特征来建立决策树的当前节点。

  2. 算法过程
    1). 初始化信息增益的阈值 ϵ ϵ ϵ

    2). 判断样本是否为同一类输出 D i Di Di,如果是则返回单节点树 T T T。标记类别为 D i Di Di

    3). 判断特征是否为空,如果是则返回单节点树 T T T,标记类别为样本中输出类别 D D D实例数最多的类别。

    4). 计算 A A A中的各个特征(一共 n n n个)对输出 D D D的信息增益,选择信息增益最大的特征 A g Ag Ag

    5). 如果 A g Ag Ag的信息增益小于阈值 ϵ ϵ ϵ,则返回单节点树 T T T,标记类别为样本中输出类别 D D D实例数最多的类别。

    6). 否则,按特征 A g Ag Ag的不同取值 A g i Ag_i Agi将对应的样本输出 D D D分成不同的类别 D i Di Di。每个类别产生一个子节点。对应特征值为 A g i Agi Agi。返回增加了节点的数 T T T

    7). 对于所有的子节点,令 D = D i , A = A − A g D=Di,A=A−{Ag} D=Di,A=AAg递归调用2-6步,得到子树Ti并返回。

2.2 ID3算法的不足

1.需要改进的地方
 1).ID3没有考虑连续特征
 
 2).ID3用信息增益作为标准容易偏向于取值较多的特征。
 
 3). ID3算法对于缺失值的情况没有做考虑
 
 4). 没有考虑过拟合的问题

3. 决策树C4.5算法

3.1 C4.5算法原理

C4.5 对ID3算法的4个问题做了改进
1).ID3没有考虑连续特征
 将连续的特征离散化
 
2).ID3用信息增益作为标准容易偏向于取值较多的特征。
 信息增益作为标准容易偏向于取值较多的特征的问题。我们引入一个信息增益比的变量 I R ( X , Y ) I_R(X,Y) IR(X,Y)
 
3). ID3算法对于缺失值的情况没有做考虑

  • 某一个有缺失特征值的特征A。C4.5的思路是将数据分成两部分,对每个样本设置一个权重(初始可以都为1),然后划分数据,一部分是有特征值A的数据D1,另一部分是没有特征A的数据D2. 然后对于没有缺失特征A的数据集D1来和对应的A特征的各个特征值一起计算加权重后的信息增益比,最后乘上一个系数,这个系数是无特征A缺失的样本加权后所占加权总样本的比例。
  • 将缺失特征的样本同时划分入所有的子节点,不过将该样本的权重按各个子节点样本的数量比例来分配

4). 没有考虑过拟合的问题
C4.5引入了正则化系数进行初步的剪枝

3.2 C4.5算法的不足

  1. 由于决策树算法非常容易过拟合,因此对于生成的决策树必须要进行剪枝。
  2. C4.5生成的是多叉树,即一个父节点可以有多个节点。很多时候,在计算机中二叉树模型会比多叉树运算效率高。
  3. C4.5只能用于分类,如果能将决策树用于回归的话可以扩大它的使用范围。
  4. C4.5由于使用了熵模型,里面有大量的耗时的对数运算,如果是连续值还有大量的排序运算。

4. CART分类树算法

在分类问题中,假设有 K K K个类别,第 k 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_{k=1}p_k(1-p_k)=1-\sum^K_{k=1}p_k^2 Gini(p)=k=1Kpk(1pk)=1k=1Kpk2

对于个给定的样本 D D D,假设有 K K K个类别, 第 k k k个类别的数量为 C k C_k Ck,则样本D的基尼系数表达式为: G i n i ( D ) = 1 − ∑ k = 1 K ( C k D ) 2 Gini(D)=1-\sum^K_{k=1}(\frac{C_k}{D})^2 Gini(D)=1k=1K(DCk)2

对于样本 D D D,如果根据特征 A A A的某个值 a a a,把 D D D分成 D 1 D1 D1 D 2 D2 D2两部分,则在特征 A A A的条件下, D D D的基尼系数表达式为:
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(D1)+\frac{D_2}{D}Gini(D_2) Gini(D,A)=DD1Gini(D1)+DD2Gini(D2)

CART分类树算法每次仅仅对某个特征的值进行二分,而不是多分,这样CART分类树算法建立起来的是二叉树,而不是多叉树。这样一可以进一步简化基尼系数的计算,二可以建立一个更加优雅的二叉树模型。

5. CART分类树算法对于连续特征和离散特征处理的改进

将连续特征离散化的思路如下:比如m个样本的连续特征 A A A有m个,从小到大排列为 a 1 , a 2 , . . . , a m a_1,a_2,...,a_m a1,a2,...,am,则CART算法取相邻两样本值的平均数,一共取得 m − 1 m-1 m1个划分点,其中第i个划分点 T i T_i Ti表示为: T i = a i + a i + 1 2 T_i=\frac{a_i+a_{i+1}}{2} Ti=2ai+ai+1,对于这 m − 1 m-1 m1个点,分别计算以该点作为二元分类点时的基尼系数。选择基尼系数最小的点作为该连续特征的二元离散分类点。比如取到的基尼系数最小的点为 a t a_t at,则小于 a t a_t at的值为类别1,大于at的值为类别2,这样我们就做到了连续特征的离散化。

6. CART分类树建立算法的具体流程

.
算法输入:训练集D,基尼系数的阈值,样本个数阈值。
输出:决策树T。

  1. 对于当前节点的数据集为D,如果样本个数小于阈值或者没有特征,则返回决策子树,当前节点停止递归。
  2. 计算样本集D的基尼系数,如果基尼系数小于阈值,则返回决策树子树,当前节点停止递归。
  3. 计算当前节点现有的各个特征的各个特征值对数据集D的基尼系数
  4. 在计算出来的各个特征的各个特征值对数据集D的基尼系数中,选择基尼系数最小的特征A和对应的特征值a。根据这个最优特征和最优特征值,把数据集划分成两部分D1和D2,同时建立当前节点的左右节点,做节点的数据集D为D1,右节点的数据集D为D2.
  5. 对左右的子节点递归的调用1-4步,生成决策树。

对于生成的决策树做预测的时候,假如测试集里的样本A落到了某个叶子节点,而节点里有多个训练样本。则对于A的类别预测采用的是这个叶子节点里概率最大的类别。

7. CART回归树建立算法

CART回归树和CART分类树的建立和预测的区别主要有下面两点:

1)连续值的处理方法不同

2)决策树建立后做预测的方式不同。
对于回归模型,我们使用了常见的和方差的度量方式,CART回归树的度量目标是,对于任意划分特征 A A A,对应的任意划分点s两边划分成的数据集 D 1 D_1 D1 D 2 D_2 D2,求出使 D 1 D_1 D1 D 2 D_2 D2各自集合的均方差最小,同时 D 1 D_1 D1 D 2 D_2 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 2 ∑ x i ∈ D 2 ( A , s ) ( y i − C 2 ) 2 ] \underbrace{min}_{\text{A,s}}[\underbrace{min}_{C_1}\sum_{x_i\in{D_1} (A,s)}(y_i-C_1)^2+\underbrace{min}_{C_2}\sum_{x_i\in{D_2} (A,s)}(y_i-C_2)^2] A,s min[C1 minxiD1(A,s)(yiC1)2+C2 minxiD2(A,s)(yiC2)2]
C 1 C_1 C1 D 1 D_1 D1数据集的样本输出均值, C 2 C_2 C2 D 2 D_2 D2数据集的样本输出均值。
对于决策树建立后做预测的方式,上面讲到了CART分类树采用叶子节点里概率最大的类别作为当前节点的预测类别。而回归树输出不是类别,它采用的是用最终叶子的均值或者中位数来预测输出结果。

8. 决策树算法的剪枝(正则化)

为了来增加决策树的泛化能力,我们需要对决策树进行剪枝,即类似于线性回归的正则化,剪枝分为预剪枝后剪枝

8.1 预剪枝

预剪枝就是在完全正确分类训练集之前,较早地停止树的生长。 具体在什么时候停止决策树的生长有多种不同的方法:

  • 一种最为简单的方法就是在决策树到达一定高度的情况下就停止树的生长。
  • 到达此结点的实例具有相同的特征向量,而不必一定属于同一类, 也可停止生长。
  • 到达此结点的实例个数小于某一个阈值也可停止树的生长。
  • 还有一种更为普遍的做法是计算每次扩张对系统性能的增益,如果这个增益值小于某个阈值则不进行扩展。

优点&缺点

  • 由于预剪枝不必生成整棵决策树,且算法相对简单, 效率很高, 适合解决大规模问题。但是尽管这一方法看起来很直接, 但是 怎样精确地估计何时停止树的增长是相当困难的。
  • 预剪枝有一个缺点, 即视野效果问题 。 也就是说在相同的标准下,也许当前的扩展会造成过度拟合训练数据,但是更进一步的扩展能够满足要求,也有可能准确地拟合训练数据。这将使得算法过早地停止决策树的构造。

8.2 后剪枝

后剪枝法:即先生成决策树,然后产生所有可能的剪枝后的CART树,然后使用交叉验证来检验各种剪枝的效果,选择泛化能力最好的剪枝策略。

这里主要介绍四种:
1、REP-错误率降低剪枝
2、PEP-悲观剪枝
3、CCP-代价复杂度剪枝
4、MEP-最小错误剪枝

8.2.1 REP(Reduced Error Pruning)方法

对于决策树T 的每棵非叶子树S , 用叶子替代这棵子树. 如果 S 被叶子替代后形成的新树关于D 的误差等于或小于S 关于 D 所产生的误差, 则用叶子替代子树S

优点:

  • REP 是当前最简单的事后剪枝方法之一。
  • 它的计算复杂性是线性的。
  • 和原始决策树相比,修剪后的决策树对未来新事例的预测偏差较小。

缺点:

  • 但在数据量较少的情况下很少应用. REP方法趋于过拟合( overfitting) , 这是因为训练数据集中存在的特性在剪枝过程中都被忽略了, 当剪枝数据集比训练数据集小得多时 , 这个问题特别值得注意.

8.2.2 PEP(Pessimistic Error Pruning)方法

为了克服 R EP 方法需要独立剪枝数据集的缺点而提出的, 它不需要分离的剪枝数据集,为了提高对未来事例的预测可靠性, PEP 方法对误差估计增加了连续性校正(continuity correction)。
优点:

  • PEP方法被认为是当前决策树事后剪枝方法中精度较高的算法之一
  • PEP 方法不需要分离的剪枝数据集, 这对于事例较少的问题非常有利
  • 它的计算时间复杂性也只和未剪枝树的非叶节点数目成线性关系 .

缺点:

  • PEP是唯一使用自顶向下剪枝策略的事后剪枝方法, 这种策略会带来与事前剪枝方法出 现的同样问题, 那就是树的某个节点会在该节点的子孙根据同样准则不需要剪裁时也会被剪裁。

8.2.3 MEP(Minimum Error Pruning)方法

MEP 方法的基本思路是采用自底向上的方式, 对于树中每个非叶节点, 首先计算该节点的误差 Er(t) . 然后, 计算该节点每个分枝的误差Er(Tt) , 并且加权相加, 权为每个分枝拥有的训练样本比例. 如果 Er(t) 大于 Er(Tt) , 则保留该子树; 否则, 剪裁它.
优点:

  • MEP方法不需要独立的剪枝数据集, 无论是初始版本, 还是改进版本, 在剪枝过程中, 使用的信息都来自于训练样本集.•它的计算时间复杂性也只和未剪枝树的非叶节点数目成线性关系 .

缺点:

  • 类别平均分配的前提假设现实几率不大&对K太过敏感

8.2.4 CCP(Cost-Complexity Pruning)方法

  • CCP 方法就是著名的CART(Classificationand Regression Trees)剪枝算法,它包含两个步骤:
  1. 自底向上,通过对原始决策树中的修剪得到一系列的树 T 0 , T 1 , T 2 , . . . , T t {T_0,T_1,T_2,...,T_t} T0,T1,T2,...,Tt, 其中 T i + 1 T_{i+1} Ti+1是由Ti中的一个或多个子树被替换所得到的, T 0 T_0 T0为未经任何修剪的原始树,几为只有一个结点的树。
  2. 评价这些树,根据真实误差率来选择一个最优秀的树作为最后被剪枝的树。

缺点:
生成子树序列 T i T_i Ti所需要的时间和原决策树非叶节点的关系是二次的, 这就意味着如果非叶节点的数目随着训练例子记录数目线性增加, 则CCP方法的运行时间和训练数据记录数的关系也是二次的 . 这就比本文中将要介绍的其它剪枝方法所需要的时间长得多, 因为其它剪枝方法的运行时间和非叶节点的关系是线性的.

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