决策树算法(有监督学习算法)

转载自http://m.blog.csdn.net/Chenyukuai6625/article/details/73658239

一、决策树基础

       决策树是一种监督学习算法,利用现有数据和标签构建决策树,然后在测试集上验证效果。根据样本不同的属性层层划分,最终把样本划分到不同的类中。

   s决策树(Decision Tree)算法是根据数据的属性采用树状结构建立决策模型,这个模型可以高效的对未知的数据进行分类。决策树模型常常用来解决分类和回归问题。如今决策树是一种简单但是广泛使用的分类器。常见的算法包括 CART (Classification And Regression Tree)、ID3、C4.5、随机森林 (Random Forest) 等。
   以下面一个经典的案例来说明决策树分类的思想,有点像女孩子找对象,一定要找到一个合适的类型(类别)!!现想象一个女孩的母亲要给这个女孩介绍男朋友,于是有了下面的对话:

    女儿:多大年纪了?
    母亲:26。
    女儿:长的帅不帅?
    母亲:挺帅的。
    女儿:收入高不?
    母亲:不算很高,中等情况。
    女儿:是公务员不?
    母亲:是,在税务局上班呢。
    女儿:那好,我去见见。
这里写图片描述

  这个女孩最终选择的分类有两种,见或不见,但是判断的属性有好几种,比如年龄、长相、收入、公务员。根据这些对象属性分别进行依次判断,分支的箭头有各个属性满足的条件。
  由上面可以看出,决策树是附加概率结果的一个树状的决策图,是直观的运用统计概率分析的图法。机器学习中决策树是一个预测模型,它表示对象属性和对象值之间的一种映射,树中的每一个节点表示对象属性的判断条件,其分支表示符合节点条件的对象。树的叶子节点表示对象所属的预测结果。同时,可知决策树的决策过程非常直观,容易被人理解。目前决策树已经成功运用于医学、制造产业、天文学、分支生物学以及商业等诸多领域。

二、决策树的建立
2.1、决策树构造简介

  样本集里面的样本有多个属性,需要确定先选取哪个属性作为分裂属性来划分样本集。构建决策树的过程就是选择合适的分裂属性的过程。选择一个合适的分裂属性作为判断节点,可以快速对数据进行分类,减少决策树的深度。决策树的目标就是把数据集按对应的类标签进行分类。最理想的情况是,通过分裂属性的选择能把不同类别的数据集贴上对应类标签。特征属性选择的目标使得分类后的数据集比较纯。尽可能“纯”就是尽量让一个分裂子集中待分类项属于同一类别。故决策树构建的基本步骤如下:
  (1)开始,所有样本看作一个节点,所有的属性构成一个属性集合;
  (2)遍历属性集合中的每一种分割属性,找到最好的分割属性;
  (3)按照分割属性对样本集进行划分,由一个节点分割成多个节点;
  (4)将刚才使用的属性从属性集合中丢弃,对刚刚分割得到的每一个子节点分别继续执行2-3步,直到每个节点足够“纯”为止。
  决策树的属性可以有两种:(a) 数字型(Numeric):变量类型是整数或浮点数,如“年收入”。用“>=”,“>”,“<”或“<=”作为分割条件(排序后,利用已有的分割情况,可以优化分割算法的时间复杂度)。(b) 名称型(Nominal):类似编程语言中的枚举类型,变量只能重有限的选项中选取,比如“婚姻情况”,只能是“单身”,“已婚”或“离婚”。使用“=”来分割。
  构造决策树的关键性内容是进行属性选择度量,属性选择度量是一种选择分裂准则,是将给定的类标记的训练集合的数据划分D“最好”地分成个体类。属性选择度量算法(即量化纯度的算法)有很多。下面将介绍两种常用的方法。
