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

转自:https://blog.csdn.net/qq_43208303/article/details/84837412

决策树是一种机器学习的方法。决策树的生成算法有ID3, C4.5和CART等。决策树是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果。决策树是一种十分常用的分类方法,需要监管学习(有教师的Supervised Learning),监管学习就是给出一堆样本,每个样本都有一组属性和一个分类结果,也就是分类结果已知,那么通过学习这些样本得到一个决策树,这个决策树能够对新的数据给出正确的分类。这里通过一个简单的例子来说明决策树的构成思路:

给出如下的一组数据,一共有十个样本(学生数量),每个样本有分数,出勤率,回答问题次数,作业提交率四个属性,最后判断这些学生是否是好学生。最后一列给出了人工分类结果。

然后用这一组附带分类结果的样本可以训练出多种多样的决策树,这里为了简化过程,我们假设决策树为二叉树,且类似于下图:

通过学习上表的数据,可以A,B,C,D,E的具体值,而A,B,C,D,E则称为阈值。当然也可以有和上图完全不同的树形,比如下图这种的:

所以决策树的生成主要分以下两步,这两步通常通过学习已经知道分类结果的样本来实现。

节点的分裂:一般当一个节点所代表的属性无法给出判断时,则选择将这一节点分成2个子 节点(如不是二叉树的情况会分成n个子节点)

阈值的确定:选择适当的阈值使得分类错误率最小 (Training Error)。

比较常用的决策树有ID3,C4.5和CART(Classification And Regression Tree),CART的分类效果一般优于其他决策树。下面介绍具体步骤。 ID3: 由增熵(Entrophy)原理来决定那个做父节点,那个节点需要分裂。对于一组数据,熵越大说明分类结果越好。

比如上表中的4个属性:单一地通过以下语句分类:

分数小于70为【不是好学生】:分错1个

出勤率大于70为【好学生】:分错3个

问题回答次数大于9为【好学生】:分错2个

作业提交率大于80%为【好学生】:分错2个。

最后发现 分数小于70为【不是好学生】这条分错最少,也就是熵最大,所以应该选择这条为父节点进行树的生成,当然分数也可以选择大于71,大于72等等,出勤率也可以选择小于60,65等等,总之会有很多类似上述1~4的条件,最后选择分类错最少即熵最大的那个条件。而当分裂父节点时道理也一样,分裂有很多选择,针对每一个选择,与分裂前的分类错误率比较,留下那个提高最大的选择,即熵增益最大的选择。

C4.5:通过对ID3的学习可以知道ID3存在一个问题,那就是越细小的分割分类错误率越小,所以ID3会越分越细,比如以第一个属性为例:设阈值小于70可将样本分为2组,但是分错了1个。如果设阈值小于70,再加上阈值等于95,那么分错率降到了0,但是这种分割显然只对训练数据有用,对于新的数据没有意义,这就是所说的过度学习(Overfitting)。分割太细了,训练数据的分类可以达到0错误率,但是因为新的数据和训练数据不同,所以面对新的数据分错率反倒上升了。决策树是通过分析训练数据,得到数据的统计信息,而不是专为训练数据量身定做。就比如给男人做衣服,叫来10个人做参考,做出一件10个人都能穿的衣服,然后叫来另外5个和前面10个人身高差不多的,这件衣服也能穿。但是当你为10个人每人做一件正好合身的衣服,那么这10件衣服除了那个量身定做的人,别人都穿不了。所以为了避免分割太细,c4.5对ID3进行了改进,C4.5中,增加的熵要除以分割太细的代价,这个比值叫做信息增益率,显然分割太细分母增加,信息增益率会降低。除此之外,其他的原理和ID3相同。

CART:分类回归树

CART是一个二叉树,也是回归树,同时也是分类树,CART的构成简单明了。

CART只能将一个父节点分为2个子节点。CART用GINI指数来决定如何分裂:

GINI指数:总体内包含的类别越杂乱,GINI指数就越大(跟熵的概念很相似)。

