ML(4): 决策树算法

在众多的分类模型中,应用最为广泛的两种分类模型是决策树模型(Decision Tree Model)朴素贝叶斯模型(Naive Bayesian Model,NBC)。决策树模型通过构造树来解决分类问题。首先利用训练数据集来构造一棵决策树,一旦树建立起来,它就可为未知样本产生一个分类。在分 类问题中使用决策树模型有很多的优点:

  • 决策树便于使用,而且高效;
  • 根据决策树可以很容易地构造出规则,而规则通常易于解释和理解;
  • 决策树可很好地扩展到大 型数据库中,同时它的大小独立于数据库的大小;
  • 决策树模型的另外一大优点就是可以对有许多属性的数据集构造决策树。

和决策树模型相比,朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以 及稳定的分类效率。同时,NBC模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。理论上,NBC模型与其他分类方法相比具有最小的误差率。 但是实际上并非总是如此,这是因为NBC模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,这给NBC模型的正确分类带来了一定影响。在属 性个数比较多或者属性之间相关性较大时,NBC模型的分类效率比不上决策树模型。而在属性相关性较小时,NBC模型的性能最为良好

决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输出 决策树模型也有一些缺点,比如处理缺失 数据时的困难,过度拟合问题的出现,以及忽略数据集中属性之间的相关性等。

决策树是一颗倒长的树,主要由根节点、分支、叶节点组成,每一个分支是一条规则,主要用于分类。决策树的算法主要有ID3、C4.5、CART,其中最为流行的事C4.5算法。针对每一种决策树的算法都要解决两个主要问题:

  • 选择哪个属性来分裂?
  • 什么时候树停止生长?

C4.5之所以流行的原因是:

  • 用信息增益率来选择属性分裂
  • 构造树的过程中进行剪枝
  • 能处理连续型数据和不完整数据

信息增益



如何选择属性分裂对于规则来说是合适的,这就引出“熵”的概念。简而言之,“熵”是对混乱程度的度量,越乱熵越大,这也是为什么我让办公桌乱的原因。与之相对应的概念是“序”,就是有规律。越有序,越纯,熵越小;越乱,熵越大,越不纯;从数学的角度来看熵的计算公式如下:

其中,p(i|t)表示节点t中属于类i所占的比例; 为了确定选择属性的分裂结果,我们用划分前(父节点)的不纯度和划分后(子女节点)的不纯度的差来来衡量属性分裂的测试结果,该指标成为信息增益,也就是熵的差,计算公式如下:

I(parent)是节点的值不纯性,k是属性的个数,决策树归纳通常选择最大化信息增益的属性做分裂;但是这样做有一个缺点:基于熵和Gini的不纯性的度量趋向于选择类别多的属性做分裂。可以这样理解,二元划分实际上相当于合并了多路属性,这个也可以用公式计算证明。那如何解决这个问题呢?有两种方法:一是限制测试属性只能是二元划分(这是CART的思想),二是修改衡量规则,于是C4.5提出采用信息增益率来划分,把属性测试产生的输出数也考虑进去,计算公式如下:

其中 split Info 的公式如下:

 模型的误差


  • 一般情况下,我们会把数据分成训练数据集合测试数据集,通过训练数据集训练模型,然后通过测试数据集测试模型。模型在训练数据上的误差叫训练误差模型在测试数据上的误差成为泛化误差,泛化误差是模型在未知记录上的期望误差。一个好的模型应该有低训练误差和低泛化误差。
  • 一种最常见的情况是,模型在训练数据集上误差小,但是泛化误差大,常称为模型的过度拟合。导致模型过度拟合的原因主要有以下两点:
    1. 噪声
    2. 样本缺乏代表性;
  • 为解决模型的过度拟合问题,经常使用对决策树后剪枝的方法,这样需要我们在建立模型的过程中,尽量建立一棵大树,然后基于数据的支持度和业务的理解对树进行剪枝。

参考:http://blog.csdn.net/x454045816/article/details/44726921

http://www.zgxue.com/167/1677903.html

时间: 2024-08-06 03:40:56

ML(4): 决策树算法的相关文章

Spark机器学习(6):决策树算法

1. 决策树基本知识 决策树就是通过一系列规则对数据进行分类的一种算法,可以分为分类树和回归树两类,分类树处理离散变量的,回归树是处理连续变量. 样本一般都有很多个特征,有的特征对分类起很大的作用,有的特征对分类作用很小,甚至没有作用.如决定是否对一个人贷款是,这个人的信用记录.收入等就是主要的判断依据,而性别.婚姻状况等等就是次要的判断依据.决策树构建的过程,就是根据特征的决定性程度,先使用决定性程度高的特征分类,再使用决定性程度低的特征分类,这样构建出一棵倒立的树,就是我们需要的决策树模型,

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

