机器学习-决策树学习笔记

决策树

  决策树(decsion tree)是一种基本的分类与回归方法。其主要优点是具有可读性,分类速度快。决策树学习通常包括3个步骤:特征选择、决策树的生成和决策树的剪枝。决策树的主要算法有ID3算法,C4.5算法,以及CART(classification and regression tree)算法。其中ID3算法和C4.5算法主要用于分类,ID3和C4.5算法都是决策树学习的经典算法,而CART算法是一种既可以用于分类也可以用于回归的算法。
  图1-决策树模型

1

  决策树学习时,假定给定训练数据集

D={(x1,y1),(x2,y2),,(xk,yk)}

  其中, xi=( x(1)i,x(2)i,,x(n)i )T . 为输入实例(特征向量),n为特征个数, yi{1,2,,M} 为类标记,K为样本容量。学习的目的就是根据给定的训练数据集构建一个决策树模型,使它能够对实例进行正确的分类。


1. 特征选择

   特征选择是决定选取用哪个特征来划分特征空间。为了提高决策树的学习效率,我们选取对训练数据集具有分类能力的特征。如果利用一个特征空间进行分类的结果和随机分类的结果差别不大,则称这个特征是没有分类能力的。经验上扔掉这样的特征。
   通常特征选择的准则是信息增益或者信息增益比。
   例1 表1是一个由15个样本组成的贷款申请训练数据。数据包括贷款申请人的4个特征:年龄(3个可能值),有工作(2个可能值),有自己的房子(2个可能值),信贷情况(3个可能值)。表的最后一列是类别,是否同意贷款,有两个值:是,否。
  
这里写图片描述

1

  图2表示从表1数据中学习到的两个可能的决策树,分别由两个不同的根结点构成。图2中(a)和(b)两种决策树都能从此延续下去产生完整的决策树。但是,需要确定那个特征更好。直观上,当一个特征具有更好的分类能力或者说按照这一特征将训练集分割成子集,使得各个子集在当前分类下有最好的分类,那么就应该选择这个特征。 信息增益就能很好地表示这一直观的准则。
这里写图片描述
2

1.1 信息增益

   :在信息论与概率统计中,熵表示随机变量不确定性的度量。设X是一个取有限个值的离散随机变量,其概率分布为

P(X=xi)=pi ,  i=1,2,,n

则随机变量X的熵定义为
H(X)=i=1npilogpi  (5.1)

   熵越大,随机变量的不确定性就越大。从定义可以验证:
0H(p)logn

   当随机变量只取两个值,例如0,1时,即X的分布为
p(X=1)=p, p(X=0)=1p, 0p1

   熵为
H(p)=plog2p(1p)log2(1p)

   这时,熵 H(p)随概率p变化的曲线如图3所示(单位为比特).
这里写图片描述
3

条件熵:条件熵 H(Y|X) 表示在已知随机变量X的条件下随机变量Y的不确定性。随机变量X给定的条件下随机变量Y的条件熵 H(Y|X) ,定义为X给定条件下Y的条件概率分布的熵对X的数学期望

H(Y|X)=i=1np(xi)H(Y|X=xi)=i=1nj=1mp(xi)p(yj|xi)logp(yj|xi)

信息增益: 特征A对训练数据集D的信息增益 g(D,A) ,定义为集合D的经验熵 H(D) 与特征A给定条件下D的经验条件熵 H(D|A) 之差,即
g(D,A)=H(D)H(D|A)

   给定训练数据集D和特征A,经验熵 H(D) 表示对数据集D分类的不确定性。而经验条件熵 H(D|A) 表示在特征A给定的条件下对数据集D进行分类的不确定性。它们的差即为信息增益。
   所以,特征选择的方法是:对训练数据集(或子集)D,计算其每个特征的信息增益,并比较他们的大小,选择信息增益最大的特征。

例1 根据表1的训练数据集D,根据信息增益准则选择最优特征
首先,计算经验熵 H(D)

H(D)=915log2915615log2615=0.971

这里写图片描述

1

   然后计算各个特征对数据集D的信息增益,分别以 A1,A2,A3,A4 表示年龄、有工作、有自己的房子和信贷情况4个特征,则
(1)
g(D,A1)=H(D)[515H(D1)+515H(D2)+515H(D3)]

=0.971[515(25log22535log235)

+515(35log23525log225)+515(45log24515log215)]

=0.9710.888=0.083

