鹅厂优文 | 决策树及ID3算法学习

欢迎你们前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~。算法

做者:袁明凯|腾讯IEG测试开发工程师

决策树的基础概念

决策树是一种用树形结构来辅助行为研究、决策分析以及机器学习的方式,是机器学习中的一种基本的分类方法。决策树(Decision Tree)是在已知各类状况发生几率的基础上,经过构成决策树来求取净现值的指望值大于等于零的几率,评价项目风险,判断其可行性的决策分析方法,是直观运用几率分析的一种图解法。因为这种决策分支画成图形很像一棵树的枝干,故称决策树。决策树用于对条件→到决策的过程进行建模。查看一个示例图:网络

imgimg

示例给出了经过天气状况,晴天、雨天、多云、是否有风、以及湿度状况来决策断定是否适合游玩。由图可见,决策树是一种树形结构,其中每一个内部节点表示一个属性上的测试,每一个分支表明一个测试输出,每一个叶节点表明一种类别。当根据信息构建好决策树后,就能够依据决策树作出对给出的状况的决策结果断定了。决策树算法是一种监管学习,所谓监管学习就是给定一堆样本,每一个样本都有一组属性和一个类别,这些类别是事先肯定的,经过学习获得一个分类器,分类器可以对新出现的对象给出正确的分类。这样的机器学习就被称之为监督学习。dom

机器学习中,决策树是一个预测模型;它表明的是对象属性与对象值之间的一种映射关系。树中每一个节点表示某个对象,而每一个分叉路径则表明的某个可能的属性值,而每一个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。因而可知,决策树最关键的点,就是选好决策的每一个分支节点的决策条件的优先级,更好的保证更关键的决策条件在树的更上层,那么选择方法中,若是一个分割点(特征)能够将当前的全部节点分为两类,使得每一类都很“纯”即每一类的准确度都很高,也就是它们大多属于同一个目标结果,那么就是一个好分割点。这个分割的“纯度”的量化要有两种算法:基尼不纯度(Gini Impurity)和信息量(Entropy)。机器学习

GINI不纯度

基尼不纯度(Gini Impurity)是指,未来自集合中的某种结果随机应用在集合中,某一数据项的预期偏差率,是决策树对于混杂程度预测的一种度量方式。函数

img

信息量

信息量(Entropy)能够指描述一件事情的难易程度,好比太阳从哪边升起,我只须要说东边;而世界杯哪支球队夺冠,我须要说多是巴西、多是德国、多是西班牙、多是……;下面三幅图,C是最容易描述的,信息量最小,而A是最很差描述的,信息量最大。换句话说,一件事情越“纯”,信息量越小。性能

img

信息量如何量化呢?其实就是描述这件事情须要使用多少bit位存储。抛出硬币的结果是正面仍是反面,须要0或1存储,信息量为1bit。世界杯32支球队谁会夺冠,最多须要5bit存储。能够明显看出信息量是事件的全部可能性学习

img

以2为底的对数测试

img

。因此一条信息的不肯定性越大,须要越多的空间存储,它的信息量就越大。发生几率为0或1的事件都是很是肯定的事情,它们的信息量就为0。然而并非全部事件结果的出现几率都像抛硬币那样是相同的。好比实际上世界杯32支球队的夺冠几率都是不一样的,这种状况下该怎么算信息量呢?对以前的公式进行推导:大数据

img

,设P为事件N中每一个结果的几率,当每一个结果出现几率相同时,公式如此。spa

而若是几率不一样,记

img

为每一个结果x1的几率,那么公式就变成了:香农熵公式:

img

,香农熵(Shannon Entropy)就是这样来量化计算信息大小,构建决策树就是要选择一个特征,将数据分割后信息量变得越小,越容易描述,越“纯”,就越好,所以也是此公式计算后值越小越好。仍是以天气的案例,来作香农熵的计算,若是是原有信息量,不增长条件的话,

img

,若是增长了以天气状况分割的话,为:

晴天,有无去玩数据信息量:

img

雨天,有无去玩数据信息量:

img

多云,有无去玩数据信息量:

img

信息量再进行指望相加,获得分割后的信息量之和:

img

