机器学习笔记(四)决策树原理和实践

一、背景

在上一篇文章中,我们讲解了线性回归和逻辑回归的相关数学推导和Python实现,本篇文章我们将继续下一个机器学习中一个非常重要的模型——决策树的学习。决策树之所以叫决策树,是和它的原理紧密相关的,看下面这个场景,是不是很熟悉。首先看天气情况,然后根据天气情况做下一步决定,如果天气好,再看游泳馆是否开放,如果天气不好,再视父母是否在家来做决定,最终会有三种选择,或者可以认为是一个三分类问题。这就是一个典型的决策树场景,树的深度是3,从根节点(天气)开始,根据每一步的条件,决策下一步的计划(非叶子节点/内部节点),最终每条路都会走到一个叶子节点(游泳、看电视、去外婆家)。例如,今天天气好,父母在家,我们就知道今天是要去外婆家。

图1

上面我们已经引入了一个决策树的背景案例,不过这个决策树是已知的,我们只是根据这个决策树来决定(推理/预测)最终的行为,但是这个决策树是怎么来的呢?这和我们的机器学习又有什么关系呢?我们看下面一组数据,某化妆品店统计了十位顾客的属性信息以及是否会购买化妆品的数据,详细如下:

列名 性别 年龄 是否购买
1 青年
2 中年
3 中年
4 青年
5 青年
6 青年
7 中年
8 青年
9 青年
10 中年

从上面这个表格中可以看出什么规律呢?统计可以发现,从性别看,所有的女性都购买了产品,所有的男性都没有购买,从年龄看,青年里面3人购买,3人未购买,中年里面3人购买,1人未购买,如果用决策树的形式表达出来,可以有下面两种:

图2

如果需要构建一个决策树模型,肯定会选择上图的(a),而不是(b),为什么呢?因为根据性别就可以直接得出结果了,没必要先判断年龄,再判断性别。换句话说,(a)树的深度更浅。这就是一个非常简单的构建决策树模型的过程,当然实际中的数据远比上面更复杂,比如会存在连续值数据,而接下来我们要详细介绍的决策树算法就是为了要解决在复杂数据场景下,如何构建一个更加合理的决策树模型的过程。一旦构造好了决策树,那么分类或者预测任务就很简单了,只需要走一遍决策树流程到叶子节点就ok了。

二、决策树模型

2.1 决策算法

建立决策树模型,非常重要的一步就是怎么构建决策树,换句话说就是哪个特征做父节点?哪个特征做子节点?关于特征决策的方法也有多种,主要有:ID3、C4.5、CART等。

2.1.1 信息熵

在第一章中我们提到了采用性别作为第一个判决条件比年龄更好,因为采用性别一次就可以划分所有结果,那么有没有一个量化值来衡量这个好坏呢?这里就引出了一个概念——信息熵。在介绍信息熵之前,先看一个例子。假如有人告诉你明天太阳从东边升起,你的感觉是什么?这TM不是废话吗?因为明天太阳从东边升起的概率可以认为是1,或者可认为是一个必然事件,所以这句话没什么意义。如果有人告诉你下期双色球的中奖号码,这还是废话吗?当然不是,因为这句话很有用,换句话这句话的价值很大,因为猜中双色球的概率是百万分之一,告诉你一个百万分之一的概率事件,当然这句话的信息量就很大。在信息论中,随机离散事件出现的概率存在着不确定性。为了衡量这种信息的不确定性,信息学之父香农引入了信息熵的概念,并给出了计算信息熵的数学公式:

其中,n为可能的所有类别数(例如抛硬币正反两种),p(xi)表示类别xi发生的概率。一个事件的不确定性越大,则信息熵越大,反之亦然。我们在决定哪个特征做根节点的时候,就可以通过信息熵来评判了,信息熵越小越好。计算上面案例的信息熵:

  • 性别的信息熵:\frac{6}{10}[-(1*log1+0*log0)] + \frac{4}{10}[-(0*log0 + 1*log1)] = 0     注:不考虑log0的不合理性
  • 年龄的信息熵:\frac{6}{10}[-(\frac{1}{2}*log\frac{1}{2}+\frac{1}{2}*log\frac{1}{2})] + \frac{4}{10}[-(\frac{3}{4}*log\frac{3}{4}+\frac{1}{4}*log\frac{1}{4})]