这里 D1D2D3 分别是D中 A1 (年龄)取值为青年、中年和老年的样本子集。
(2)
g(D,A2)=H(D)[515H(D1)+1015H(D2)]

=0.971[5150+1015(410log2410610log2610)]=0.324

(3)
g(D,A3)=0.971[6150+915(39log23969log269)]

=0.9710.551=0.420

(4)
g(D,A4)=0.9710.608=0.363

   最后,比较个特征的信息增益值,由于特征 A3 (有自己的房子)的信息增益值最大,所以选择特征 A3 作为最优特征。

1.2 信息增益比

   以信息增益来划分训练数据集的特征,存在偏向于选择取值较多特征的问题(取一个极端情况,使用表1中ID进行划分)。使用信息增益比可以对这一问题进行校正。
   信息增益比: 特征A对训练数据集D的信息增益比 gr(D,A) 定义为其信息增益 g(D,A) 与训练数据集D关于特征A的值的熵 HA(D) 之比,即

gr(D,A)=g(D,A)HA(D)

其中, HA(D)=i=1n|Di||D|log2|Di||D| ,n是特征A取值的个数。


2. 决策树的生成

2.1 ID3算法

   ID3算法的核心是在决策树的各个结点上应用信息增益准则选择特征,递归地构建决策树。
ID3算法:
输入:训练数据集D,特征集A,阀值 β
输出:决策树T.
(1).若D中所有实例属于同一类 Ck ,则T为单节点树,并将类 Ck 作为该结点的类标记,返回T;
(2).若A= ϕ ,则T为单节点树,并将D中实例数最大的类作为该结点的类标记,返回T;
(3).否则,计算A中各特征对D的信息增益,选择信息增益最大的特征 Ag ;
(4).如果 Ag 的信息增益小于阀值 β ,则置T为单节点树,并将D中实例数最大的类 Ck 作为该结点的类标记,返回T;
(5).否则,对 Ag 的每一个可能值 ai ,依 Ag=ai 将D分割为若干非空子集 Di ,将 Di 中实例数最大的类作为标记,构建子结点,由结点及子结点构成树T,返回T;
(6).对第i个子结点,以 Di 为训练集,以A-{ Ag }为特征集,递归地调用(1)~(5),得到子树 Ti ,返回 Ti

例2 对表1中的训练数据集,利用ID3算法建立决策树。

利用例1中的结果,由于特征 A3 (有自己的房子)的信息增益值最大,所以选择特征 A3 作为根节点的特征。它将训练数据集D划分为两个子集 D1 A3 取值为“是”)和 D2 ( A3 取值为“否”)。由于 D1 只有同一类的样本点,所以它成为一个叶结点,结点标记为“是”。
   对 D2 则需从特征 A1 (年龄), A2 (有工作)和 A4 (信贷情况)中选择新的特征,计算各个特征的信息增益:

这里写图片描述

   选择信息增益最大的特征 A2 (有工作)作为结点的特征。 A2 有两个可能的取值,从这一结点引出两个字结点:一个对应“是”(有工作)的子结点,它包含3个样本,且都属于同一类别“是”(允许贷款),所以这是一个叶结点,标记为“是”;另一个是对应“否”(无工作)的子结点,包含6个样本,它们同属于一类“否”(“不允许贷款”),所以这也是一个叶结点,类标记为“否”。

这里写图片描述

4


2.2 C4.5算法

   C4.5与ID3算法十分相似,C4.5算法对ID3算法进行了改进。C4.5在生成决策树的过程中,使用信息增益比来选择特征,以校正学习过程中偏向于选择取值较多的特征的问题,其他部分和ID3算法保持一致。


3.决策树的剪枝

   决策树生成算法递归地产生的决策树往往对训练数据的分类很准确,但对未知的数据的分类却没有那么准确,即出现过拟合现象。解决这个问题的办法是考虑决策树的复杂度,对生成的决策树进行简化。
   决策树剪枝分为预剪枝后剪枝。预剪枝在生成决策树过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能的提升或者提升不够大,则停止划分并将当前节点标记为叶结点。决策树后剪枝对已经生成的决策树进行简化,决策树后剪枝时采用交叉验证的方法,将数据集随机分为训练数据集和验证数据集两个部分,训练数据集主要用于决策树的生成,验证数据集主要用于剪枝过程。具体地,剪枝从已生成的树上裁剪掉一些根据验证数据集算得的损失函数较大的子树或者叶结点,并将其根结点或者父结点作为新的叶结点,从而简化分类树模型。

