决策树笔记

来源:互联网 发布:视频剪辑制作软件电脑 编辑:程序博客网 时间:2024/06/12 20:47

  • 概述
  • 决策树的生成
    • 特征选择
      • 信息增益
        • 条件熵
        • 信息增益
      • 信息增益比
    • 决策树的生成
      • IDE3算法
      • C45算法
  • 决策树的剪枝
    • 损失函数
    • 剪枝算法
  • 说明

概述

决策树常见的算法有IDE3、C4.5以及CART算法。
按照决策树是否为二叉树,可以将3个算法分为两类,IDE3、C4.5属于非二叉树决策树算法,CART针对二叉树决策树,本文介绍IDE3、C4.5,关于CART算法,请参考 决策树笔记-CART算法。

决策树是一种用来做分类的树形结构。
决策树的节点分为两种,内部节点和叶节点。内部节点表示一个特征或属性,叶节点表示分类结果。

用决策树进行分类时,从根节点开始,对待分类实例的某一特征进行测试,根据测试结果将实例分配到子节点,如此递归进行下去,直到达到叶节点,即完成分类。

决策树的学习通常包括2个步骤,决策树的生成和决策树的剪枝。而在决策树的生成过程中,用到的很关键的算法,就是特征选择。在生成决策树时优先使用对分类最有效的特征来作为当前的节点,特征选择算法就是用来找出“最有效的特征”。

决策树的生成

特征选择

特征选择目的在于选取对训练数据具有分类能力的特征,这样可以提高决策树学习与分类的效率。

例如,你是一名新入职的负责审核贷款的银行员工,你现在要学习如何决定是否给一个申请者发放贷款,你的上司给了你一些已经完成审核的申请信息让你学习,其中包含一些特征:年龄、是否有工作、是否有房子、信誉情况,你发现能否申请成功跟是否有房子的关系最大,而跟年龄的关系相对最小,于是你在做决策时,会优先考虑申请者是否拥有房子。

那么给定一堆特征,如何判断哪个特征跟分类的关系最大,如何评价各个特征的分类能力呢?通常选择的标准是信息增益(互信息)或者信息增益比(信息增益的加强版)。

信息增益

为说明信息增益,首先来了解熵和条件熵。

熵是表示随机变量不确定性的度量。总是考得很好的学生和总是考倒数的学生熵都很小,而有时候考得好有时候考得不好的学生熵比较大。

X是一个取有限个值的离散随机变量,其概率分布为:

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

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

pi=0,则定义 0log0=0

条件熵

设有随机变量(X,Y),其联合概率分布为

P(X=xi,Y=yi)=pij,i=1,2,...,n;j=1,2,...,m

条件熵 H(Y|X) 表示在已知随机变量 X 的条件下随机变量 Y 的不确定性。

作为银行员工,老王跟你申请贷款,一种情况下你对老王的情况一无所知,另一种情况下你知道老王北京有套房子,这两种情况下你贷款给老王的可能性必然是有很大差异的,条件熵就是用来表达后者。

以老王有房子为条件,你给老王贷款这件事情的不确定性(熵)减小了。

随机变量X给定的条件下随机变量Y的条件熵H(Y|X),定义为X给定条件下Y的条件概率分布的熵对X的数学期望:

H(Y|X)=i=1npiH(Y|X=xi),x=1,2,...,n

话说得有点绕,公式也有点绕。你一无所知的时候给老王贷款的不确定性就叫做给给老王贷款的熵,你知道老王有无房子时给老王贷款的不确定性就叫做“以老王有无房子为条件,你给老王贷款的条件熵”,这里条件熵包含了有无房子这个变量的两个取值:有房子、没房子,这就是为什么要求数学期望

信息增益

信息增益表示得知特征X的信息而使得类Y不确定性减少的程度。

对老王一无所知时给老王贷款的不确定性 - 知道老王有无房子时给老王贷款的不确定性 = 关于有无房子和是否贷款的信息增益

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

g(D,A)=H(D)H(D|A)

