决策树

一棵决策树包含 一个根节点,若干内部节点,若干叶子节点。可以理解为,每一个节点里面都存储着一定量的数据集,根节点最多,包含数据的全集,一个节点的数据集等于其所有子节点的集合。与此同时,根节点和内部节点都对应一个分类属性(分类的依据,就是 特征)。根节点到某一个子节点的那条路径,对应了一个判定测试序列。

决策树的思想就是简单直观的“分而治之” 的策略。

基本流程图 见书P74页

代码的核心为 如何从A(特征集,属性集)中选择最优划分属性a

2.划分选择
我们希望决策树节点分支后的分支节点所包含的样本尽可能属于同一类(即样本的标签尽可能相同),即节点的纯度应该越来越纯。反应节点纯度用以下三种情况表示。
* 信息增益–ID3
原理:我们用信息熵

Ent(D)=pkk=1|y|log2(pk)
表示混乱程度,信息熵越大,混乱程度越大。信息增益
Gain(D,a)=Ent(D)v=1V|Dv|DEnt(Dv)
表示从该节点按该属性分支后减少的混乱程度,
我们希望混乱程度减少尽可能多,则下一个节点的纯度就大。
我们要对某一个节点进行分支,这个节点有n个特征(属性),但是只能选一个作为“判别条件”,那么现在的就是通过比较每一个属性对应的信息增益的大小,从n个属性选一个出来,谁的Gain(D,a)大,就选谁。即
a=argmaxaGain(D,a)

每一个属性的样本为
D
,其对应有n个可取值,每一个可取值的样本集为
Dv
,则
v=1nDv=D
。则每一个可取值在该属性的影响程度(权重)为
|Dv|D
,如果按该属性分离样本,就会产生n个子节点,所有子节点的熵的期望(即子节点的平均熵)为
v=1n|Dv|DEnt(Dv)
。又父节点的混乱程度为
Ent(D)
则父节点如果按该属性进行分离的话,信息增益为
Gain(D,a)=Ent(D)v=1V|Dv|DEnt(Dv)
。以此方法计算每一个属性
a
Gain(D,a)
,取最大值对应的
a
,就是该父节点分离的判别标准。
如果每一个属性的信息增益相同,任意选一个属性即可。

  • 增益率–C4.5
    信息增益准则对可取值数目较多的属性有所偏好。也就是说,一般的,属性的可取值数目越多,信息增益就越大,这样其实并不好。那我们就让信息增益除以一个数,这个数在属性的可取值多的情况下,取值也很大,这样就抵消了一部分因为属性的可取值的数目带来的影响。这个数就是,
    IV(a)=v=1n|Dv||D|log2|Dv||D|
    。其实就是可取数的信息量,n越大,信息也就越大。
    即最终比较每个属性的公式为
    Gain_ratio(D,a)=Gain(D,a)IV(a)

    但是,由于IV(a)变化的比Gain(D,a)快
    所以信息增益率对可取值数目较少的属性有所偏好。
  • 基尼指数–CRAT
    定义基尼指数为
    Gini_index(D,a)=v=1n|Dv||D|Gini(Dv)

    基尼指数越小越好。即
    a=argminaGini_index(D,a)

    公式
    Gini(D)=1k=1|y|p2k

    用于反映该节点的纯度。Gini(D)越小,纯度越高。
    该公式表明表示从数据集中任选两个得到样本的标签不同的概率。
    k=1|y|p2k
    表示从数据集中任选两个得到样本的标签相同的概率。

3.剪枝操作—–用于防止过拟合
由于决策树的产生全是用训练集做的,不断循环分支,所以train error 会很小,但是可能因为分枝过度,而过拟合。剪枝可以解决这个问题。
* 预剪枝
一边分枝,一边用测试集观测其泛化能力。就是在每次对该节点分支之前,用测试集去计算分支前的测试集精度和分支后的测试集精度,如果分枝能够提高测试集精度,就继续分枝。
比如有一个节点node,如果不对其进行分枝,那么该节点就是叶子节点,取其标签最多的标签作为该节点的标签,再用测试集去验证,计算该标签对测试集的预测的准确度p1。如果对其分枝,计算子节点对测试集的预测准确度p2。再比较p1,p2大小即可。

缺点:可能会造成欠拟合的情况。因为有些节点现在划分可能不会提高泛化性能,但是在此基础上再进行划分,泛化性能又会提高。

  • 后剪枝
    先生成完整的决策树,再从底向上对每一个节点用测试集检验,如果将该节点最为叶子节点的话,泛化性能是否会提高,能提高就将该内部节点最为叶子节点。泛化性能用决策树对测试集的预测准确度来衡量。

    优点:因为是把整个决策树先生成出来,再对每一个节点进行考验,所以欠拟合的风险小。
    缺点:正因如此,计算量非常大。

疑问:书上说,信息增益准则对可取值数目较多的属性有所偏好,增益率对可取值数目较少的属性有所偏好,不知道为什么???求高人指教!!!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值