决策树--总结

本文深入探讨了决策树的基本概念、构造过程,包括ID3和C4.5算法,并介绍了剪枝的重要性及其不同方法,如预剪枝和后剪枝。通过对实例的分析,展示了如何利用决策树进行分类决策,并讨论了决策树在处理训练数据时可能出现的问题和解决策略。
摘要由CSDN通过智能技术生成

仅以此文纪念过往的岁月

一.总结

决策树 ,顾名思义是一种决策类型的树,回想一下树的结构,存在层次和节点,其中每一个非叶节点均是一种决策类型,每一个叶子均是一种决策结果。但是其缺点存在过拟合的现象。

二.决策树简介

决策树比较符合人类的思考模式,如下示例

实例:

简单例子如下:

一个老妈向女儿推荐了一个相亲对象,一般女孩子会问一些问题,通过这些问题来判断是否去见,

女儿:多大了

老妈:26   

女儿决策:大于30不见,太老了,小于25不见,太小了

女儿:有房没?

老妈:有 

女儿决策:有房不错,可以,没房不见,穷屌丝

女儿:收入高不?

老妈:一般,是个公务员

女儿决策:可以见见

如果将上面的对话表示成树的结构,如下图所示:

上面的图的数据再量化后,则就是一个决策树

决策树的官方定义

决策树(decisiontree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果

三.决策树的构造

    决策树的构造的核心在于策略的选择,即选择某一个特征,根据属性的不同构造不同的分支,其目标是分裂子集尽量“纯”。

    属性选择有多种判定基准ID3,C4.5算法等。

    分裂属性时,分三种情况:

1. 树结构不要求为二叉树时,每一个属性划分均为一个分支

2. 树结构要求为二叉树时,使用属性划分的子集,区分属于子集,不属于子集,分为两个分支

3. 数值为连续值,取分裂点,小于该值为一个分支,大于等于该值为一个分支。

ID3算法

    设D为用类别对训练元组进行的划分,则D的(entropy)表示为:

   

其中pi表示第i个类别在整个训练元组中出现的概率,可以用属于此类别元素的数量除以训练元组元素总数量作为估计。熵的实际意义表示是D中元组的类标号所需要的平均信息量。

现在我们假设将训练元组D按属性A进行划分,则A对D划分的期望信息为:

而信息增益即为两者的差值:


以下面示例简单说明上面的公式

ID

 

日志密度

好友密度

是否使用真实头像

账号是否真实

1

S

s

n

n

2

s

l

y

y

3

l

m

y

y

4

m

m

y

y

5

l

m

y

y

6

m

l

n

y

7

m

s

n

n

8

l

m

n

y

9

m

s

n

y

10

s

s

y

n

目标是根据日志密度,好友密度,是否使用真实头像来区分账号是否真实

计算熵值,样本量10,假账号3,真实账号7

Ptrue = 7/10 = 0.7

Pfalse = 3/10 =0.3

Info(D) =-0.3log(0.3)-0.7log(0.7) = 0.876

计算日志密度熵值,日志密度分为3类S,L,M

其中L分类,样本总数10,L类3,L类中假账号0 真实账号3

Info(L) =0.3*(-0/3*log(0/3)-3/3*log(3/3))

其中S分类,样本总数10,L类3,L类中假账号2 真实账号1

Info(S) =0.3*(-2/3*log(2/3)-1/3*log(1/3))

其中M分类,样本总数10,L类4,L类中假账号1 真实账号3

Info(M) = 0.4*(-1/4*log(1/4)-3/4*log(3/4))

Infol(D) = Info(L)+Info(S)+ Info(M) = 0.603

所以gain(L) = 0.876-0.603 = 0.273

同理可以计算出好友密度和是否使用真实头像的信息增益为0.553和0.033

因为好友密度为最大信息增益,所以使用好友密度该特征作为分裂节点。

根据上述分裂,继续递归分裂,得到决策树。

ID3.5 偏向于使用多值属性,如果存在唯一标识属性ID,则ID3会选择它作为分裂属性,这样虽然使得划分充分纯净,但这种划分对分类几乎毫无用处。

例如表格中唯一ID

Info(D) =-1/10*(-0/1log(0/1)-1/1log(1/1)) = 0;

其gain为0.876,ID3算法会使用唯一ID作为分裂属性,但是对于分类几乎毫无用处。

C4.5算法

ID3的后继算法C4.5使用增益率(gain ratio)的信息增益扩充,试图克服这个偏倚。

     C4.5算法首先定义了“分裂信息”,其定义可以表示成:

                 

     其中各符号意义与ID3算法相同,然后,增益率被定义为:

      

根据上述示例中, 日志密度的分裂信息如下

Split_info =-0.3log(0.3)- 0.3log(0.3)- -0.4log(0.4) = 1.571

则日志密度的增益率为

Gain_ratio (D) =0.273/1.571 = 0.174

唯一ID的增益率为

Split_Info =-1/10log(1/10)*10 = 2.302

Gain_ratio =0.876/2.302 = 0.381

感觉C4.5依然会采用唯一ID作为分裂属性,其原因为样本量少,如果样本量很巨大,其Splite_info会趋向无穷大,则gain_ratio趋向无穷小,则不会选择唯一ID作为分裂属性。

四.  剪枝

       为什么需要剪枝,因为决策树趋向完美的对训练集进行分类,但是训练集包含了无数种可能,世界上没有一种完美的模型能够处理一种事情,所有成功的模型都是不完美的,因为不完美,才能包容一切。人也是一样。

    训练数据集中如果存在噪声或离群点,如果没有剪枝,决策树也会将这些干扰完美的分类,但是噪声或离群点其实是没什么用的数据,反而导致决策树的异常。对于训练集看起来时完美的,但是对于测试集则效果底下。

       所以为了不完美,就需要将决策树剪枝,剪枝分两种

1.     预剪枝

1.1    限制树生长的深度,缺点:需要事先设置,如果不清楚模型所需的树的深度,如果过于限制树深度,则模型趋于一般,无法准确分类。如果设置的树深度过大,则失去了剪枝的意义

1.2    限制样本最小值,如果划分后的子集小于设置的最小值,则停止树的生长,该节点变为叶子节点。此时如果出现子集不纯的现象,voting来抉择。

2.     后剪枝

剪枝之后,对该节点的类别判别是用大多数原则,选择当前数据集下的最多的类标签为该节点的类别。 
1Reduced Error Pruning:误差降低剪枝 
  最简单粗暴的一种后剪枝方法,其目的减少误差样本数量。 采用测试集数据来做判定。
     

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值