该节主要是把<机器学习实战>书上第三章关于决策树的相关代码照样子实现了一遍.对其中一些内容作了些补充,对比ID3与C45区别,同时下载了一个大样本集实验决策树的准确率. 首先,对于决策树的原理,很多很好的博客值得一看: 从决策树学习谈到贝叶斯分类算法.EM.HMM 决策树算法总结 这两个已经详解了关于决策树的所有,慢慢品读吧. 下面是书上外加添加的部分程序,首先是tree.py里面的程序: import operator from math import log # calculate the

4-Spark高级数据分析-第四章 用决策树算法预测森林植被

预测是非常困难的,更别提预测未来. 4.1 回归简介 随着现代机器学习和数据科学的出现,我们依旧把从“某些值”预测“另外某个值”的思想称为回归.回归是预测一个数值型数量,比如大小.收入和温度,而分类则指预测标号或类别,比如判断邮件是否为“垃圾邮件”,拼图游戏的图案是否为“猫”. 将回归和分类联系在一起是因为两者都可以通过一个(或更多)值预测另一个(或多个)值.为了能够做出预测,两者都需要从一组输入和输出中学习预测规则.在学习的过程中,需要告诉它们问题及问题的答案.因此,它们都属于所谓的监督学习.

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

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

scikit-learn决策树算法类库使用小结

参考:http://www.cnblogs.com/pinard/p/6056319.html 之前对决策树的算法原理做了总结,包括决策树算法原理(上)和决策树算法原理(下).今天就从实践的角度来介绍决策树算法,主要是讲解使用scikit-learn来跑决策树算法,结果的可视化以及一些参数调参的关键点. 1. scikit-learn决策树算法类库介绍 scikit-learn决策树算法类库内部实现是使用了调优过的CART树算法,既可以做分类,又可以做回归.分类决策树的类对应的是Decision

决策树算法

利用ID3算法来判断某天是否适合打网球. (1)类别属性信息熵的计算由于未分区前,训练数据集中共有14个实例, 其中有9个实例属于yes类(适合打网球的),5个实例属于no类(不适合打网球), 因此分区前类别属性的熵为: (2)非类别属性信息熵的计算,若先选择Outlook属性. (3)Outlook属性的信息增益为: (4)同理计算出其他3个非类别属性的信息增益,取最大的那个属性作为分裂节点,此例中最大的是Outlook,进而得到如下图所示: (5)上图中,针对sunny中的子训练数据集分支,

R(rattle)实现决策树算法

使用R实现决策树分析 决策树算法也是数据挖掘的核心算法之一,使用树形结构模型进行知识表达.非叶子节点为分支条件,叶子节点为决策条件. 分支算法主要使用的信息增益,这里不再详述.本篇案例主要也是使用weather数据集建立决策树模型,使用Rattle的model工具栏的Tree选项,rattle包的安装如下: > install.packages("rattle") 1.使用rattle建立决策树模型 在data工具栏加载weather数据集后,点击执行按钮,然后转到model工具

算法干货----决策树算法中的熵与信息增益

什么是决策树?为什么要用决策树? 决策树是一种二分树,或是多分数.对于大量数据的细分工作有很大帮助.在日常生活中,决策树的算法可谓是每天都在用.小到用户分类,大到辅助决策.实际上他的使用很多. 至于为什么要用到决策树,个人认为就是因为这种算法简单.代码实现起来主要就是IF-ELSE就可以实现.可这一算法的发展也是从ID3--->C4.5----->C5.0. 它的主要步骤就两个:1,建树 2,剪树 如何建树,就是如何分你的数据,按照哪种特性?比如人口统计数据,是按年龄,身高,体重,学历....

如何实现并应用决策树算法?

本文对决策树算法进行简单的总结和梳理,并对著名的决策树算法ID3(Iterative Dichotomiser 迭代二分器)进行实现,实现采用Python语言,一句老梗,“人生苦短,我用Python”,Python确实能够省很多语言方面的事,从而可以让我们专注于问题和解决问题的逻辑. 根据不同的数据,我实现了三个版本的ID3算法,复杂度逐步提升: 1.纯标称值无缺失数据集 2.连续值和标称值混合且无缺失数据集 3.连续值和标称值混合,有缺失数据集 第一个算法参考了<机器学习实战>的大部分代码,