决策树 ( decision tree)详解

决策树算法的基本流程

决策树顾名思义就是基于树对问题的决策和判别的过程,是人类在面对决策问题时一种很自然的处理机制,下面有个例子 通过决策树得出最终的结果。

                              

我们所要做的就是去得到这样一个树去帮助我们决策问题,使样本通过这个树实现分类。一般来说,一棵树包含一个根节点,若干个内部节点和若干个叶子节点;叶子节点对应于决策结果,其他每个节点则对应一个属性测试;每个节点包含的样本集合根据属性测试的结果被划分到子节点中;根节点包含样本的全集。从根节点到每个叶子节点的路径对应了一个判定测试序列。决策树学习的目的就是为了产生一个泛化能力强,即处理未见实例能力强的决策树,它的基本流程遵循简单直观的分而治之策略,距地步骤如下:       

                      

从伪代码函数显然可以看到决策树的生成是一个递归的过程,在决策树的生成过程中有三种情况会导致树停止生成递归返回:

  1. 当前叶子节点包含样本属于同一类别,此时无需划分。
  2. 当前属性集A为空,,或者是样本在所有属性上取值相同,无法划分。(此时标记为该节点所含样本最多的类别,属于后验分布)
  3. 当前节点样本集合为空,不能划分。(此时把父节点的样本分布作为当前节点的先验分布)

划分选择

基本的决策树建立过程我们已经了解,我们也会意识到决策树选择最重要的部分就是第八行,即如何选择最有划分决策树的属性,一般而言,随着划分结果的不断进行,我们所希望的是分支节点所包含的类别尽可能的属于同一个类别,即节点的纯度越来越高。

信息增益 (ID3决策树):

信息熵是度量样本集合纯度最常用的一种指标,假定样本当前集合D中年第k类样本所占比例为,则D的信息熵定义为:

                                                     

Ent(D)的值越小,测D的纯度越高。(信息熵是信息论里面的概念如果不太理解可以阅读 信息量→熵

假设离散的属性值 a 有V个可能的取值,若使用a来对样本进行划分,测绘产生V个分支节点,其中第v个分支节点包含了D中所有在属性a上取值为的样本,记为,我们可以根据信息熵的式子计算出的信息熵,在考虑到不同的分支节点所包含的样本数不同,给分支节点赋予权重,即样本数越多的分支节点的影响越大,于是可以计算出属性a对样本集合D进行划分后所获得的信息增益

                                                       

信息增益越大,意味着划分 ‘纯度提升’越大,我们所要选择的就是:

                                                            

这就是著名的ID3决策树学习算法以信息增益为准测划分属性。

增益率(C4.5决策树):

有时候如果样本产生的分支较多,也会的到较高的信息增益,但是每个分支所含的样本数少的话产生的决策树不具有很强的泛化能力,无法对新样本进行较好的预测。

实际上,信息增益准对可取值数目较多的属性有有所偏好,为了减少这种偏好带来的不利影响,C4.5就出来了,他不直接使用信息增益,而是使用增益率来选择最优划分属性,他的定义为:

                       

IV(a)被称为属性a的固有值,a的可能取值越大,则分母IV(a)越大约束上式。

要注意的是,增益率准则对可能取值较少的属性有所偏好,C4.5算法不是直接选择增益率最大的属性进行划分; 他是先从候选划分属性中找出信息增益高于平均水平的属性,在从中选择增益率最高的。

基尼指数(CART决策树):

基尼指数也是衡量数据纯度的一种方式,我们也可以用基尼值来度量D:

                                                                      

直观一点说,Gini(D)反映了从数据D中随机抽取两个样本,其类别标记不一致的概率,因此,Gini(D)值越小,划分纯度越高,他的划分准则为:

                                                                   

于是我们选择的属性值a为:

                                                                        

剪枝处理

剪枝是决策树学习降低过拟合,增加泛化能力的主要手段。它分为预剪枝和后剪枝两种方式。

预剪枝是指在决策树的生成过程中,对每个节点在划分前进行估计,若当前节点的划分不能带来决策树泛化性的提升,则停止划分当前节点为叶子节点。

后剪枝是指先从训练样本生成一个决策树,然后在自底向上地对非叶子节点进行考察,若去掉此节点能带来决策树泛化性的提升则将该子树替换为叶子节点。

至于如何看泛化性是否提升,可以采用留出法,在训练时提供验证集等方法。

猜你喜欢

转载自blog.csdn.net/H_hei/article/details/84142537
今日推荐