机器学习--决策树

目录

一、什么是决策树

二、决策树的生成

三、决策树的修剪

四、一些经典的决策树生成算法

 

一、什么是决策树

顾名思义,决策树是基于树结构来进行决策的。它每次从训练样本的若干属性中选择一项出来进行判定,并根据样本在该属性上的取值将样本划入不同的集合,之后进行下一轮决策,直到同一集合中的样本都属于相同类别为止。为便于理解,我们可以想象生活中的如下场景:一家企业准备招聘一名软件工程师,但是却收到了100份简历,那么如何从这100份简历中筛选出进入面试的人选呢?这家公司的HR想出了一种方法:

第一轮筛选

首先看应聘者的学历,本科以上直接通过,本科以下直接拒绝,剩下的本科学历的应聘者待定进入第二轮筛选。

第二轮筛选

应聘者的本科院校是否为985/211重点高校?是的话则通过,不是的话再进入第三轮筛选。

第三轮筛选

应聘者项目经验是否丰富?是的话通过,不是的话淘汰。

就这样,通过三轮筛选HR成功地从100位应聘者中筛选出了进入面试的人选。这个过程中HR用到的方法就是决策树,我们可以将这种方法表示成下面的图片以更直观地了解。

二、决策树的生成

在上一节的定义中我们可以发现决策树主要由“用来判别的特征(属性)”和“不同的分类集合”构成。因此决策树的构成通常是一个递归地选择特征,并根据该特征对训练数据进行分割,使得各个子数据集有一个最好的分类的过程。这一过程对应着对特征空间的划分,也对应着决策树的构建。由于不同的特征对训练数据的划分能力不同,有时将划分能力强的特征先应用可以大大缩减决策树的高度与计算复杂度,比如在上面的例子中如果HR将毕业院校作为第一轮筛选的特征,那么后面的筛选也许就不需要“学历”这一特征了(考虑到绝大多数本科以上学历的应聘者都毕业于985/211高校),这样原本三轮的筛选,只需要两轮就能完成,因此我们构造决策树进行特征选址时应该选择最优的特征。

更具体地我们可以把决策树的生成过程概括为以下四个步骤:

1) 开始:构建根节点,将所有训练数据都放在根节点,选择一个最优特征,按着这一特征将训练数据集分割成子集,使得各个子集有一个在当前条件下最好的分类。

2) 如果这些子集已经能够被基本正确分类,那么构建叶节点,并将这些子集分到所对应的叶节点去。

3)如果还有子集不能够被正确的分类,那么就对这些子集选择新的最优特征,继续对其进行分割,构建相应的节点,如果递归进行,直至所有训练数据子集被基本正确的分类,或者没有合适的特征为止。

4)每个子集都被分到叶节点上,即都有了明确的类,这样就生成了一颗决策树。

从上面的过程中不难看出,在决策树的生成中最核心的是选择最优特征,那么怎样的特征才算是最优特征呢?一般而言,我们希望经过每一次划分后,决策树的分支节点所包含的样本尽可能属于同一类别,即结点的“纯度”越来越高。所以最优特征是使划分后的结点纯度最高的特征。那么如何衡量“纯度”?这里便涉及到了“信息熵”的相关理论与知识。

“信息熵”是度量样本集合纯度最常用的一种指标。假设当前样本集合D中第k类样本所占比例为pk(i=1,2,…,|y|),则D的信息熵定义为

H(X)的值越小,则X的纯度越高。

知道了信息熵的概念后,我们解决了衡量集合“纯度”的问题,但是一个特征往往会划分出好几个集合,如果这些集合的“纯度”各不相同,我们又该如何判断这个特征是最优还是其他特征是最优呢?对于这个问题我们很容易想到的办法就是,对不同集合的纯度进行加权平均,样本多的集合权重大,样本少的集合权重小。没错!这种思想正是决策树中“信息增益”的源头。

假定离散属性a有V个可能的取值{a1,a2,…,av},若使用a来对样本集合D进行划分,则会产生V个分支节点,其中第v个分支点包含了D中所有在属性a上取值为av的样本,记为D(v)。我们可根据上面计算信息熵的式子计算出各个结点的信息熵,然后按照不同分支结点所包含的样本数,给结点赋予权重|D(v)|/|D|,即样本数越多的分支结点的影响越大,于是可以计算出用属性a对样本集D进行划分所获得的“信息增益”(information gain)

 

三、决策树的修剪

剪枝(pruning)是决策树学习算法对付”过拟合“的主要手段。在决策树学习中,为了尽可能正确分类训练样本,有时会产生特征选择太多、决策树分支过多的情况,这不仅降低了决策树的效率,还存在过拟合的风险,使得训练出的模型泛化性能不高。为了解决这个问题,我们可以主动去掉决策树的一些分支来降低过拟合的风险。

决策树剪枝的基本策略有”预剪枝“(prepruning)和”后剪枝“(post-pruning)。

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

后剪枝是先从训练集生成一颗完整的决策树,然后自底向上的对非叶节点进行考察,若将该节点对应的子树替换为叶节点能带来决策树泛化性能提升,则将该子树替换为叶节点。