误差降低剪枝(Reduced Error Pruning):

   误差错误剪枝是相对比较简单的一种剪枝算法,也是比较常用的剪枝算法。
   定义误差:设验证数据集样本的个数为m,验证数据集样本未被正确分类的个数为n,则误差 e=nm
  
  误差降低算法
   输入:验证数据集,生成算法产生的整个树T
   输出:剪枝后的决策树 T
   (1).对树T的任一子集如果是一棵树,则在该子集递归调用剪枝过程
   (2).计算将当前两个叶结点合并后的误差
   (3).计算不合并的误差
   (4).如果合并后的误差会降低,则将叶结点合并,并以该结点在训练数据集中样本实例数最大的类作为标记。

这里写图片描述

2西

这里写图片描述

52

对于树T,验证数据集中有4个样本被错误分类(编号为5、8、9、13),共有7个样本,所以误差为 47=57.1
考虑图中第6个结点。将6结点替换叶结点,替换后叶结点包含编号为{7,15}的训练样本,于是,将6结点的类别标记为“好瓜”,此时决策树的验证数据集误差减少到42.9%(5、9、13未被正确分类),所以进行剪枝。
考察图中第5个结点。若将5结点替换为叶结点,其包含{6、7、15}的训练样本,叶结点标记为“好瓜”,此时决策树的误差仍为42.9%(5、9、13未被正确分类),此时可以剪枝也可以不剪枝,若要获得复杂度较小的决策树,则剪枝。若为了保证较高的拟合度,则不剪枝。
考察结点2,若将其替换为叶结点,其包含编号为{1、2、3、14}的训练样本,叶节点标记为“好瓜”。此时,验证数据集误差减为28.6%(9、13未被正确分类),所以进行剪枝。
对结点3和1.若将其替换为叶结点其误差分别为28.6%,57.1%,误差都没有减少,所以不进行剪枝。

这里写图片描述

6


4. CART算法

   分类与回归树(classification and regression tree,CART)模型既可以用于回归也可以用于分类。
   CART算法假设决策树是二叉树。CART算法主要由两步组成:(1)决策树的生成:基于训练数据集生成决策树。对回归树的生成采用平方误差最小化准则进行特征选择,而对于分类树用基尼指数(Gini index)最小化准则选择特征值。(2)决策树的剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树。

4.1 回归树的生成

   假设X与Y分别为输入和输出变量,并且Y是连续变量,给定训练数据集

D={(x1,y1),(x2,y2),,(xn,yn)}

  假设已将输入空间划分为M个单元 R1,R2,,RM ,并且在每个单元 Rm 上有一个固定的输出值 Cm ,于是回归树模型可表示为
f(x)=m=1MCmI(xRm)

  当输入空间的划分确定时,可以用平方误差 xiRm(yif(xi))2   来表示回归树对于训练数据的预测误差,用平方误差最小的准则求解每个单元上的最优值。易知,单元 Rm 上的 Cm 的最优值 C^m Rm 上的所有输入实例 xi 对应的输出 yi 的均值,即
C^m=ave(yi|xiRm)

  上面对状态空间的划分,采用启发式的方法,选择第j个变量 x(j) 和它的取值s,作为切分变量和切分点,并定义两个区域:
R1(j,s)=x|x(j)s    R2(j,s)=x|x(j)   >s

  然后寻找最优切分变量j和最优切分点s。具体地,求解
minj,sminc1xiR1(j,s)(yic1)2+minc2xiR2(j,s)(yic2)2

  对固定输入变量j可以找到最优切分点s。
C^1=ave(yi|xiR1)    C^2=ave(yi|xiR2)

  遍历所有的输入变量,找到最优的切分变量j和s。根据j和s依次将输入空间划分为两个区域。接着,对每个区域重复以上划分过程,直到满足停止条件为止。这样就生成了一棵回归树。这样的回归树称为最小二乘回归树。
   最小二乘回归树生成算法
  输入:训练数据集D;
  输出:回归树f(x).
  在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定每个字区域上的输出值,构建二叉决策树:
  (1).选择最优切分变量j与切分点s,求解
minj,sminc1xiR1(j,s)(yic1)2+minc2xiR2(j,s)(yic2)2

  遍历变量j,对固定的切分变量j扫描切分点s,选择使上式最小的j和s。
  (2).用选定的j和s划分区域并决定相应的输出值:
R1(j,s)=x|x(j)s    R2(j,s)=x|x(j)  >s