这里还要多说一句,打个岔,不想看这部分可以不看,直接看下一小节信息增益比。
互信息的定义是熵和条件熵之差,而上面信息增益也说是熵和条件熵之差,那岂不是互信息=信息增益?
为了方便理解,上面没有提及经验熵和经验条件熵的概念。
当熵和条件熵中的概率由数据估计(尤其是极大似然估计)得到时,所对应的熵和条件熵分别被称为经验熵和经验条件熵,而:

=

但是在数值上,=

信息增益比

信息增益有一个缺点:偏向于取值种类多的特征。
特征身份证号假设有100个(即训练集的数量,100个人就有100个身份证号)取值;特征有无房子有两个取值,有或无;那么特征增益这种评价特征优劣的指标会偏向于身份证号特征。
因为身份证号的条件熵为一定为0,因而其信息增益就等于熵;而有无房子的条件熵往往大于0,因此有无房子的信息增益小于身份证号。
更通俗点,你的模型通过学习会记住训练集中申请人的身份证号,因为它发现仅仅凭身份证号,就可以知道是否给一个人贷款;但是这是毫无意义的,因为这严重过拟合了。

因此引出信息增益比的概念。

特征A对训练数据集D的信息增益比gR(D,A)定义为其信息增益g(D,A)与训练数据集D关于特征A的值的熵HA(D)之比,即:

gR(D,A)=g(D,A)HA(D)=H(D)H(D|A)HA(D)

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

其实如果将类别标记C和特征A一视同仁的话,熵H(D)可以表示为HC(D),信息增益比的公式则为:

gR(D,A)=g(D,A)HA(D)=HC(D)H(D|A)HA(D)

有没有变得好记好理解一些。

决策树的生成

按照特征选择标准的不同,决策树的生成算法常见分为ID3算法、C4.5算法。

IDE3算法

输入:训练数据集 D,特征集 A,阈值 ε
输出:决策树 T
1. 若 D 中所有实例属于同一类 Ck,则T为单节点树,将 Ck 作为该节点的类别标记,返回 T
2. 若 A=ϕ,则 T 为单节点树,将 D 中实例数最大的类 Ck 作为该节点的类别标记,返回 T
3. 计算 A信息增益并选择最大的特征 Ag
4. 如果 Ag 信息增益小于阈值 ε,则 T 为单节点树,将 D 中实例数最多的类 Ck 作为该节点的类别标记,返回 T
5. 否则,对 Ag 每一个可能的取值 ai,依照 Ag=aiD分割为若干非空子集 Di,将 Di 中实例数最大的类别作为标记,构建子节点,由节点及子节点构成树 T,返回 T
6. 对第i个子节点,以 Di 为训练集,以 A{Ag} 为特征集,递归地调用步骤1~5,返回 Ti

C4.5算法

将IDE3算法中的信息增益替换为信息增益比

决策树的剪枝

决策树生成的过程只注重提高信息增益,以增强对训练集数据的分类精度,但是这往往容易导致过拟合。而对决策树的剪枝可以通过降低复杂度来提高其泛化能力。
在执行剪枝动作时,需要一个指标来决定是否剪枝,因此引进损失函数的概念。

损失函数

设树T的叶节点数量为Tt是树T的叶节点,该叶节点有Nt个实例样本,其中k类的样本有Ntk个(k=1,2,...,K),H(T)为叶节点t上的经验熵。

决策树的损失函数定义为:

Cα(T)=t=1|T|NtHt(T)+α|T|

其中,
H(t)=kKNtkNtlogNtkNt

α0

通常,将决策树的损失函数写为:
Cα(T)=CT+α|T|

C(T)表示模型对训练数据的训练误差,即模型与训练数据集拟合的程序,而|T|表示模型的复杂度,参数α条件两者的比例。

剪枝算法

有了损失函数,剪枝的时候就有了参考,大致思路是,如果剪枝能够减小损失函数值,那就剪,否则不剪。

输入:决策树T,参数α
输出:修剪后的决策树Tα
1. 计算每个节点的经验熵。
2. 递归地从叶节点向上回缩。
设剪枝之前和之后的决策树分别为TA,TB,其对应的损失函数值分别是Cα(A),Cα(B),如果:

Cα(A)Cα(B)

则进行剪枝,将父节点变为新的叶节点。
3. 返回步骤2,直到不能继续为止,得到损失函数最小的决策树Tα

说明

如有错误,敬请指正。