概述
决策树常见的算法有IDE3、C4.5以及CART算法。
按照决策树是否为二叉树,可以将3个算法分为两类,IDE3、C4.5属于非二叉树决策树算法,CART针对二叉树决策树,本文介绍IDE3、C4.5,关于CART算法,请参考 决策树笔记-CART算法。
决策树是一种用来做分类的树形结构。
决策树的节点分为两种,内部节点和叶节点。内部节点表示一个特征或属性,叶节点表示分类结果。
用决策树进行分类时,从根节点开始,对待分类实例的某一特征进行测试,根据测试结果将实例分配到子节点,如此递归进行下去,直到达到叶节点,即完成分类。
决策树的学习通常包括2个步骤,决策树的生成和决策树的剪枝。而在决策树的生成过程中,用到的很关键的算法,就是特征选择。在生成决策树时优先使用对分类最有效的特征来作为当前的节点,特征选择算法就是用来找出“最有效的特征”。
决策树的生成
特征选择
特征选择目的在于选取对训练数据具有分类能力的特征,这样可以提高决策树学习与分类的效率。
例如,你是一名新入职的负责审核贷款的银行员工,你现在要学习如何决定是否给一个申请者发放贷款,你的上司给了你一些已经完成审核的申请信息让你学习,其中包含一些特征:年龄、是否有工作、是否有房子、信誉情况,你发现能否申请成功跟是否有房子的关系最大,而跟年龄的关系相对最小,于是你在做决策时,会优先考虑申请者是否拥有房子。
那么给定一堆特征,如何判断哪个特征跟分类的关系最大,如何评价各个特征的分类能力呢?通常选择的标准是信息增益(互信息)或者信息增益比(信息增益的加强版)。
信息增益
为说明信息增益,首先来了解熵和条件熵。
熵
熵是表示随机变量不确定性的度量。总是考得很好的学生和总是考倒数的学生熵都很小,而有时候考得好有时候考得不好的学生熵比较大。
设
X
是一个取有限个值的离散随机变量,其概率分布为:
该随机变量 X 的熵定义为:
若 pi=0 ,则定义 0log0=0 。
条件熵
设有随机变量
(X,Y)
,其联合概率分布为
条件熵 H(Y|X) 表示在已知随机变量 X 的条件下随机变量
作为银行员工,老王跟你申请贷款,一种情况下你对老王的情况一无所知,另一种情况下你知道老王北京有套房子,这两种情况下你贷款给老王的可能性必然是有很大差异的,条件熵就是用来表达后者。
以老王有房子为条件,你给老王贷款这件事情的不确定性(熵)减小了。
随机变量
X
给定的条件下随机变量
话说得有点绕,公式也有点绕。你一无所知的时候给老王贷款的不确定性就叫做给给老王贷款的熵,你知道老王有无房子时给老王贷款的不确定性就叫做“以老王有无房子为条件,你给老王贷款的条件熵”,这里条件熵包含了有无房子这个变量的两个取值:有房子、没房子,这就是为什么要求数学期望。
信息增益
信息增益表示得知特征
X
的信息而使得类
对老王一无所知时给老王贷款的不确定性 - 知道老王有无房子时给老王贷款的不确定性 = 关于有无房子和是否贷款的信息增益
特征
A
对训练数据集
这里还要多说一句,打个岔,不想看这部分可以不看,直接看下一小节信息增益比。
互信息的定义是熵和条件熵之差,而上面信息增益也说是熵和条件熵之差,那岂不是互信息=信息增益?
为了方便理解,上面没有提及经验熵和经验条件熵的概念。
当熵和条件熵中的概率由数据估计(尤其是极大似然估计)得到时,所对应的熵和条件熵分别被称为经验熵和经验条件熵,而:
但是在数值上, 信息增益=互信息 。
信息增益比
信息增益有一个缺点:偏向于取值种类多的特征。
特征身份证号假设有100个(即训练集的数量,100个人就有100个身份证号)取值;特征有无房子有两个取值,有或无;那么特征增益这种评价特征优劣的指标会偏向于身份证号特征。
因为身份证号的条件熵为一定为0,因而其信息增益就等于熵;而有无房子的条件熵往往大于0,因此有无房子的信息增益小于身份证号。
更通俗点,你的模型通过学习会记住训练集中申请人的身份证号,因为它发现仅仅凭身份证号,就可以知道是否给一个人贷款;但是这是毫无意义的,因为这严重过拟合了。
因此引出信息增益比的概念。
特征
A
对训练数据集
其中 HA(D)=−∑ni=1|Di||D|log2|Di||D| , n 是特征
其实如果将类别标记
C
和特征
有没有变得好记好理解一些。
决策树的生成
按照特征选择标准的不同,决策树的生成算法常见分为ID3算法、C4.5算法。
IDE3算法
输入:训练数据集
D
,特征集
输出:决策树
T
1. 若
2. 若
3. 计算
4. 如果
Ag
信息增益小于阈值
ε
,则
T
为单节点树,将
5. 否则,对
6. 对第
i
个子节点,以
C4.5算法
将IDE3算法中的信息增益替换为信息增益比。
决策树的剪枝
决策树生成的过程只注重提高信息增益,以增强对训练集数据的分类精度,但是这往往容易导致过拟合。而对决策树的剪枝可以通过降低复杂度来提高其泛化能力。
在执行剪枝动作时,需要一个指标来决定是否剪枝,因此引进损失函数的概念。
损失函数
设树
T
的叶节点数量为
决策树的损失函数定义为:
其中,
通常,将决策树的损失函数写为:
C(T) 表示模型对训练数据的训练误差,即模型与训练数据集拟合的程序,而 |T| 表示模型的复杂度,参数 α 条件两者的比例。
剪枝算法
有了损失函数,剪枝的时候就有了参考,大致思路是,如果剪枝能够减小损失函数值,那就剪,否则不剪。
输入:决策树
T
,参数
输出:修剪后的决策树
Tα
1. 计算每个节点的经验熵。
2. 递归地从叶节点向上回缩。
设剪枝之前和之后的决策树分别为
TA,TB
,其对应的损失函数值分别是
Cα(A),Cα(B)
,如果:
则进行剪枝,将父节点变为新的叶节点。
3. 返回步骤2,直到不能继续为止,得到损失函数最小的决策树 Tα
说明
如有错误,敬请指正。