,经过对比发现天气分割后的信息量最小,且比原信息量小,因此这种分割是最好的。一样,沿着各自节点向下计算剩余特征的信息量,直到信息量为0或再也不下降。

过分拟合

img

l 蓝线为Gini分布,红线为Entropy分布,通过实际验证在决策树算法中都能比较准确地进行分支;Entropy因为有Log运算,效率略微比Gini慢;

l 二者都只能以某个特征进行总体评估(好比户口),而不能具体到特征下某个特定类别上,好比多云的天气都适合出去玩,具有很高区分度,但不能被这两种算法挑出来,只能经过修改达到该目的并评估效果的差别。

l 就像前一条提到的,若是样本中多云天气100%适合出去玩,万一后面有一天多云天气风太大而不适合出去玩的话,就会出现决策失效。所以构造决策树很容易陷入过分拟合(Overfitting)的问题,若是不设置必定的限制条件,必定可让训练数据集达到100%准确率,好比为每条数据都生成一个叶子节点。

案例,好比使用大小区分橘子和柚子,橘子大多比柚子小,因此理论上能够训练出体积在某个较小范围内的大可能是橘子,而另外一个范围是柚子,这样的决策树叶子节点。但若是不进行限制的话,决策树极可能会变成21cm3的是橘子、32cm3宽的是橘子、85cm3宽的是柚子,它针对训练集是100%准确的,但对训练集之外的数据就不能很好的进行决策了。

img

避免过分拟合通常有两种方式:约束决策树和剪枝。

约束决策树

约束决策树方法有不少种,须要根据状况或需求来选择或组合:

1. 设置每一个叶子节点的最小样本数,这能避免某个特征类别只适用于极小量的样本;

2. 设置每一个节点的最小样本数,与上相似,但它是从根节点就开始避免过分拟合;

3. 设置树的最大深度,避免无限往下划分;

4. 设置叶子节点的最大数量,避免出现无限多的划分类别;

5. 设置评估分割数据时的最大特征数量,避免每次都考虑全部特征为求“最佳”,而采起随机选取的方式避免过分拟合;

上面这些数据到底设置为多少合适呢,就须要使用实际的测试集来验证不一样约束条件下的决策准确性来评估了。

剪枝

剪枝是先构造好决策树以后再进行调整,整体思路是:对每一个节点或其子树进行裁剪,经过一些算法评估裁剪先后决策树模型对数据的预测能力是否有下降,若是没有下降则说明能够剪枝。

几个经常使用的剪枝评估方法:

l 错误率下降剪枝(Reduced Error Pruning,REP)

a) 使用某种顺序遍历节点

b) 删除以此节点为根节点的子树

c) 使此节点为叶子节点

d) 将训练集中该节点特征出现几率最大的那一类赋予此节点(即这个节点就表明这一类)

e) 计算总体误判率或准确率,若是比剪枝前更好,那么就剪掉

l 悲观剪枝(Pessimistic Error Pruning,PEP)

a) 评估单个节点(并不是子树)是否裁剪

b) 使用该节点下全部叶子节点的偏差之和评估

c) 当裁剪先后的偏差率不超过某个标准值,则裁剪

l 代价复杂度剪枝(Cost Complexity Pruning,CCP)

a) 在CART算法中具体介绍

决策树算法的优劣

优点:简单易懂;可处理数值和类别两种类型的数据;只须要少许的训练集便可使用;使用白盒模型,可清晰观察每一个步骤;对大数据量的处理性能较好;相比其余算法更贴近人类思惟方式。

劣势:准确性不如其余算法,对连续性字段难预测,特别是时间顺序的数据,须要较多预处理工做;树的稳定性不足,训练集的小变化就可能引发整棵树的剧变,致使最终预测的变化;容易过拟合;决策树处理包含不一样数值类别的特征数据时,容易倾向于选择取值更多的特征做为分割节点,对字段特例化严重的数据,例如游戏用户分析中的用户名,就更容易出现过拟合,而且类别越多,错误就会增长的更快。

ID3- Iterative Dichotomiser 3