2.2、属性选择度量算法
  属性选择方法总是选择最好的属性最为分裂属性,即让每个分支的记录的类别尽可能纯。它将所有属性列表的属性进行按某个标准排序,从而选出最好的属性。属性选择方法很多,这里介绍三个常用的方法:信息增益(Information gain)、增益比率(gain ratio)、基尼指数(Gini index)。
1、信息增益(ID3算法)
  信息熵表示的是不确定度。均匀分布时,不确定度最大,此时熵就最大。当选择某个特征对数据集进行分类时,分类后的数据集信息熵会比分类前的小,其差值表示为信息增益。信息增益可以衡量某个特征对分类结果的影响大小。
  假设在样本数据集 D 中,混有 c 种类别的数据。构建决策树时,根据给定的样本数据集选择某个特征值作为树的节点。在数据集中,可以计算出该数据中作用前的信息熵计算公式:

这里写图片描述

  其中 D 表示训练数据集,c 表示数据类别数,Pi 表示类别 i 样本数量占所有样本的比例。
  对应数据集 D,选择特征属性 A 作为决策树判断节点时,在特征 属性A 作用后的信息熵的为 Info(D),计算公式如下:

这里写图片描述

  其中 v 表示样本 D 被分为 v 个部分。
  信息增益表示数据集 D 在特征 A 的作用后,其信息熵减少的值。公式如下:

这里写图片描述

  对数据集中每个特征属性进行信息增益计算,选择gain()值最大的特征属性作为决策树节点最合适的特征属性选择。下面以一个案例(不真实账号检测)为例来进行说明如何利用信息增益来进行特征属性的选择:

这里写图片描述

  其中s、m和l分别表示小、中和大。 设L、F、H和R表示日志密度、好友密度、是否使用真实头像和账号是否真实,下面计算各属性的信息增益。首先计算数据集作用前的信息熵:

这里写图片描述

  然后计算各个特征属性作为判断节点的信息增益:

这里写图片描述

这里写图片描述

  因此日志密度的信息增益是0.276。用同样方法得到H和F的信息增益分别为0.033和0.553。所以F具有最大的信息增益,所以第一次选择F属性作为分裂属性,分裂后的结果如下图所示:

这里写图片描述

  在上图的基础上,再递归使用这个方法计算子节点的分裂属性,最终就可以得到整个决策树。
  上面为了简便,将特征属性离散化了,其实日志密度和好友密度都是连续的属性。对于特征属性为连续值,可以如此使用ID3算法:先将D中元素按照特征属性排序,则每两个相邻元素的中间点可以看做潜在分裂点,从第一个潜在分裂点开始,分裂D并计算两个集合的期望信息,具有最小期望信息的点称为这个属性的最佳分裂点,其信息期望作为此属性的信息期望。
2、增益比率(C4.5算法)
  信息增益选择方法有一个很大的缺陷,它总是会倾向于选择属性值多的属性,如果我们在上面的数据记录中加一个账号名属性,假设10条记录中的每个账号名不同,那么信息增益就会选择账号名作为最佳属性,因为按账号名分裂后,每个组只包含一条记录,而每个记录只属于一类(要么账号真实要么不真实),因此纯度最高,以账号名作为测试分裂的结点下面有10个分支。但是这样的分类没有意义,它没有任何泛化能力。增益比率对此进行了改进,它引入一个分裂信息:

这里写图片描述

  其中各符号意义与信息增益算法相同,然后,增益率被定义为:

这里写图片描述

  增益比率选择具有最大增益率的属性作为分裂属性,其具体应用与信息增益算法类似。


       这两种也可以结合起来使用。

三、决策树的相关问题
3.1、分类什么时候停止?
  决策树的构建过程是一个递归的过程,所以需要确定停止条件,否则过程将不会结束。

        停止的条件:

        (1)节点的样本都是同一类时停止。

        (2)节点的样本集合为空

        (3)属性集合为空或者当前节点所有的样本在所有属性上取值都会划分到同一类,这样没办法产生新的节点。


