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

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

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

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

二、决策树的建立
2.1、决策树构造简介
  构建决策树的过程就是选择合适的分裂属性的过程。选择一个合适的分裂属性作为判断节点,可以快速对数据进行分类,减少决策树的深度。决策树的目标就是把数据集按对应的类标签进行分类。最理想的情况是,通过分裂属性的选择能把不同类别的数据集贴上对应类标签。特征属性选择的目标使得分类后的数据集比较纯(即让各个分裂子集尽可能地“纯”)。尽可能“纯”就是尽量让一个分裂子集中待分类项属于同一类别。故决策树构建的基本步骤如下:
  (1)开始,所有记录看作一个节点;
  (2)遍历每个变量的每一种分割方式,找到最好的分割点;
  (3)分割成两个节点N1和N2;
  (4)对N1和N2分别继续执行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、分类什么时候停止?
  决策树的构建过程是一个递归的过程,所以需要确定停止条件,否则过程将不会结束。一种最直观的方式是当每个子节点只有一种类型的记录时停止,但是这样往往会使得树的节点过多,导致过拟合问题(Overfitting)。另一种可行的方法是当前节点中的记录数低于一个最小的阀值,那么就停止分割,将max(P(i))对应的分类作为当前叶节点的分类。
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
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《机器学习》西瓜书是机器学习领域的一本经典教材,其中的决策树算法机器学习中的一种重要分类算法决策树算法可以用于决策问题,将问题分解成多个子问题,通过构造决策树来递归地进行分类。 决策树算法的构建过程可以分为两个步骤,即特征选择和决策树生成。在特征选择过程中,需要根据某个评估指标对不同特征进行排序,选择最优的特征作为节点进行分割。常用的评估指标包括信息增益、信息增益比和基尼系数等。在决策树生成过程中,需要递归地生成决策树的各个节点,通过特征选择将训练样本不断划分成子集,并为每个子集生成一个新的节点,直到满足停止条件。 决策树算法具有易理解、易实现的特点,同时对部分异常数据具有一定的鲁棒性。但是,在处理高维数据或特征较多的数据集时,决策树算法可能会存在过拟合等问题。为了解决这些问题,可以使用剪枝算法、随机森林等方法进行优化和改进。 在实际应用中,决策树算法被广泛应用于数据挖掘、信用评估、医学诊断、文本分类等领域。在学习和应用决策树算法时,需要注意特征选择和决策树生成的各种细节和算法选择,以及如何利用决策树算法解决实际问题。 ### 回答2: 《机器学习》这本西瓜书是机器学习领域的经典教材之一,其中涉及了决策树算法决策树是一种基于树形结构的分类方法,可以用于处理离散型和连续型数据集。使用决策树算法建立模型的过程,可以理解为递归地将数据切割成小的子集,使得每个子集的纯度尽可能地提高,最终生成一棵有序的树型结构。 决策树算法的训练过程,通常分为三个步骤:选择最优特征、建立决策树以及剪枝。其中选择最优特征的目的是在当前样本集合中,找到对样本分类最有帮助的特征,通过衡量每个特征的信息增益或信息增益比,选出最优特征作为节点。根据节点特征将数据集分成若干互斥的子集,然后递归地对子集进行划分,生成决策树。最后,通过剪枝减少决策树的复杂度和泛化误差,得到最终的模型。 决策树算法在实际应用中具有很高的灵活性和可解释性,相对简单的分类问题中具有很好的性能。但是,当数据集过大或过于复杂时,决策树算法的计算复杂度会显著增加,生成的决策树容易过拟合,泛化能力较差。因此,在进行模型训练时需要进行特征选择、代码优化以及剪枝等操作。 ### 回答3: 决策树机器学习中一种常用的算法,它采用树状结构来进行分类和预测。在《机器学习》西瓜书中,决策树被归为监督学习中的分类算法决策树算法的主要思想是将数据按照特征属性分为不同的类别。决策树有三个关键的概念:节点、分支、叶子节点。节点包括根节点、内部节点和叶子节点。根节点代表数据集,内部节点表示特征属性,叶子节点代表不同的数据类别。 在决策树算法中,有两种常用的构建方式:ID3算法和C4.5算法。这里我们简要介绍一下C4.5算法。C4.5算法决策树算法中的一种改进算法,它不仅考虑了信息熵,还考虑了各个特征属性之间的相关性,从而提高了决策树算法的准确率。 C4.5算法主要分为三个步骤:特征选择、决策树的生成和决策树的剪枝。在特征选择阶段,C4.5算法采用信息增益比来选择最优划分属性。在决策树的生成阶段,C4.5算法采用递归方法,依次生成决策树的各个节点。在决策树的剪枝阶段,C4.5算法通过比较剪枝前后的错误率来确定是否进行剪枝。 总的来说,决策树算法是一种简单且常用的分类算法,它不仅易于理解和解释,还具有较高的分类准确率。当然,在实际应用中,我们需要根据实际情况选择合适的决策树算法,并对模型进行调参和优化,提高算法的性能和实用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值