前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >决策树详解

决策树详解

作者头像
张俊红
发布2018-04-11 15:05:46
1.3K0
发布2018-04-11 15:05:46
举报
文章被收录于专栏:张俊红张俊红

总第79篇

01|背景:

我们在日常生活中经常会遇到一些选择需要去做一些选择,比如我们在找工作的时候每个人都希望能找到一个好的工作,但是公司那么多,工作种类那么多,什么样的工作才能算是好工作,这个时候就需要我们对众多的工作去做一个判断。

最常用的一种方法就是制定几个可以衡量工作好坏的指标,比如公司所处的行业是什么、应聘的岗位是什么、投资人是谁、薪酬待遇怎么样等等。评判一个工作好坏的指标有很多个,但是每一个指标对工作好坏这一结果的决策能力是不一样的,为了更好的对每一个指标的决策能力做出判断,我们引入一个可以量化信息决策能力的概念,这个概念就是信息熵。

信息熵是用来度量(量化)信息的,一条信息的信息量与其不确定性有着直接的联系,当我们需要了解清楚一件不确定的事情的时候,我们就需要了解大量的信息。

02|概念:

决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。(来源于百度百科)

03|模型:

决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据集进行分割,使得对各个子数据集有一个最好的分类过程,这一过程对应着对特征空间的划分,也对应着决策树的构建。

开始构建根节点,将所有的训练数据集都放在根节点,选择一个最有特征,按照这一特征将训练数据集分割成子集,使得各个子集有一个在当前条件下获得最好的分类。如果这些子集已经能够被基本正确分类,那么构建叶节点,并将这些子集分到对应的叶节点中去;如果还有子集不能够被基本正确分类,那么就对这些子集新的选择最优特征,继续对其进行分割,构建相应的结点。如此递归下去,直到所有的训练数据子集被基本正确分类,或者没有合适的特征为止。最后每个子集都被分到叶节点上,即都有了明确的分类,这就生成了一颗决策树。

根节点是决策树最开始的结点,内部结点是可以继续分类的结点。

利用上面递归的方法可能对训练数据有很好的预测能力,但是对未知数据集未必有很好的分类能力,可能发生过拟合的现象,这就需要对决策树进行剪枝,让树变得简单一些,从而拥有更好的泛化能力。

04|学习步骤:

1、特征选择

特征选择就是选择对训练数据具有分类能力的特征,也就是我们在背景里面提到的对工作好坏评判起作用的指标,这样就可以提高决策树学习的效率。如果一个特征的分类能力与随机分类的结果没什么差异,则称这个特征是没有分类能力的。一般我们把这类特征是直接去掉的,我们优先那些能够对我们的分类起到决定作用的特征,我们在具体选取的时候会用到两个准则:信息增益或信息增益比

1.1信息增益

  • 熵:

在信息论和概率统计中,熵表示随机变量不确定性的度量。设X是一个取有限个值的离散随机变量,其概率分布为:P(X=xi)=pi,i=1,2,...,n。

则随机变量X的熵定义为H(X)=-∑pi log pi。

因熵只依赖于X的分布,而与X无关,所以可将X的熵记作H(p),即H(p)=-∑pi log pi。

熵越大,随机变量的不确定性就越大。

当pi=1或pi=1时,H(p)等于0,此时,随机变量是完全没有不确定性的。当pi=0.5时,H(p)等于1,此时,熵取值最大,随机变量不确定性最大。

  • 条件熵

设有随机变量(X,Y)其联合概率分布为:P(X=xi,Y=yi)=Pij,条件熵H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性。随机变量X给定条件下随机变量Y的条件熵H(Y|X),定义为X给定条件下Y的条件概率分布的熵对X的数学期望:H(Y|X)=∑pi H(Y|X=xi)。

  • 信息增益

信息增益表示在得知特征X的信息而使得类Y的不确定性减少的程度

特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A在给定条件下D的经验条件熵H(D|A)之差,即g(D,A)=H(D)-H)(D|A)。

一般地,熵H(Y)与条件熵H(Y|X)之差称为互信息,决策树学习中的信息增益等价于训练数据集中的类与特征的互信息。

根据信息信息增益选择特征的方法是:对训练数据集(或子集)D,计算其每个特征的信息增益,并比较他们的大小,选择信息增益最大的特征。

  • 信息增益算法步骤
  1. 计算训练数据集的经验熵H(D)
  2. 计算特征A对数据集D的经验条件熵H(D|A),这里的条件熵H(D|A)=∑pi H(D|A=Ai)=∑pi H(Di)=∑pi ∑p(Dik)log(p(Dik)),(Di中的i表示根据特征A将样本D分成i个类别,k表示样本D本身按照结果分成k个类别,比如前面的对一个工作好坏进行评定,根据工作内容好坏对样本进行分类,得到的类别数就是k;在拿特征A-工资待遇对样本进行分类得到样本类别数i),p(Dik)表示Di类别中类别k出现的概率,求取方法与朴素贝叶斯中对概率的求取方法一致,用似然估计,即用事件出现的频数的比值来代替概率。
  3. 计算信息增益g(D,A)
  • 信息增益比