显然性别的信息熵更小,所以应该把性别作为根节点。

2.1.2 ID3

ID3的核心思想就是2.1节讲述的信息熵。看下面这个案例,现有14天不同情况下是否去打篮球的数据信息,现基于这些数据构造一个决策树:

图3

4个特征,首先选择谁来做根节点呢?根据上图我们首先计算不同特征的信息熵:

  • 原始数据信息熵:-(\frac{9}{14}*\log \frac{9}{14} + \frac{5}{14}*\log \frac{5}{14}) = 0.940
  • outlook的信息熵:\frac{5}{14}*(-\frac{2}{5}*log\frac{2}{5} - \frac{3}{5}*log\frac{3}{5}) + \frac{4}{14}*0 + \frac{5}{14}*(-\frac{3}{5}*log\frac{3}{5} - \frac{2}{5}*log\frac{2}{5}) = 0.693,信息增益为:0.940 - 0.693 = 0.247

其他三个特征的信息增益计算方法和outlook一样,计算可以发现outlook的信息增益最大,因此选择outlook作为根节点,然后在outlook的每个分支中再分别计算其他三个特征的信息熵,选择信息增益最大的最为二级节点,依次进行即可。

2.1.3 C4.5

上面的ID3决策算法似乎很好的解决了特征决策问题,但是我们来看另外一个问题,在图3(a)中还有一列id项,假如id项也是一列特征,计算id列的信息熵会怎样呢?因为id是不重复的,每个id只对应一条数据,也就是play只有一个结果,显然信息熵为0,那是不是意味着我们应该选择id项作为根节点呢?显然也是不合理的,这里的id虽然是一个特例,但是实际中也不乏这种类别很多的特征。因此,针对这个问题,又提出了C4.5信息增益率决策算法。计算方法如下:

其中,Gain_ratio(D,a)表示特征a在集合D上的信息增益率,Gain(D,a)表示特征a在集合D上的信息增益,IV(a)表示特征a自身的信息熵。换句话说,信息增益率就是用信息增益再比上特征自身的信息熵。对于图3案例的id列:

IV(id) = -14*(\frac{1}{14} * log\frac{1}{14}), Gain_ratio(D,id) = \frac{0.940}{IV(id)} ,

因为IV(id)大,就导致信息增益率变小。从上面的计算公式可以发现信息增益率会偏向取值类别较少的特征,因此C4.5决策树先从候选划分属性中找出信息增益高于平均水平的属性,在从中选择信息增益率最高的。

2.1.4 CART

CART是另外一种决策算法,又名分类回归树,是在ID3的基础上进行优化的决策树,那么CART是如何评价节点的纯度呢?核心思想是利用GINI系数来作为衡量标准。如果是分类树,CART采用GINI值衡量节点纯度;如果是回归树,采用样本方差衡量节点纯度。本节我们主要讨论分类问题,回归问题后文再继续讨论。节点越不纯,节点分类或者预测的效果就越差。需要注意的是CART是一棵二叉树,即使某个特征存在两个以上的类别。

其中k是数据集的分类类别数,pk是按照特征划分以后的子数据集中每个类别的概率。CART在选择根节点特征的时候,会将一个特征的其中一个类别独立作为一个节点,其他的离散值生成另外一个节点即可。这种分裂方案有多少个离散值就有多少种划分的方法,举一个简单的例子:如果某离散属性一个有三个离散值X,Y,Z,则该属性的分裂方法有{X}、{Y,Z},{Y}、{X,Z},{Z}、{X,Y}三种情况,然后分别计算每种划分方法的基尼值或者样本方差确定最优的方法。CART构建决策树的过程如下:

  1. 对于数据集D中的任意一个特征A,对其所有类别中的任意一个类别a,根据此值将训练样本切分为D1和D2两部分,然后根据上式计算A=a基尼指数。
  2. 在所有可能的特征以及所有可能的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值