a. 比如出勤率大于70%这个条件将训练数据分成两组:大于70%里面有两类:【好学生】和【不是好学生】,而小于等于70%里也有两类:【好学生】和【不是好学生】。

b. 如果用分数小于70分来分:则小于70分只有【不是好学生】一类,而大于等于70分有【好学生】和【不是好学生】两类。

比较a和b,发现b的凌乱程度比a要小,即GINI指数b比a小,所以选择b的方案。以此为例,将所有条件列出来,选择GINI指数最小的方案,这个和熵的概念很类似。

CART还是一个回归树,回归解析用来决定分布是否终止。理想地说每一个叶节点里都只有一个类别时分类应该停止,但是很多数据并不容易完全划分,或者完全划分需要很多次分裂,必然造成很长的运行时间,所以CART可以对每个叶节点里的数据分析其均值方差,当方差小于一定值可以终止分裂,以换取计算成本的降低。

CART和ID3一样,存在偏向细小分割,即过度学习(过度拟合的问题),为了解决这一问题,对特别长的树进行剪枝处理,直接剪掉。

以上的决策树训练的时候,一般会采取Cross-Validation法:比如一共有10组数据:

第一次. 1到9做训练数据, 10做测试数据

第二次. 2到10做训练数据,1做测试数据

第三次. 1,3到10做训练数据,2做测试数据,以此类推

做10次,然后大平均错误率。这样称为 10 folds Cross-Validation。

比如 3 folds Cross-Validation 指的是数据分3份,2份做训练,1份做测试。

决策树的用途:
决策树是一种先进生产力,能够在中等规模数据上低难度获得较好的模型。这是因为树类的几大能力:
1 数据不需精心归一化,这个在神经网络领域是不行的,轻则效果不好,重则分分钟梯度给你nan
2 离散特征连续特征无脑混搭即可使用,神经网络需要精细设计
3 能接受缺失数据,这一点神经网至今为止没有好的解决方案
4 超参意义简明易调
5 一定的“可解释”性,当然 树太多了也不行刷imagenet这种数据集来说,树或许不行了,但在千奇百怪的实际问题中,其地位还是无可撼动的。很可能一个新手用树模型短时间可以获得一个,比神经网络专家精心调参的模型只差一点的模型。对于追求成本和效率的工业界,这就是先进生产力。

原文地址:https://www.cnblogs.com/qing1991/p/10090944.html

时间: 2024-11-01 16:12:15

机器学习---算法---决策树的相关文章

[转载]简单易学的机器学习算法-决策树之ID3算的

一.决策树分类算法概述 决策树算法是从数据的属性(或者特征)出发,以属性作为基础,划分不同的类.例如对于如下数据集 (数据集) 其中,第一列和第二列为属性(特征),最后一列为类别标签,1表示是,0表示否.决策树算法的思想是基于属性对数据分类,对于以上的数据我们可以得到以下的决策树模型 (决策树模型) 先是根据第一个属性将一部份数据区分开,再根据第二个属性将剩余的区分开. 实现决策树的算法有很多种,有ID3.C4.5和CART等算法.下面我们介绍ID3算法. 二.ID3算法的概述 ID3算法是由Q

简单易学的机器学习算法——AdaBoost

一.集成方法(Ensemble Method) 集成方法主要包括Bagging和Boosting两种方法,随机森林算法是基于Bagging思想的机器学习算法,在Bagging方法中,主要通过对训练数据集进行随机采样,以重新组合成不同的数据集,利用弱学习算法对不同的新数据集进行学习,得到一系列的预测结果,对这些预测结果做平均或者投票做出最终的预测.AdaBoost算法和GBDT(Gradient Boost Decision Tree,梯度提升决策树)算法是基于Boosting思想的机器学习算法.

机器学习算法之决策树