C^m=1NmxiRm(j,s)yi,  xRm ,  m=1,2

  (3).继续对两个子区域调用步骤(1),(2), 直至满足停止条件(训练数据集切分前与切分后,误差减少不够大或者切分出的数据集足够小则停止)
  (4).将输入空间划分为M个区域 R1,R2,Rm ,生成决策树:
f(x)=m=1MCmI(xRm)

4.2 分类树的生成

  分类树采用基尼指数选择最优特征
  定义:基尼指数 分类问题中,假设有K个类,样本点属于第K类的概率为 Pk ,则概率分布的基尼指数定义为

Gini(p)=k=1KPk(1Pk)=1k=1KP2k

  对于二分类问题,若样本点输入第1类的概率是p,则概率分布的基尼指数为
Gini(p)=2p(1p)

  对于给定的样本集合D,其基尼指数为
Gini(D)=1k=1K(|Ck||D|)2

  这里, Ck 是D中属于第k类的样本子集,K是类的个数。
  如果样本集合D根据特征A是否取某一可能值a被分割成 D1 D2 两部分,即
D1=(x,y)D|A(x)=a,  D2=DD1

则在特征A的条件下,集合D的基尼指数定义为
Gini(D,A)=|D1||D|Gini(D1)+|D2||D|Gini(D2)

  基尼指数Gini(D)表示集合D的不确定性,基尼指数Gini(D,A)表示经A=a分割后集合D的不确定性,基尼指数值越大,样本集合的不确定性也就越大,这一点与熵类似。
这里写图片描述
712

  可以看出基尼指数,熵的曲线很接近,都可以近似地代表分类误差。
  CART生成算法
  输入:训练数据集D,停止计算的条件;
输出:CART决策树。
  根据训练数据集,从根结点开始,递归地对每个结点进行一下操作,构建二叉决策树:
  (1).设结点的训练数据集为D,计算现有特征对该数据集的基尼指数。此时,对每一个特征A,对其可能取的每一个值a,根据样本对A=a的测试为”是”或者”否”将D分割为 D1 D2 两个部分,并计算A=a的基尼指数。
  (2).在所有可能的特征A以及它们所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
  (3).对两个子结点递归调用(1),(2),直至满足停止条件。
  (4).生成CART决策树
  算法的停止条件是:结点中样本的个数小于某个预定的阀值,或样本集的基尼指数小于某个预定的阀值(样本基本属于同一类),或者没有更多的特征。

这里写图片描述

1

例3 对表1所给的训练数据集,应用CART算法生成决策树
  首先计算各特征的基尼系数,选择最优特征以及其最优切分点。分别以 A1,A2,A3,A4 表示年龄、有工作、有自己的房子和信贷情况4个特征,并以1,2,3表示年龄的值为青年、中年和老年,以1,2表示有工作和有自己的房子的值为是和否,以1,2,3表示信贷情况的值为非常好、好和一般。
  求特征 A1 的基尼指数

Gini(D,A1=1)=515(225(125))+1015(2710(1710))=0.44

Gini(D,A1=2)=0.48

Gini(D,A1=3)=0.44

  由于 Gini(D,A1=1) Gini(D,A1=3) 相等,且最小,所以 A1=1 A1=3 都可以选作 A1 的最优切分点。
  求特征 A2 A3 的基尼指数:
Gini(D,A2=1)=0.32

Gini(D,A3=1)=0.27

  由于 A2 A3 只有一个切分点,所以它们就是最优切分点。
  求特征 A4 的基尼指数:
Gini(D,A4=1)=0.36

Gini(D,A4=2)=0.47

