决策树笔记

概述

决策树常见的算法有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=ai D 分割为若干非空子集 Di,将 Di 中实例数最大的类别作为标记,构建子节点,由节点及子节点构成树 T ,返回 T
6. 对第 i 个子节点,以 Di 为训练集,以 A{Ag} 为特征集,递归地调用步骤1~5,返回 Ti

C4.5算法

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

决策树的剪枝

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

损失函数

设树 T 的叶节点数量为T t 是树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α

说明

如有错误,敬请指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值