ID3也就是第三代迭代式二分法,是一种基本的构建决策树的算法。ID3算法是一种贪心算法,用来构造决策树,每一步选择当前的最优决策,并非总体可见的最优决策。ID3算法起源于概念学习系统(CLS),以信息熵的降低速度为选取测试属性的标准,即在每一个节点选取还还没有被用来划分的具备最高信息增益的属性做为划分标准,而后继续这个过程,直到生成的决策树能完美分类训练样例。该算法是以信息论为基础,以信息熵和信息增益度为衡量标准,从而实现对数据的概括分类。

信息熵

上文已介绍过信息量的概念,这里从另一个角度来讲明。熵是一个来源于物理学的概念,用于度量一个热力学系统的无序程度,一个系统越混乱,系统的熵值越大。在信息论中,熵用于度量事件的不肯定性,不肯定性越高则信息熵越大。若是事件发生前,事件的结果就已经肯定,如必定发生,或者必定不发生,信息熵趋近于零。Shannon给出了度量信息熵的数学公式。对于随机变量X,其值域为{x1,x2,…,xn},pi为xi发生的几率密度函数,则随机变量X的熵为:

img

,从信息熵的定义看,随机变量X的值域范围越广,几率分布越均匀,则随机变量对应的信息熵值越大。事件发生前,越难猜中结果,事件包含的信息熵越大。依然以天气数据为例:

img

对于Play这一列数据,14天中有9天适合游玩,5天不适合,假设9/14就是适合游玩的几率,则天气是否适合游玩的信息熵计算方法以下:

img

信息增益

数据一般包含多个特征值,例如天气数据包含湿度、风力、降雨等。若是将天气先按照某种属性进行分类,而后再计算其余列数据的信息熵,分类前的信息熵与分类后的信息熵的差值则为数据按某列属性进行分类后获得的信息增益。假设能够按某个属性划分红n类,每一类为Ti, |Ti|表示数量,划分后的信息熵计算方法以下:

img

,H(x)和H(p)表达相同的含义。信息增益的计算方法以下:

img

,仍是以天气数据为例,计算是否适合游玩这一列数据按照温度划分后的的信息增益。温度分为hot、mild、cool三种,将天气是否时候游玩的数据按温度分红三部分:

img

划分后的信息量为:

img

则是否合适游玩的数据按照温度划分后的信息增益为:0.940-0.911=0.029bits。

ID3算法核心

ID3算法正是一种使用信息增益概念的贪心算法。算法步骤以下:

1) 在全部数据上依次计算每个属性数据决策后带来的信息增益,选择信息增益最大的一个属性做为决策树的根节点,其实反向来讲也就是选择信息熵最小的属性来作根节点。

2) 将数据第一步选择的属性进行分类,在每个分类后的子集数据上建立依次计算剩余属性的信息增益,选择信息增益最大的属性做为根节点的叶子节点。

3) 重复执行第2)步,直到全部的子集只包含一个元素或者全部的属性都已经成为决策树的某个节点。

须要指出的是,ID3算法是一种贪心算法,每一步都选择当前子集上最大信息增益对应的属性做为节点。使用ID3该天气示例的最后创建的决策树结果以下:

img

ID3对所使用的样本数据是有必定要求的,第一没法处理连续性数据,须要离散型数据,除非连续数据被分解为模糊范畴的类别数据;第二须要足够的样本量,由于须要足够的数据来区分每种数据特征类别存在过分耦合,从而更好的消除特殊的状况数据影响;第三,使用信息增益做为节点的分裂标准,实际上并不合理,会倾向于选择取值较多的属性。

ID3的算法劣势

一、从信息增益的计算方法来看,信息增益没法直接处理连续取值的的属性数据,只能处理离散型的数据。

二、信息增益的计算方法须要对某列属性进行分类,若是属性是ID,按照ID分类后,全部的分类都只包含一个元素,即ID就是信息增益最大的属性,致使ID3算法失效。

三、若是预测数据中出现了训练样本中没有出现过的状况,ID3也是没有办法处理的。针对ID3算法的缺陷,后续发明了C4.5,CART,random forest等算法。

问答

“猜你喜欢”是根据什么来推荐相关资讯的?

相关阅读

Python机器学习--决策树算法

GBDT迭代决策树入门教程

CTR——人工神经网络+决策树


此文已由做者受权腾讯云+社区发布,转载请注明文章出处

原文连接:https://cloud.tencent.com/dev...

相关文章
相关标签/搜索