3.2、如果属性集合为空了怎么办?
  在决策树构造过程中可能会出现这种情况:所有属性都作为分裂属性用光了,但有的子集还不是纯净集,即集合内的元素不属于同一类别。在这种情况下,由于没有更多信息可以使用了,一般对这些子集进行“多数表决”,即使用此子集中出现次数最多的类别作为此节点类别,然后将此节点作为叶子节点。
3.3、过度拟合出现的原因?
  采用上面算法生成的决策树在事件中往往会导致过度拟合。也就是该决策树对训练数据可以得到很低的错误率,但是运用到测试数据上却得到非常高的错误率。过度拟合的原因有以下几点:
  (1)噪音数据:训练数据中存在噪音数据,决策树的某些节点有噪音数据作为分割标准,导致决策树无法代表真实数据。
  (2)缺少代表性数据:训练数据没有包含所有具有代表性的数据,导致某一类数据无法很好的匹配,这一点可以通过观察混淆矩阵(Confusion Matrix)分析得出。
  (3)多重比较:决策树需要在每个变量的每一个值中选取一个作为分割的代表,所以选出一个噪音分割标准的概率是很大的。
3.4、如何解决存在的过度拟合的问题?
1、修剪枝叶
  决策树过渡拟合往往是因为太过“茂盛”,也就是节点过多,所以需要裁剪(Prune Tree)枝叶。裁剪枝叶的策略对决策树正确率的影响很大。主要有两种裁剪策略:
  (1)前置裁剪 在构建决策树的过程时,提前停止。那么,会将切分节点的条件设置的很苛刻,导致决策树很短小。结果就是决策树无法达到最优。实践证明这中策略无法得到较好的结果。
  (2)后置裁剪 决策树构建好后,然后才开始裁剪。采用两种方法:(a)用单一叶节点代替整个子树,叶节点的分类采用子树中最主要的分类;(b)将一个字数完全替代另外一颗子树。后置裁剪有个问题就是计算效率,有些节点计算后就被裁剪了,导致有点浪费。
2、K层交叉验证
  首先计算出整体的决策树T,叶节点个数记作N,设i属于[1,N]。对每个i,使用K-Fold Validataion方法计算决策树,并裁剪到i个节点,计算错误率,最后求出平均错误率。这样可以用具有最小错误率对应的i作为最终决策树的大小,对原始决策树进行裁剪,得到最优决策树。
3、随机森林
  Random Forest是用训练数据随机的计算出许多决策树,形成了一个森林。然后用这个森林对未知数据进行预测,选取投票最多的分类。实践证明,此算法的错误率得到了经一步的降低。这种方法背后的原理可以用“三个臭皮匠定一个诸葛亮”这句谚语来概括。一颗树预测正确的概率可能不高,但是集体预测正确的概率却很高。
4、 及早停止增长树法,在ID3算法完美分类训练数据之前停止增长树。

四、决策树的优缺点
4.1、决策树的优点
相对于其他数据挖掘算法,决策树在以下几个方面拥有优势:
  (1) 决策树易于理解和实现. 人们在通过解释后都有能力去理解决策树所表达的意义。
  (2) 对于决策树,数据的准备往往是简单或者是不必要的 。其他的技术往往要求先把数据一般化,比如去掉多余的或者空白的属性。
  (3) 能够同时处理数据型和常规型属性。其他的技术往往要求数据属性的单一。
  (4) 在相对短的时间内能够对大型数据源做出可行且效果良好的结果。
  (5) 对缺失值不敏感。
  (6) 可以处理不相关特征数据。
  (7) 效率高,决策树只需要一次构建,反复使用,每一次预测的最大计算次数不超过决策树的深度。
4.2、决策树的缺点
  (1)对连续性的字段比较难预测。
  (2)对有时间顺序的数据,需要很多预处理的工作。
  (3)当类别太多时,错误可能就会增加的比较快。
  (4)一般的算法分类的时候,只是根据一个字段来分类。
  (5)在处理特征关联性比较强的数据时表现得不是太好。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值