简单易懂——决策树

一、废话(可不看)

最近在复习整理(重学)一些算法的相关知识,最先看的那肯定就是决策树了,而很多人就在第一个决策树这放弃了,当然是少数奥,我就是为了拯救那少数而生的!(我的废话好多)

二、啥是决策树?

首先说啥玩意是决策树,英文名叫Decision Tree(DT),你第一眼看决策树这几个字,肯定知道它就是个树模型。那么说到树模型你又会想到根节点、内部节点、叶子节点。在DT中,而我们的目标就是选择一个很好的属性对样本进行划分,保证其准确率。根节点包含了所有样本,内部节点代表用哪个属性去分裂,或者说代表在某个属性中哪个范围进行分裂,而叶子节点代表的是样本的类别或者值。

在这里属性(特征)的类型分为二种,一种是离散型的,另一种是连续的。比如西瓜的大小,分为大和小二种,类似这样的特征就是离散型的特征。再比如西瓜的重量,2kg、2.2kg...,这种数值型的特征。我们这里先暂时讨论连续值如何处理,后续会单独讨论连续型的特征如何处理。针对这二种属性又有不同的分裂方式。这是属性值的不同。我们后续先讨论离散的属性如何分裂,连续型的我们会单独拉出来解释如何分裂

属性值分为离散和连续的,而label也分为离散和连续的。由于label不同,又将其分为分类树和回归树。再来带你整明白啥是分类树,啥是回归树。你可以先有这么个印象,分类树的label是离散值,回归树的label是连续值。

三、分类树

说完了DT的每个部分是咋回事,再来说下他是怎么分类的,这里先说分类树。估计你会有这样几个问题,没估计到的先自行脑补一下。

  • Problem1,它是怎么判断先根据哪个属性进行分类的?
  • Problem2,如果有的属性包含连续值怎么划分?
  • Problem3,缺失值得如何处理?
  • Problem4,怎么判定停止划分,该节点变成叶子节点?
  • Problem5,听说DT比较容易过拟合,如果过拟合咋办?
  • Problem6,测试集如何评测?

我来逐一带你整的明明白白的。

Problem1. 怎么判断先根据那个属性进行分类?(这里先说离散的属性值)

这里主要有几个衡量指标,信息熵、条件熵、信息增益、信息增益率、基尼系数、误分类率,让我们一个一个攻破。

我们来结合一个例子来说,给定一个数据集1,来判断女孩子要不要嫁,特征就是帅不帅、性格咋样、身高如何、上不上进。

index帅?性格好?身高?上进?嫁?
1不好不上进不嫁
2不帅上进不嫁
3上进
4不帅爆好上进
5不好上进不嫁
6不好上进不嫁
7不上进
8不帅上进
9爆好上进
10不帅不好上进
11不上进不嫁
12不上进不嫁

1)信息熵

啥叫熵?记住,它是衡量随机变量的不确定性的,啥意思?咱先不管它咋计算的,放到决策树里来说,比如,有A、B、C三个属性,C的熵最大,那么就说明用C来划分样本,他的不确定性很大。还不懂?你想,用C划分的不确定性最大,也就是他划分混乱程度最高,而我们的目的是分类,分成类别,让他更加混乱了,所以不要用熵大的去划分。这里有一个西瓜书里提到的纯度的概念,简单来说,熵越大、混乱程度

来,再来看他的公式(节点t的熵):

  (公式 1)

  表示在节点 t 中 i 类样本所占的比例。

我们在结合上面数据集来说,我们算数据集整体的熵,因为我们的label是嫁或者不嫁,所以这里统计嫁或者不嫁的个数:

嫁 = {3,4,7,8,9,10}(这里直接用index代替的),共6个

不嫁 = {1,2,5,6,11,12},也是6个

所以, 

2)条件熵

条件熵就是,在某个条件下的熵,与条件概率是很相似的

先来说下条件熵,记作   ,他表示在X的条件下的熵。

  (公式 2)

其中  

再来结合数据集说,我们这里假定知道了男生的身高,先对数据进行统计:

矮={1,2,3,5,6,11,12},其中,1个嫁,6个不嫁

中 = {8,9},2个都是嫁

高= {4,7,10},3个都是嫁