剪枝处理降低了”过拟合“风险,但也带来了”欠拟合“的风险。

一般情形下,后剪枝决策树欠拟合风险较小,泛化性能往往优于预剪枝决策树。但后剪枝训练开销比未剪枝决策树和预剪枝决策树都要大很多。

四、一些经典的决策树生成算法

1、ID3

ID3算法的核心是在决策树各个结点上对应信息增益准则选择特征,递归地构建决策树。

具体方法是:

1) 从根结点(root node)开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征。

2)由该特征的不同取值建立子节点,再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止;

3)最后得到一个决策树。

ID3相当于用极大似然法进行概率模型的选择

2、C4.5

4.5是对ID3算法的一个改进,主要改进点就是解决了ID3的几个缺点。首先C4.5算法用的是信息增益率来代替ID3中的信息增益。这么做其实就是弱化那些偏向,让选择最优特征时更加公平。另外C4.5的改进就是可以处理连续值(这个方法其实和上面我提到的连续值离散化很类似,可以理解为单点逐一离散化),具体步骤如下:

1)首先对于连续值属性的值进行排序(A1,A2......An);

2)我们可以在每两个值之间取一个点,用这个点就可以把该组连续值分为两部分,比如我们去一个点a1($A1<a1<A2$),则小于a1的部分(A1)大于a1的部分(A2......An)。但是这个a1好吗?不知道呀!那我们loop一下所有这样的a(共有n-1个),每一个ai我们可以算出分裂前后的信息增益率,然后我们求一个max即可。很简单吧!思路很好,但是呀很显然有个问题,时间开销有点大。

3)缺失值的处理,ID3不能直接处理(需要我们人工处理,比如单独赋值或赋一个平均值),C4.5给出了一个很优雅的方式,为什么说优雅,这样讲吧!我们每一个特征的取值都有若干个,根据训练集每个可能的取值都有一个概率,我们用这个概率来表示这个确实值得可能取值。这样就显得很合理了。

C4.5各方面完胜ID3,所以C4.5一出现就被广泛应用,后面为了解决这个算法的时间开销问题,推出了这个算法的改进版C5.0,大体上C5.0的速度是C4.5的10倍以上。

参考链接:https://zhuanlan.zhihu.com/p/50188842

 

另详细解释

上图中,有圆角矩形、矩形、线段。

你看那个圆角矩形,它就已经是最后的结果了,不再往下了,这一类东西呢,在决策树里叫做叶节点。

那个矩形呢,总是要往下分,并不是最终的结果,它叫做中间节点(或内部节点)。

那些带有文字的线段(一般使用有箭头的有向线段),线的一端连的是中间节点、另一端连的是另一个中间节点或叶节点,然后线段上还有文字,它叫做边。

那些带有文字的线段(一般使用有箭头的有向线段),线的一端连的是中间节点、另一端连的是另一个中间节点或叶节点,然后线段上还有文字,它叫做边。

到这里,你可能已经看出来了。所有的内部节点都是自变量、叶节点是因变量的值,而边呢是自变量可能的取值。有了这棵树,那我们知道了明天天气情况、是否周末、是否有促销活动我们就可以预测明天的销量高低,可以提前备货。或者说,如果我们库存有积压,我们应该怎样提高销量尽快把货销出去。

自变量的取值可能不止两种,比如判断一个学生是不是好学生,他的成绩就是一个比较重要的自变量,而成绩的可能取值是[0,100]。那成绩节点就会有100条边出来么?也不一定,前面的文章我们说过,这个时候需要对成绩这个量进行离散化,可能会分成“不及格”D、“及格”C、“良好”B、“优秀”A等。

算法描述

从01中的描述知道,决策树从根节点到叶节点,越往下,最后那个因变量的取值越单一。也就是说,越往下的节点它因变量取某一个值的可能性越大,到达叶节点的时候这个可能性达到最大。

我们用最直接、最笨拙的步骤可以实现这个事:

选择一个自变量作为节点,从一个边引出一个取值(属性值)看这个值对应的变量的值若为空或者单一值,边的另一端生出一个叶结点;

否则,对生出一个内部结点,即测试结点;

在2的基础上选择新属性进行划分,直至得到条件1。

大家可以对照上面步骤的说法,把01中介绍的例子画成决策树的样子。

 

ID3算法:

容易理解的例子:假设我们记录了某个学校14届校运会按时举行或取消的记录,举行或者取消的概率分别为:9/14、5/14,那么它的信息熵为:

我们同时记录了当天的天气情况,发现天气好坏和校运会举行还是取消有关。14天中,5次晴天(2次举行、3次取消)、5次雨天(3次举行、2次取消)、4次阴天(4次举行)。相对应的晴天、阴天、雨天的后验熵

那知道天气情况后校运会的条件熵为:

那么相对应的在有没有天气情况这个条件前后的信息增益就是:

那相对应的ID3的算法很容易就可以想出来了:

在所有的自变量里面找一个信息增益最大的作为节点;

节点的每种取值看它的熵,如果熵为零,对应一个叶子节点

 

链接:https://baijiahao.baidu.com/s?id=1666322713629357389&wfr=spider&for=pc

 

 

 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值