决策树(decision tree)
决策树是一种常见的机器学习模型。形象地说,决策树对应着我们直观上做决策的过程:经由一系列判断,得到最终决策。由此,我们引出决策树模型。
一、决策树的基本流程
决策树的跟节点包含全部样例,叶节点则对应决策结果。其它每个节点则对应一个属性测试,每个节点包含的样本集合根据属性测试结果被划分到不同子节点中。决策树学习的目的是,产生一棵泛化能力强,i.e.处理未见示例能力强的决策树。
决策树的基本流程遵循分治策略。基本算法的伪码书中已经给出:
从中看出,决策树是一个递归过程,有三种情形会导致递归返回:
- 当前节点包含的样本全属于同一类别,无需划分;
- 当前属性集为空,或所有样本在所有属性上取值相同,无法划分。此情形下,将当前节点标记为叶节点,并将其类别设为包含样本最多的类别。
- 当前节点包含的样本集合为空,不能划分。此情形下,标记当前节点为叶节点,并将其类别设为父节点所含样例最多的类别。
情形2和3的处理之不同在于:2利用当前节点的后验分布,而3则是把父节点的样本分布作为当前节点的先验分布。
二、划分选择
从书中给出的伪码可以看出,决策树的关键在第8行,即如何选择最优的划分属性。一般而言,随着划分的不断进行,我们希望决策树的分支节点的“纯度”(purity)越来越高,即包含的样例尽可能多得属于同一类别。为度量纯度,我们首先需要引入信息熵和信息增益的概念。
2.1 信息增益
“信息熵”(information entropy)是度量信息纯度的一个常用指标,计算的是为了解这某条信息所付出的平均信息量。其定义如下:
假定当前样本集合D中第k类样本所占的比例为pk(k = 1,2,...,|Y|),则D的信息熵定义为
对于底数之所以取2,一般的理解是,因为信息按照计算机表示采用的是二进制形式。由定义可推知,Ent(D)的值越小,则D的纯度越高。
在此基础上,给出“信息增益”(information gain)的定义:
假定离散属性a有V种不同的取值{a1, a2, ..., aV},使用a对D进行划分,则会产生V个分支节点,其中第v个分支节点包含D中属性值为av的样本,记为Dv,则用属性a对样本集D进行划分所获得的信息增益定义为
一般而言,信息增益越大,则意味着使用属性a来进行划分所获得的纯度提升越大。于是,我们便可以按信息增益来选择决策树的划分属性。相关的算法有著名的ID3算法[Quinlan, 1986]。
然而事实上,信息增益对可取值数目较多的属性有所偏好。这种偏好可能会降低模型的泛化能力。为减少这种偏好带来的不利影响,著名的C4.5决策树算法[Quinlan, 1993]不直接使用信息增益,而使用“增益率”(gain ratio)来划分最优属性。下面引入增益率的概念。
2.2 增益率
采用与信息增益相同的表达式,增益率定义为
其中,
称为属性a的“固有值”(intrinsic value)[Quinlan, 1993]。属性a的可能取值数目越多(即V越大),则IV(a)的值通常会越大。
不过,增益率准则对于可取值数目少的属性又有所偏好,因此,C4.5算法并不是直接选择增益率最大的候选划分属性,而使用一个启发式算法:先从候选划分属性中找出信息增益高出平均水平的属性,再从中选择增益率最高的。
2.3 基尼系数
CART(Classification and Regression Tree)决策树[Breiman et al., 1984]则使用“基尼系数”(Gini index)来选择划分属性。数据集D的纯度可用基尼系数度量如下:
直观地讲,Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率。因此,Gini(D)越小,D的纯度越高。
在此基础上,给出属性a的基尼指数
于是,我们可以选择基尼指数最小的属性作为最优划分属性。
三、决策树的剪枝处理
决策树的分支过多时,可能导致“过拟合”。剪枝(pruning)是决策树学习算法中解决“过拟合”的主要手段。
决策树的剪枝的基本策略主要有:
- 预剪枝(prepruning):在决策树生成过程中,对每个节点在划分前先进行估计,若当前节点不能提升决策树的泛化性能,则停止划分并将当前节点标记为叶节点;
- 后剪枝(postpruning):先从训练集生成一棵决策树,然后自底向上考察非叶节点,若将该节点替换为叶节点能提升决策树的泛化性能,则将该节点替换为叶子节点。
为考察泛化能力,可以预留一部分“验证集”以进行模型评估。
值得注意的是,预剪枝虽然显著减少了训练时间和测试时间的开销,但却带来了欠拟合的风险。因为有些分支可能在当前划分无法提升泛化性能,却在后续划分中可以做到。而后剪枝决策树在一般情形下欠拟合风险更小,且泛化性能往往优于预剪枝决策树,不过代价是要付出大得多的训练时间开销。
顺便一提,经过剪枝后,仅有一层划分的决策树,也被称为“决策树桩”(decision stump)。
四、连续与缺失值
4.1 连续值处理
前面讨论的是基于离散属性生成的决策树。然而在现实任务中,时常会遇到连续属性,此时便不能直接根据连续属性的值来划分节点。需要对连续属性离散化。
最简单的策略是二分法(bi-partition)。给定样本集D和连续属性a,假定a在D上出现n个不同的取值,从小到大排序记为{a1, a2, ..., an}。于是,对于连续属性a,可以考虑n-1个元素的候选划分点集合Ta = {(ai+ai+1)/2 | 1 ≤ i ≤ n-1}。于是,在此基础上,可以对信息增益加以改造
4.2 缺失值处理
现实任务中,也会遇到大量样本出现缺失值的情况。如果简单放弃不完整样本,显然是对数据的极大浪费。为充分利用数据,需要解决两个问题:
- 如何在属性值缺失的情况下进行划分属性选择?
- 给定划分属性,若样本在该属性上缺失,如何对样本进行划分?
给定训练集D和属性a,令表示D中在属性a上没有缺失的样本子集。对于问题1,显然仅可以根据来判断属性a的优劣。假定属性a有V个可取的值{a1, a2, ..., aV},令表示中在属性a上取值为av的样本子集,表示中属于第k类(k=1,2,...,|Y|)的样本子集。则显然有
假定为每个样本x赋以权重ωx,并定义
显然,,。
基于上述定义,可以将信息增益公式推广为
对于问题2,若样本x在属性a上的取值已知,则划入对应子节点,并保持样本权值即可;若取值未知,则同时划入所有子节点,且样本权值在属性值av对应的子节点中调整为。
五、多变量决策树
将每个属性视为坐标空间的一个坐标轴,则由d个属性描述的样本,对应于d维空间中的一个数据点。对样本分类,意味着在此坐标空间中寻找不容类样本间的分类边界。而决策树所形成的分类边界 有一个明显的特点:轴平行(axis-parallel),即其分类边界由若干个与轴平行的分段组成。这一特点的好处在于有较好的可解释性,但为了近似比较复杂的分类边界,会导致决策树过于复杂。为解决此问题,引入多变量决策树。
多变量决策树(multivariate decision tree)就能实现用斜线划分、甚至更复杂的划分。在此类决策树中,非叶节点不再仅是某个属性,而是对属性的线性组合进行测试,i.e.每个非叶节点都是一个形如的线性分类器。下面两张图给出了决策树和多变量决策树分类结果的对比。
决策树(decision tree)的更多相关文章
- 机器学习算法实践:决策树 (Decision Tree)(转载)
前言 最近打算系统学习下机器学习的基础算法,避免眼高手低,决定把常用的机器学习基础算法都实现一遍以便加深印象.本文为这系列博客的第一篇,关于决策树(Decision Tree)的算法实现,文中我将对决 ...
- 数据挖掘 决策树 Decision tree
数据挖掘-决策树 Decision tree 目录 数据挖掘-决策树 Decision tree 1. 决策树概述 1.1 决策树介绍 1.1.1 决策树定义 1.1.2 本质 1.1.3 决策树的组 ...
- 决策树Decision Tree 及实现
Decision Tree 及实现 标签: 决策树熵信息增益分类有监督 2014-03-17 12:12 15010人阅读 评论(41) 收藏 举报 分类: Data Mining(25) Pyt ...
- 用于分类的决策树(Decision Tree)-ID3 C4.5
决策树(Decision Tree)是一种基本的分类与回归方法(ID3.C4.5和基于 Gini 的 CART 可用于分类,CART还可用于回归).决策树在分类过程中,表示的是基于特征对实例进行划分, ...
- (ZT)算法杂货铺——分类算法之决策树(Decision tree)
https://www.cnblogs.com/leoo2sk/archive/2010/09/19/decision-tree.html 3.1.摘要 在前面两篇文章中,分别介绍和讨论了朴素贝叶斯分 ...
- 决策树decision tree原理介绍_python sklearn建模_乳腺癌细胞分类器(推荐AAA)
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- 机器学习方法(四):决策树Decision Tree原理与实现技巧
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 前面三篇写了线性回归,lass ...
- 机器学习-决策树 Decision Tree
咱们正式进入了机器学习的模型的部分,虽然现在最火的的机器学习方面的库是Tensorflow, 但是这里还是先简单介绍一下另一个数据处理方面很火的库叫做sklearn.其实咱们在前面已经介绍了一点点sk ...
- 决策树 Decision Tree
决策树是一个类似于流程图的树结构:其中,每个内部结点表示在一个属性上的测试,每个分支代表一个属性输出,而每个树叶结点代表类或类分布.树的最顶层是根结点.  决策树的构建 想要构建一个决策树,那么咱们 ...
- 【机器学习算法-python实现】决策树-Decision tree(2) 决策树的实现
(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 接着上一节说,没看到请先看一下上一节关于数据集的划分数据集划分.如今我们得到了每一个特征值得 ...
随机推荐
- 【oracle】ORA-02289: sequence does not exist
select * from user_sequences where sequence_name = 'NLDP_LGIR_BASE_SEQUENCE'; 通过该指令查看SEQUENCE是否存在
- 西门子SCL读写DB数据
数据块间接寻址方式,仅供参考. STATUS_1:= DB11.DW[COUNTER]; //字节间接寻址STATUS_2:= DB12.DX[WNO, BITNO]; //位间接寻址,用户改变WNO ...
- spring boot 项目部署在阿里云上
装jdk, 然后 nohup java -jar xxxx.jar> system.log 2>&1 & lsof -i:9999 kill -9 1234
- android 版本更新适配8.0,解决8.0手机无法更新自动安装apk
随着android 7.0的普及android 8.0的也逐渐流行起来,那么google对权限方面又有了新的修改.而且我发现在android8.0中除了一些bug,比如说:在小米6(Android 8 ...
- 异常详细信息: System.BadImageFormatException: 未能加载文件或程序集“Maticsoft.Common”或它的某一个依赖项。试图加载格式不正确的程序。
异常详细信息: System.BadImageFormatException: 未能加载文件或程序集“Maticsoft.Common”或它的某一个依赖项.试图加载格式不正确的程序. 解决方法: 点击 ...
- 阿里云一 第一篇:云服务器ECS
阿里云(www.aliyun.com)创立于2009年,是全球领先的云计算及人工智能科技公司,为200多个国家和地区的企业.开发者和政府机构提供服务.截至2017年3月,阿里云付费云计算用户达87.4 ...
- 小妖精的完美游戏教室——东方PROJECT,同人,子机
//================================================================//// Copyright (C)// All Rights Re ...
- 18.python关于mysql的api
一.pymysql模块1.pymysql是Python中操作MySQL的模块2.执行sql语句(1)连接数据库: import pymysql #连接mysql数据库创建conn对象(host连接的机 ...
- 报文 HTTP HTTPS
报文是网络中交换与传输的数据单元,即站点一次性要发送的数据块.报文包含了将要发送的完整的数据信息,其长短很不一致,长度不限且可变. 报文也是网络传输的单位,传输过程中会不断的封装成分组.包.帧来传输, ...
- SDL中 so库的使用
用到的项目:Tocy-Android-SDLv2 JAVA层:只有一个 SDLActivity.java 路径\Android-SDLv2\src\org\libsdl\app 项目简单分析: 默认在 ...