决策树

决策树是应用最广的归纳推理算法之一,它是一种逼近离散函数方法,对噪声数据有很好的鲁棒性,能够学习析取表达式,广为应用的算法有ID3,ASSISTANT和C4.5。

通常决策树代表实例属性值约束的合取(conjunction)的析取式(disjunction)。树根到树叶的每一条路径对应一组属性测试的合取,而整棵树是这些合取的析取。

基本的ID3算法是通过自顶向下构造决策树进行学习的。首先考虑的问题是哪一个属性将在树的根节点测试。为解决这一问题,使用统计测试来确定每一个实例属性单独分类训练样本的能力。将分类能力最好的属性作为树的跟节点,之后根节点属性的每一个可能值会产生一个分支,然后把训练样例排列到适当的分支下,重复整个过程,用每个分支结点关联的训练样本来选择最佳属性。这是对合格决策树的贪婪搜索,也就是说算法从不回溯重新考虑以前的选择。

那么,如何确定哪一个属性具有最佳分类能力呢?衡量属性价值的好的定量标准是什么?我们使用“信息增益(information gain)”来作为衡量标准,用来衡量属性分类样本的能力。ID3算法在增长树的每一步使用这个标准来选择最佳分类的属性。

为精确定义信息增益,我们先定义信息论中广泛使用的一个度量标准——熵(entropy),它刻画了任意样本集的纯度。给定包含关于某个目标概念的正反样本的样本集 S  ,那么 S  相对这个布尔型分类的熵为:

Entropy(S)=p + log 2 p + p  log 2 p   
其中 p +   表示正比例, p    表示反比例。并定义 0log0  等于 0  。如果样本中所有成员属于同一类,那么熵为0,如果正反比例相等,熵为1,正反比例数量不等时,熵的取值范围为 (0,1) 

上面说到的是目标分类时布尔类型的情况,更一般的情况,如果目标属性具有 c  个不同的值,那么 S  相对于 c  个状态分类的熵为:

Entropy(S) i=1 c p i log 2 p i  
其中 p i   S  中属于类别 i  的比例。如果目标属性具有 c  个可能的值,那么熵最大可能到 log 2 c 

现在已经有了熵作为衡量训练样本集合纯度的标准,我们就可以定义属性分类训练数据能力的度量标准了,也就是上面说到的“信息增益”,一个属性的信息增益就是由于使用这个属性分割样例而导致的期望熵降低,一个属性 A  相对样本集合 S  的信息增益 Gain(S,A)  为:

Gain(S,A)Entropy(S) vValues(A) |S v ||S| Entropy(S v ) 
其中 Values(A)  是属性 A  所有可能的值, S v   S  中属性 A  的值为 v  的子集。上式第一项就是原来集合 S  的熵,第二项是用 A  分类 S  后熵的期望值,描述的期望熵就是每个子集熵的加权和,权值为 S v   占原始样本 S  的比例。所以 Gain(S,A)  是由于知道属性 A  的值而导致的期望熵减少。

信息增益度量存在一个内在偏置,它偏袒具有较多值的属性,那日期(Date)属性来说,它会在所有属性中有最大的信息增益,这是因为单独Date就可以完全预测训练数据的目标属性,于是这个属性会被作为树的根结点并成为一棵深度为一级但非常宽的树,它可以理想地分类训练数据,但是对于后来的数据性能会非常差。

为了避免这个问题,可以使用其他方式来度量最佳分类属性,这里我们使用增益比率(gain ratio),它通过加入一个称作分裂信息(split information)的项来惩罚类似Date这样的属性,分裂信息用来衡量属性分裂数据的广度和均匀性:

SplitInformation(S,A) i=1 c |S i ||S| log 2 |S i ||S|  
其中 S 1   S c   c  个值的属性 A  分割 S  而形成的 c  个子集。分裂信息起始就是 S  关于属性 A  各值的熵(请回忆上面定义信息增益用到的熵)。

增益比率由前面的信息增益和分裂信息共同定义:

GainRatio(S,A)Garin(S,A)SplitInformation(S,A)  
分裂信息项阻碍选择值为均匀分布的属性,比如,对于一个有 n  个样本的集合,被属性 A  彻底分割(分成 n  组),这时分类信息为 log 2 n  ,如果布尔值属性 B  来分割这个集合,假使刚好分成两半,那么分裂信息是1。如果属性 A  B  有同样的信息增益,那么用增益比率来度量的话,使用属性 B  分类有更高的增益比率。

然而使用增益比率也会带来一些问题,当某个子集非常接近整个样本集时,分裂信息会非常下或者为0。如果某个属性对于 S  的所有样本有几乎相同的值,那么会导致增益比率未定义或非常大。为了避免这样的情况,可以结合前面提到的两种方法,先计算每个属性的增益,然后对那些有较高信息增益的属性计算增益比率。

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