一、决策树定义
决策树(Decision Tree)是一种基本的分类与回归方法,它可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。相比朴素贝叶斯分类,决策树的优势在于构造过程不需要任何领域知识或参数设置,因此在实际应用中,对于探测式的知识发现,决策树更加适用。
二、决策树流程
决策树流程是决策树一类常见的额机器学习方法。决策树也称为“判定树”。以二分类任务为例,我们希望从给定训练数据集学得一个模型用以对新示例进行分类,这个把样本分类的任务,可看作对“当前样本属于正类吗?”这个问题的“决策”或“判定”的过程。顾名思义,决策树是基于树结构来进行决策的,这恰是人类在面临决策问题时一种很自然的处理机制。例如,我们要对“这是好瓜吗?”这样的问题进行决策时,通常会进行一系列判断或“子决策”:我们先看“它是什么颜色?”如果是“青绿色”,则我们再看“它的根蒂是什么形态?”,如果是“蜷缩”,我们再判断“它翘起来是什么声音?”,最后,我们得出最终决策:这是个好瓜。这个决策过程如下图所示:
显然,决策过程的最终结论对应了我们所希望的判定结果,例如“是”或“不是”好瓜;决策过程中提出的每个判定问题都是对某个属性的“测试”,例如“色泽=?” “根蒂=?”;每个测试的结果或是导出最终结论,或是导出进一步的判定问题,其考虑范围是上次决策树结果的限定范围之内,例如若在“色泽=情侣”之后再判断“根蒂=?” ,则仅在考虑青绿色瓜的根蒂。
决策树的学习的目的是为了产生一颗泛化能力强,即处理未见实例能力强的决策树,其基本流程遵循简单且直观的“分而治之(divide-and-conquer)”策略,如下图:
显然,决策树的生成是一个递归的过程。在决策树算法中,有三种情形会导致递归返回:(1)当前结点包含的样本全属于同一类别,无需划分;(2)当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;(3)当前结点包含的样本集合为空,不能划分。
在第(2)种情况下,我们把当前结点标记为叶结点,并将其类别设定为该结点所含样本最多的类别;在第(3)种情形下,同样把当前结点标记为叶结点,但将其类别设定为其父结点所含样本最多的类别。注意这两种情形的处理实质不同:情形(2)是在利用当前结点的后验分布,而情形(3)则是把父结点的样本分布作为当前结点的先验分布。
三、划分选择
由算法4.2可看出,决策树学习的关键是在第8行(选择最优划分属性),一般而言,随着划分过程的不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度(purity)”越来越高。
那么,信息是如何进行度量的呢?—— 熵
使用熵表示不确定性的度量。
熵定义 :如果一件事有K种可能的结果,每种结果的概率为:
则我们对此事件的结果进行观察后得到的信息量为:
熵越大,随机变量的不确定性越大。
条件熵(局部,现象发生的前提下的熵):
条件熵H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性。例如,知道瓜的颜色前提条件下,根据西瓜好与坏的不确定性。
熵与条件熵中的概率由数据估计得到时,所对应的熵和条件熵称为经验熵和经验条件熵。若概率为0,令0log0=0
信息增益
信息增益表示得知特征X(瓜皮颜色)的信息使得类Y(好与不好)的信息的不确定性减少程度。
特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下的经验条件熵H(D|A)之差
熵H(Y)与条件熵H(Y|X)之差胡称为互信息,即g(D,A)。
信息增益大表明信息增多,信息增多,则不确定性就越小。
信息增益准则的特征选择方法
对数据集D,计算每个特征的信息增益,并比较他们的大小,选择信息增益最大的特征。
信息增益率
信息增益率定义:特征A对训练数据集D的信息增益比定义为其信息增益与训练数据D关于特征A的值得熵HA(D)之比:
其中, ,n是特征A取值个数。如A代表瓜皮颜色:
三、ID3
3.1 ID3定义
ID3的算法的核心是在决策树各个子结点上应用信息增益准则选择特征,递归的构建决策树,具体方法是:从根节点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子节点;再对子节点递归调用以上方法,构建决策树。
直到所有特征的信息增益均很小或没有特征可以选择位置。最后得到一个决策树。
例子:贷款申请样本数据表
根据贷款申请样本数据表,我们有15条样本记录,则样本容量为15。最终分为是否贷款2个类,其中是有9条记录,否有6条记录。有年龄、工作、有自己的房子和信贷情况4个不同特征。每个特征有不同的取值,如年龄有老、中、青三种取值。
由熵的定义:
计算经验熵:
然后计算各特征对数据集D的信息增益。分别以A1,A2,A3,A4表示年龄、有工作、有自己的房子和信贷情况4个特征。
根据年龄有取值青年、中年、老年。
青年贷款是2条记录,否3条记录,共5条记录
中年贷款是3条记录,否2条记录,共5条记录
老年贷款是4条记录,否1条记录,共5条记录
由条件熵公式
条件熵公式:
年龄为已知条件的条件熵为:
D1,D2,D3分别表示年龄取值为青年、中年、老年的样本子集。
以年龄为条件的信息增益为:
有工作的信息增益:
有房子的信息增益:
信贷情况的信息增益:
最后比较各特征的信息增益值,对于特征A3有自己房子的信息增益值最大,所以选择特征A3作为最优特征。
由于特征A3(有自己房子)的信息增益值最大,所以选择特征A3作为根节点的特征。它将训练数据集划分为两个子集D1(A3取值为是)和D2(A3取值为否)。由于D1只有同一类样本点,可以明确要贷款给D1,所以它成为一个叶节点,节点类标记为“是”。
对于D2则需要从特征A1(年龄),A2(有工作)和A4(信贷情况)中选择新的特征。计算各个特征的信息增益:
选择信息增益最大的特征是A2(有工作)作为节点特征。A2有2个值,一个对应“是”(有工作)的子节点,包含3个样本,他们属于同一类,所以这是一个叶节点,类标记为“是”;另一个对应“否”(无工作)的子节点,包含6个样本,属于同一类,这也是一个叶节点,类标记为“否”。
换句话有15个贷款人,经过是否有房这一筛选条件,有房子的6个人能够贷款。剩余9个人需要进一步筛选,以是否有工作为筛选条件,有工作的3个人可以贷款,无工作的6个人不能够贷款。
该决策树只用了两个特征(有两个内部结点),以有自己的房子作为首要判决条件,然后以有工作作为判决条件是否可以贷款。
ID3算法只有树的生成,所以该算法生成的树容易产生过拟合,分的太细,考虑条件太多。
ID3的缺点:
i) 用信息增益选择属性时偏向于选择分支比较多的属性值,即取值多的属性。
ii) 不能处理连续属性
3.2 C4.5
C4.5算法是数据挖掘十大算法之一,它是对ID3算法的改进,相对于ID3算法主要有以下几个改进:
(1) 用信息增益比来选择属性
(2) 在决策树的构造过程中对树进行剪枝
(3) 对非离散数据也能处理
(4) 能够对不完整数据进行处理
3.3 CART
CART算法选择分裂属性的方式是比较有意思的,首先计算不纯度,然后利用不纯度计算Gini指标。以满意度预警模型为例,计算自变量故障原因的Gini指标时,先按照故障原因可能的子集进行划分,即可以将故障原因具体划分为如下的子集:{1,2,3}、{1,2}、{1,3}、{2,3}、{1}、{2}、{3}、{},共计8(2^V)个子集。由于{1,2,3}和{}对于分类来说没有任何意义,因此实际分为2^V-2共计6个有效子集。然后计算这6个有效子集的不纯度和Gini指标,选取最小的Gini指标作为分裂属性。
不纯度的计算方式为:
pi表示按某个变量划分中,目标变量不同类别的概率。
某个自变量的Gini指标的计算方式如下:
四、树的剪枝
1)先剪枝:
通过提前停止树的构造,如通过决定在给定的节点不再分裂或划分训练元组的子集,而对树剪枝,一旦停止,该节点即成为树叶。在构造树时,可以使用诸如统计显著性、信息增益等度量评估分裂的优劣,如果划分一个节点的元组低于预先定义阈值的分裂,则给定子集的进一步划分将停止。但选取一个适当的阈值是困难的,较高的阈值可能导致过分简化的树,而较低的阈值可能使得树的简化太少。
2)后剪枝:
它由完全生长的树剪去子树,通过删除节点的分支,并用树叶替换它而剪掉给定节点的子树,树叶用被替换的子树中最频繁的类标记。
其中c4.5使用悲观剪枝方法,CART则为代价复杂度剪枝算法(后剪枝)。
参考: 《机器学习》 周志华著
https://blog.youkuaiyun.com/gumpeng/article/details/51397737