分类模型与算法--决策树

本文主要介绍决策树的原理、划分属性选择、决策树的种类、剪枝方式,以及用三种R包实现决策树。

一、概述

决策树(Decision Tree)是一种常见的机器学习方法,它基于人类在面临决策问题时一种很自然的处理机制,即树结构来进行决策。如下图所示:
这里写图片描述
其中:一棵决策树包含一个根结点、若干内部节点和若干叶结点;根结点包含样本全集;每一个内部结点对应于一个属性测试;叶结点则对应于决策结果;从根节点到叶结点的路径对应了一个判定测试序列。
显然,决策树的生成是一个递归的过程。有三种情形会导致递归返回:
(1)当前结点包含的样本全属于同一类别,无需划分,此时把当前结点标记为叶结点,并将其类别设定为该结点;
(2)当前属性集为空,或所有样本在所有属性上取值相同,无法划分,此时把当前结点标记为叶结点,并将其类别设定为该结点所含样本最多的类别;
(3)当前结点包含的样本集合为空,不能划分,此时同样把当前结点标记为叶结点,并将其类别设定为其父结点所含样本最多的类别。

二、划分选择

从决策树原理可以看出,如何选择最优划分属性是决策树学习的关键。那么如何衡量属性划分的优劣呢?一般来讲,随着划分过程的不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度”越来越高。由此,产生了三种比较流行的衡量划分属性的方法,分别是:信息增益、信息增益率和基尼指数,分别对应于三种决策树:ID3(Iterative Dichotomiser,迭代二分器)、C4.5CART(Classification and Regression Tree)。

1.信息增益

在了解信息增益之前,首先要理解信息熵(information entropy)。熵的概念最早起源于物理学,用于度量一个热力学系统的无序程度,无序程度越高,不确定性越大,熵也就越大。将熵引申到信息论中,信息熵表达对不确定性的度量,是度量样本集合纯度最常用的一种指标
假定当前样本集合D中第k类样本所占的比例为pk(k=1,2,…,|y|),则D的信息熵定义为:这里写图片描述
Ent(D)的值越小,则D的纯度越高。
假定离散属性a有V个可能的取值{a1,a2,…,aV},若使用a来对样本集D进行划分,则会产生V个分支节点,其中第v个节点包含了D中所有在属性a上取值为av的样本,记为Dv,我们可以计算出Dv的信息熵,在考虑到不同的分支节点包含的样本数的不同,给分支节点赋予权重|Dv|/|D|,即样本数越多的分支结点的影响越大,于是用属性a对样本集D进行划分所获得的“信息增益”为:这里写图片描述
一般而言,信息增益越大,则意味着使用属性a来进行划分所获得的“纯度”提升越大。ID3决策树学习算法就是以信息增益来进行决策树的划分属性选择的

2.信息增益率

实际上,信息增益准则对可取值数目较多的属性有所偏好,因为属性值越多,在划分样本时产生分支结点越多,每个分支结点包含的样本量越少,其纯度往往会更高。但是,这样的决策树泛化能力比较弱,无法对新样本进行有效预测。
为了减少信息增益准则的这种偏好带来的不利影响,著名的C4.5决策树算法不直接使用信息增益,而是使用信息增益率来选择最优划分属性
增益率的定义为:这里写图片描述
其中:这里写图片描述
当然,与信息增益准则相反,增益率准则对取值数目较少的属性有所偏好,因此,C4.5算法并不是直接选择增益率最大的候选划分属性,而是:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。

3.基尼指数

上述两种决策树都是建立在以信息熵作为度量样本纯度的指标基础之上的,与之不同的是CART决策树使用基尼指数(Gini index)来选择划分属性
数据集D的纯度可用基尼值来度量:这里写图片描述
Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率。因此Gini(D)越小,则数据集D的纯度越高。
属性a的基尼指数定义为:这里写图片描述
于是,我们在候选属性选择时,选择那个使得划分后基尼指数最小的属性最为最优划分属性

三、剪枝处理

在决策树建立的过程中,若不加任何限制,最后生成的树必然能完全拟合原始数据,这样的树在实际应用中毫无意义,因为树的枝节太多,而不能反映数据内在大规律,这便是过拟合。
决策树很容易出现过拟合的现象。决策树的过拟合现象可以通过剪枝进行一定的修复。剪枝分为预先剪枝和后剪枝两种。
预先剪枝指在决策树生长过程中,使用一定条件加以限制,使得产生完全拟合的决策树之前就停止生长。预先剪枝的判断方法也有很多,比如信息增益小于一定阀值的时候通过剪枝使决策树停止生长。但如何确定一个合适的阀值也需要一定的依据,阀值太高导致模型拟合不足,阀值太低又导致模型过拟合。
后剪枝是在决策树生长完成之后,按照自底向上的方式修剪决策树。后剪枝有两种方式,一种用新的叶子节点替换子树,该节点的预测类由子树数据集中的多数类决定。另一种用子树中最常使用的分支代替子树。
预先剪枝可能过早的终止决策树的生长,后剪枝一般能够产生更好的效果。但后剪枝在子树被剪掉后,决策树生长的一部分计算就被浪费了。

四、实例

1.R语言函数介绍

在R语言中,主要有三个函数可以实现决策树算法,分别是rpart包中的rpart函数(实现CART决策树,剪枝prune())、party包中的ctree函数(实现CART决策树)和RWeka包中的J48函数(实现C4.5决策树),具体如下:
(1)rpart包
rpart(formula,data,weights,subset,na.action=na.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值