我们这里分为二步来计算,先算每个属性值的熵,如下:

然后在来计算总的条件熵:

p(x=矮) = 7/12 , p(x=中) = 2/12 , p(x=高) = 3/12

so,你学会了吗?还不是很难对不对,来继续!

3)信息增益

再来说啥是信息增益?信息增益就是信息熵与条件熵的差,它是某节点父节点的信息熵与子节点的信息熵的差。简单解释,有个父亲特别不靠谱,而用他儿子这个属性进行分裂,减少了多少不靠谱的成分,这个减少的不靠谱成分就是信息增益。也就是它较少的不靠谱越多越好。即信息增益越大越好。

上公式:

  (公式 3)

所以我们一般会选择Gain(m)大的属性。

综上,那针对前面提到的数据集,男生的身高的信息增益怎么算?

就是总体的信息熵 - 身高的条件熵 = 0.301-0.103=0.198

(感兴趣的也可以算下其他因素对女生嫁或者不嫁的信息增益的大小 q_q )

传说中的ID3算法就是用信息增益来划分属性。

4)信息增益率

出现信息增益率的原因是,信息增益会比较偏向哪些取值比较多的属性。又不懂?比如有二个属性A和B。属性A有a1、a2二个属性值,而属性B有b1、b2、b3、b4四个属性值。那这个时候,信息增益就会更加偏向属性B,也就是属性B的信息增益会比A的信息增益大。

那么基于以上的原因,很明显,我们给他加个分母就行了。

这里的分母就是属性的信息熵

来,还是拿之前的数据集做为例子进行计算

依旧是针对高矮这个属性进行计算:

p(x=矮) = 7/12 , p(x=中) = 2/12 , p(x=高) = 3/12

Gain_ratio   (结果自己算吧)

插曲:那么为什么信息增益会比较倾向于属性值多的属性呢???

我们这里都是用样本的占比进行估计概率的,而如果样本量极其少的情况下,那么这样估计是不准确的。不理解我在说什么是吗?举个例子,比如抛硬币的场景,有10个样本,然后发现9个样本都是正面,但是实际上真的抛硬币的概率是9/10是正面吗?不是。所以这会导致偏差。

这就是传说中的大数定律:只有样本数量足够多的时候,频率才能准确近似概率。

而样本数越少,会导致对概率的估计得方差越大,也就会导致熵变小。这里理解不了熵为什么变小可以举例计算下。以抛硬币为例:

样本数量大,概率估计为1/2 :

样本数量小,抛硬币时,全是正面:

明显的可以看出,样本数量小,方差大,熵小,而针对于那些取值多的属性,熵变小的会更加明显,这里可以自己举例实验一下。

所以,数据集的不充足以及客观存在的大数定律导致取值多的特征在计算条件熵时容易估计出偏小的条件熵

这里可参考:

c4.5为什么使用信息增益比来选择特征?​www.zhihu.com 

而这里采用信息增益进行划分的决策树也就是C4.5

5)基尼系数

除了根据熵这一概念来判断如何划分数据集以外,我们还可以通过基尼系数来划分。

  (公式 4)

基尼系数表示,从数据集中随机抽取二个样本,其类别不一致的概率,因此,基尼系数越小,则数据集纯度越高,混乱度越低。

可以很明显的看出基尼系数会比其他指标算法更加简单一些,gini指数的划分趋向于孤立数据集中数量多的类,将它们分到一个树叶中,而熵偏向于构建一颗平衡的树,也就是数量多的类可能分散到不同的叶子中去了。

基尼系数也是CART使用的划分方法。

插曲:基尼系数和熵有什么联系和区别?

这参考:

Gini 系数与熵的关系_https://space.bilibili.com/59807853-CSDN博客​blog.csdn.net图标

6)误差分类率

其实在看决策树的时候,我就一直有一个疑问,费这么大劲,为什么不用准确率来确认用哪个属性来分类,岂不是更加简单直接。

这里的误差分类率与准确率并无差别,只不过是选择误差分类率小的还是选择准确率大的而已。

好,总结下,这里主要讲了,决策树该如何选择属性进行划分,以及每个不同的划分方式的具体细节以及举例计算。希望大家可以很好的理解。文章中提到的剩余问题会在接下来的文章中一一解答。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值