Gini(D,A4=3)=0.32

   Gini(D,A4=3 最小,所以 A4=3 A4 的最优切分点。
  在 A1,A2,A3,A4 几个特征中, GiniD,A3=1=0.27 最小,所以选择特征 A3 为最优特征, A3=1 为其最优切分点。于是根据根结点生成两个子结点,一个是叶结点。对令一个结点继续使用以上方法在 A1,A2,A4 中选择最优特征及其最优切分点,结果是 A2=1 .以此计算得知,所得的结点都是叶结点。


4.3 CART剪枝

  CART剪枝由两部分构成:首先从生成的决策树 T0 底端开始不断的剪枝,直到 T0 的根结点,形成一个子树序列 T0,T1,,Tn ;然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。

1. 剪枝,形成一个子树序列

  在剪枝过程中,计算子树的损失函数:

Cα(T)=C(T)+α|T|

  其中,T为任意子树,C(T)为对训练数据的预测误差(如基尼指数),|T|为子树的叶结点个数, α0 为参数, Cα(T) 为参数是 α 时的子树T的整体损失。参数 α 权衡训练数据的拟合程度与模型的的复杂度。
  对固定的 α ,使损失函数 Cα(T) 最小的子树记为 Tα 。当 α 偏大时,最优子树 Tα 偏小;当 α 偏小时,最优子树 Tα 偏大;极端情况下,当 α=0 偏大,整体树是最优的,当 α ,根结点组成的单结点树是最优的。
  可以用递归的方法对树进行剪枝。将 α 从小增大, 0=α0<α1<<αn<+ , 产生一系列的区间 [αi,αi+1  ),  i=0,1,,n 的最优子树序列 {T0,T1,Tn} .
  具体地,从整体树 T0 开始剪枝,对 T0 的任意内部结点t,以t为单结点树的损失函数是
Cα(t)=C(t)+α

以t为根结点的子树 Tt 的损失函数是
Cα(t)=C(t)+α|Tt|

  当 α=0 α 充分小时,有不等式
Cα(Tt)<Cα(t)

  当 α 增大时,在某一 α
Cα(Tt)=Cα(t)

  当 α 再增大时
Cα(Tt)>Cα(t)

  只要 α=(C(t)C(Tt))/(|Tt|1),Tt 与t有相同的损失函数值, 而t的结点少,因此t比 Tt 更可取,对 Tt 进行剪枝。
  因此,对 T0 中每一内部结点t,计算
g(t)=C(t)C(Tt)|Tt|1

  g(t)表示剪枝后整体损失函数减少的程度。在 T0 中剪去g(t)最小的 Tt ,将得到的子树作为 T1 ,同时将最小的g(t)设为 α1 . T1 为区间[ α1,α2 )的最优子树。
  如此的剪枝下去,直到根结点。在这一过程中, α 的值将不断增加,产生新的区间。

2. 在剪枝得到的子树序列 T0,T1,,Tn 中通过交叉验证选取最优子树 Tα

  利用独立的验证数据集,测试子树序列 T0,T1,,Tn 中各个子树的平方误差或者基尼指数。平方误差或者基尼指数最小的决策树被认为是最优的决策树 Tα
  CART剪枝算法
  输入:CART算法生成的分类决策树 T0 , 验证数据集
  输出:最优决策树 Tα
  (1).设k=0,T= T0
  (2).设 α=+ .
  (3).自下而上地对内部结点t计算 C(Tt)|Tt| 以及

g(t)=C(t)C(Tt)|Tt|1,  α=min(α,g(t))

  这里, Tt 表示以t为根结点的子树, C(Tt) 是对训练数据的预测误差, |Tt| Tt 的叶结点个数。
  (4).对 g(t)=α 的内部结点t进行剪枝,并对叶结点t以多数表决法决定其类,得到树T。
  (5).设k=k+1, αk=α,Tk=T .
  (6).如果 Tk 不是由根结点及两个叶结点构成的树,则回到步骤(2)–(5);否则令 Tk=Tn .
  (7).采用交叉验证法在子树序列 T0,T1,,Tn 中选取最优子树 Tα

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。机器学习是人工智能的核心,是使计算机具有智能的根本途径。 随着统计学的发展,统计学习机器学习中占据了重要地位,支持向量机(SVM)、决策树和随机森林等算法的提出和发展,使得机器学习能够更好地处理分类、回归和聚类等任务。进入21世纪,深度学习成为机器学习领域的重要突破,采用多层神经网络模型,通过大量数据和强大的计算能力来训练模型,在计算机视觉、自然语言处理和语音识别等领域取得了显著的成果。 机器学习算法在各个领域都有广泛的应用,包括医疗保健、金融、零售和电子商务、智能交通、生产制造等。例如,在医疗领域,机器学习技术可以帮助医生识别医疗影像,辅助诊断疾病,预测病情发展趋势,并为患者提供个性化的治疗方案。在金融领域,机器学习模型可以分析金融数据,识别潜在风险,预测股票市场的走势等。 未来,随着传感器技术和计算能力的提升,机器学习将在自动驾驶、智能家居等领域发挥更大的作用。同时,随着物联网技术的普及,机器学习将助力智能家居设备实现更加智能化和个性化的功能。在工业制造领域,机器学习也将实现广泛应用,如智能制造、工艺优化和质量控制等。 总之,机器学习是一门具有广阔应用前景和深远影响的学科,它将持续推动人工智能技术的发展,为人类社会的进步做出重要贡献。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值