机器学习算法之决策树 什么是决策树 决策树(Decision Tree)是一种简单但是广泛使用的分类器.通过训练数据构建决策树,可以高效的对未知的数据进行分类.决策数有两大优点:1)决策树模型可以读性好,具有描述性,有助于人工分析:2)效率高,决策树只需要一次构建,反复使用,每一次预测的最大计算次数不超过决策树的深度. 决策树是一个树结构(可以是二叉树或者非二叉树),非叶节点表示一个特征属性上的测试,每个分支代表在某个值域上的输出,每个叶节点存放一个类别. 测试就是按照从根节点往下走,直到叶节点

机器学习算法的R语言实现(二):决策树

1.介绍 ?决策树(decision tree)是一种有监督的机器学习算法,是一个分类算法.在给定训练集的条件下,生成一个自顶而下的决策树,树的根为起点,树的叶子为样本的分类,从根到叶子的路径就是一个样本进行分类的过程. ?下图为一个决策树的例子,见http://zh.wikipedia.org/wiki/%E5%86%B3%E7%AD%96%E6%A0%91 ? 可见,决策树上的判断节点是对某一个属性进行判断,生成的路径数量为该属性可能的取值,最终到叶子节点时,就完成一个分类(或预测).决策树

【机器学习算法-python实现】决策树-Decision tree(1) 信息熵划分数据集

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 决策书算法是一种逼近离散数值的分类算法,思路比較简单,并且准确率较高.国际权威的学术组织,数据挖掘国际会议ICDM (the IEEE International Conference on Data Mining)在2006年12月评选出了数据挖掘领域的十大经典算法中,C4.5算法排名第一.C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3算法. 算法的主要思想就是将数据集依照特

【机器学习算法-python实现】决策树-Decision tree(2) 决策树的实现

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 接着上一节说,没看到请先看一下上一节关于数据集的划分数据集划分.如今我们得到了每一个特征值得信息熵增益,我们依照信息熵增益的从大到校的顺序,安排排列为二叉树的节点.数据集和二叉树的图见下. (二叉树的图是用python的matplotlib库画出来的) 数据集: 决策树: 2.代码实现部分 由于上一节,我们通过chooseBestFeatureToSplit函数已经能够确定当前数据集中的信息熵最大的

【机器学习算法-python实现】Adaboost的实现(1)-单层决策树(decision stump)

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 上一节学习支持向量机,感觉公式都太难理解了,弄得我有点头大.不过这一章的Adaboost线比较起来就容易得多.Adaboost是用元算法的思想进行分类的.什么事元算法的思想呢?就是根据数据集的不同的特征在决定结果时所占的比重来划分数据集.就是要对每个特征值都构建决策树,并且赋予他们不同的权值,最后集合起来比较. 比如说我们可以通过是否有胡子和身高的高度这两个特征来来决定一个人的性别,很明显是否有胡子

利用机器学习算法寻找网页的缩略图

博客中的文章均为meelo原创,请务必以链接形式注明本文地址 描述一个网页 现在的世界处于一个信息爆炸的时代.微信.微博.新闻网站,每天人们在大海捞针的信息海洋里挑选自己感兴趣的信息.我们是如何判断哪条信息可能会感兴趣?回想一下,你会发现是标题.摘要和缩略图.通过标题.摘要和缩略图,就能够很好地猜测到网页的内容.打开百度搜索引擎,随便搜索一个关键字,每一条搜索结果也正是这三要素构成的. 那么一个自然的问题是搜索引擎是如何找到网页的标题.摘要和缩略图的呢. 寻找网页的标题其实是一个非常简单的问题.

机器学习系列(9)_机器学习算法一览(附Python和R代码)

本文资源翻译@酒酒Angie:伊利诺伊大学香槟分校统计学同学,大四在读,即将开始计算机的研究生学习.希望认识更多喜欢大数据和机器学习的朋友,互相交流学习. 内容校正调整:寒小阳 && 龙心尘 时间:2016年4月 出处:http://blog.csdn.net/han_xiaoyang/article/details/51191386 http://blog.csdn.net/longxinchen_ml/article/details/51192086 声明:版权所有,转载请联系作者并注