以信息增益作为划分训练数据集的特征,存在偏向于选取取值较多的特征的问题使用信息增益比可以对这一问题进行校正。

特征A对训练数据集D的信息增益比gR(D,A)定义为信息增益g(D,A)与训练数据集D关于特征A的值的熵HA(D)之比,即gR(D,A)=g(D,A)/HA(D)。其中

HA(D)=∑p(Di)log(p(Di))。

2、决策树的生成

常用的决策树生成的方法有ID3,C4.5算法。本篇也着重介绍这两种算法。

2.1ID3算法

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

具体方法就是从根节点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子节点;再对子节点递归地调用以上方法,构建决策树;直至所有特征的信息增益均很小或没有特征可以选择为止,最后得到一个决策树。

  • 算法步骤

输入:训练数据集D,特征集A,阈值z。

输出:决策树T。

  1. 若D中所有的实例都属于同一类Ck(k表示样本D本身按照结果分成k个类别),则T为单节点树,并将类Ck作为该节点的类标记,返回T。
  2. 若特征A集合为空,则T为单节点树,并将D中实例数最大的类Ck作为该节点的类标记,返回T。
  3. 如果不符合上面两种情况,则按照信息增益算法公式计算A中每个特征对D的信息增益,选择信息增益最大的特征Ag。
  4. 如果Ag的信息增益小于阈值z,则置T为单节点树,并将D中的实例数最大的类Ck作为该节点的类标记,返回T。
  5. 如果Ag的信息增益大于阈值z,则对Ag的每一个取值ai,依据Ag=ai将D分割为若干非空子集Di,将Di中实例数最大的类作为标记,构建子节点,由结点及其子节点构成树T,返回T。
  6. 对第i个子节点,以Di为训练集,以A-Ag为特征集,递归地调用上面5个步骤,得到子树Ti,返回Ti。

2.2C4.5的生成算法

C4.5和ID3算法相似,C4.5是在ID3的基础上进行了改进,从ID3用信息增益来选取特征改成了用信息增益比来选取特征,其他步骤均与ID3算法一致,不展开阐述。

3、决策树的修剪

决策树生成算法是通过递归的方法产生决策树,直到不能继续下去为止,这样产生的树往往对训练数据的分类很准确,但对未知数据的分类却没那么准确,即出现过拟合的现象。过拟合的原因在于学习时过度考虑如何提高训练数据的正确分类,从而构建出过于复杂的决策树。解决这个问题的方法是考虑决策树的复杂度,对已生成的决策树进行简化,我们把这种对已生成的树进行简化的过程称为剪枝。

剪枝是从已生成的树上裁掉一些子树或叶节点,并将其根结点或父节点作为新的叶节点,从而简化分类树模型。

决策树的剪枝往往通过极小化决策树整体的损失函数或代价函数来实现。设树T的叶节点个数为|T|,t是树T的叶节点,该叶结点由Nt个样本点,其中k类的样本点由Ntk个,k=1,2,...,K,Ht(T)为叶节点t上的经验熵,α≥0为参数,则决策树学习的损失函数可以定义为:

再来看一下常规意义上的损失函数:

公式的前半部分表示训练误差,对于这一部分,我们希望他的值越小越好,后半部分是正则化项,是为了防止过拟合而加的一个惩罚项。

所以我们可以把决策树的损失函数写成:

上式中,C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,|T|表示模型复杂度,参数参数α≥0控制两者之间的影响。较大的α促使选择较简单的模型(树),较小的α促使选择较复杂的模型(树)。α=0意味着只考虑模型与训练数据的拟合程度,不考虑模型的复杂度。

剪枝,就是当α确定时,选择损失函数最小的模型,即损失函数最小的子树。

  • 算法步骤:

输入:生成算法产生的整个树T,参数α

输出:修剪后的子树Tα

  1. 计算每个结点的经验熵
  2. 递归地从树的叶节点向上回缩,设一组叶节点回缩到其父节点之前与之后的整体树分别为TB与TA,其对应的损失函数值分别为Cα(TB)与Cα(TA),如果:

,则进行剪枝,即将父节点变为新的叶节点。

  1. 返回步骤2,直到不能继续为止,得到损失函数最小的子树Tα。

05|python实例:

本实例来源于《机器学习实战》中决策树章节。

关于决策树剪枝、CART以及模型的利用在后续的章节中继续介绍。

你还可以看:

最懒惰的算法—KNN

朴素贝叶斯详解

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-09-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 俊红的数据分析之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档