数据挖掘系列(6)决策树分类算法

【机器学习】决策树分类(简介、原理、代码) 决策树分类 一、决策树分类简介: 决策树方法是利用信息论中的信息增益寻找数据库中具有最大信息量的属性字段,建立决策树的一个结点,再根据该属性字段的不同取值建立树的分支,再在每个分支子集中重复建立树的下层结点和分支的一个过程,构造决策树的具体过程为:首先寻找初始分裂,整个训练集作为产生决策树的集合,训练集每个记录必须是已经分好类的,以决定哪个属性域作为目前最好的分类指标,一般的做法是穷尽所有... 阅读详情

 从这篇开始,我将介绍分类问题,主要介绍决策树算法、朴素贝叶斯、支持向量机、BP神经网络、懒惰学习算法、随机森林与自适应增强算法、分类模型选择和结果评价。总共7篇,欢迎关注和交流。

  这篇先介绍分类问题的一些基本知识,然后主要讲述决策树算法的原理、实现,最后利用决策树算法做一个泰坦尼克号船员生存预测应用。

一、分类基本介绍

  物以类聚,人以群分,分类问题只古以来就出现我们的生活中。分类是数据挖掘中一个重要的分支,在各方面都有着广泛的应用,如医学疾病判别、垃圾邮件过滤、垃圾短信拦截、客户分析等等。分类问题可以分为两类:

  •   归类:归类是指对离散数据的分类,比如对根据一个人的笔迹判别这个是男还是女,这里的类别只有两个,类别是离散的集合空间{男,女}的。
  •   预测:预测是指对连续数据的分类,比如预测明天8点天气的湿度情况,天气的湿度在随时变化,8点时的天气是一个具体值,它不属于某个有限集合空间。预测也叫回归分析,在金融领域有着广泛应用。

  虽然对离散数据和连续数据的处理方式有所不同,但其实他们之间相互转化,比如我们可以根据比较的某个特征值判断,如果值大于0.5就认定为男性,小于等于0.5就认为是女性,这样就转化为连续处理方式;将天气湿度值分段处理也就转化为离散数据。

  数据分类分两个步骤:

  1. 构造模型,利用训练数据集训练分类器;
  2. 利用建好的分类器模型对测试数据进行分类。

  好的分类器具有很好的泛化能力,即它不仅在训练数据集上能达到很高的正确率,而且能在未见过得测试数据集也能达到较高的正确率。如果一个分类器只是在训练数据上表现优秀,但在测试数据上表现稀烂,这个分类器就已经过拟合了,它只是把训练数据记下来了,并没有抓到整个数据空间的特征。

二、决策树分类

  决策树算法借助于树的分支结构实现分类。下图是一个决策树的示例,树的内部结点表示对某个属性的判断,该结点的分支是对应的判断结果;叶子结点代表一个类标。

  上表是一个预测一个人是否会购买购买电脑的决策树,利用这棵树,我们可以对新记录进行分类,从根节点(年龄)开始,如果某个人的年龄为中年,我们就直接判断这个人会买电脑,如果是青少年,则需要进一步判断是否是学生;如果是老年则需要进一步判断其信用等级,直到叶子结点可以判定记录的类别。

  决策树算法有一个好处,那就是它可以产生人能直接理解的规则,这是贝叶斯、神经网络等算法没有的特性;决策树的准确率也比较高,而且不需要了解背景知识就可以进行分类,是一个非常有效的算法。决策树算法有很多变种,包括ID3、C4.5、C5.0、CART等,但其基础都是类似的。下面来看看决策树算法的基本思想:

  • 算法:GenerateDecisionTree(D,attributeList)根据训练数据记录D生成一棵决策树.
  • 输入:
    • 数据记录D,包含类标的训练数据集;
    • 属性列表attributeList,候选属性集,用于在内部结点中作判断的属性.
    • 属性选择方法AttributeSelectionMethod(),选择最佳分类属性的方法.
  • 输出:一棵决策树.
  • 过程:
    1. 构造一个节点N;
    2. 如果数据记录D中的所有记录的类标都相同(记为C类):
      • 则将节点N作为叶子节点标记为C,并返回结点N;
    3. 如果属性列表为空:
      • 则将节点N作为叶子结点标记为D中类标最多的类,并返回结点N;
    4. 调用AttributeSelectionMethod(D,attributeList)选择最佳的分裂准则splitCriterion;
    5. 将节点N标记为最佳分裂准则splitCriterion;
    6. 如果分裂属性取值是离散的,并且允许决策树进行多叉分裂:
      • 从属性列表中减去分裂属性,attributeLsit -= splitAttribute;
    7. 对分裂属性的每一个取值j:
      • 记D中满足j的记录集合为Dj;
      • 如果Dj为空:
        • 则新建一个叶子结点F,标记为D中类标最多的类,并且把结点F挂在N下;
      • 否则:
        • 递归调用GenerateDecisionTree(Dj,attributeList)得到子树结点Nj,将Nj挂在N下;
    8. 返回结点N;

   算法的1、2、3步骤都很显然,第4步的最佳属性选择函数会在后面专门介绍,现在只有知道它能找到一个准则,使得根据判断结点得到的子树的类别尽可能的纯,这里的纯就是只含有一个类标;第5步根据分裂准则设置结点N的测试表达式。在第6步中,对应构建多叉决策树时,离散的属性在结点N及其子树中只用一次,用过之后就从可用属性列表中删掉。比如前面的图中,利用属性选择函数,确定的最佳分裂属性是年龄,年龄有三个取值,每一个取值对应一个分支,后面不会再用到年龄这个属性。算法的时间复杂度是O(k*|D|*log(|D|)),k为属性个数,|D|为记录集D的记录数。

三、属性选择方法

  属性选择方法总是选择最好的属性最为分裂属性,即让每个分支的记录的类别尽可能纯。它将所有属性列表的属性进行按某个标准排序,从而选出最好的属性。属性选择方法很多,这里我介绍三个常用的方法:信息增益(Information gain)、增益比率(gain ratio)、基尼指数(Gini index)。

  • 信息增益(Information gain)

  信息增益基于香浓的信息论,它找出的属性R具有这样的特点:以属性R分裂前后的信息增益比其他属性最大。这里信息的定义如下:

  其中的m表示数据集D中类别C的个数,Pi表示D中任意一个记录属于Ci的概率,计算时Pi=(D中属于Ci类的集合的记录个数/|D|)。Info(D)表示将数据集D不同的类分开需要的信息量。

  如果了解信息论,就会知道上面的信息Info实际上就是信息论中的熵Entropy,熵表示的是不确定度的度量,如果某个数据集的类别的不确定程度越高,则其熵就越大。比如我们将一个立方体A抛向空中,记落地时着地的面为f1,f1的取值为{1,2,3,4,5,6},f1的熵entropy(f1)=-(1/6*log(1/6)+...+1/6*log(1/6))=-1*log(1/6)=2.58;现在我们把立方体A换为正四面体B,记落地时着地的面为f2,f2的取值为{1,2,3,4},f2的熵entropy(1)=-(1/4*log(1/4)+1/4*log(1/4)+1/4*log(1/4)+1/4*log(1/4)) =-log(1/4)=2;如果我们再换成一个球C,记落地时着地的面为f3,显然不管怎么扔着地都是同一个面,即f3的取值为{1},故其熵entropy(f3)=-1*log(1)=0。可以看到面数越多,熵值也越大,而当只有一个面的球时,熵值为0,此时表示不确定程度为0,也就是着地时向下的面是确定的。

  有了上面关于熵的简单理解,我们接着讲信息增益。假设我们选择属性R作为分裂属性,数据集D中,R有k个不同的取值{V1,V2,...,Vk},于是可将D根据R的值分成k组{D1,D2,...,Dk},按R进行分裂后,将数据集D不同的类分开还需要的信息量为: 

  信息增益的定义为分裂前后,两个信息量只差:

  信息增益Gain(R)表示属性R给分类带来的信息量,我们寻找Gain最大的属性,就能使分类尽可能的纯,即最可能的把不同的类分开。不过我们发现对所以的属性Info(D)都是一样的,所以求最大的Gain可以转化为求最小的InfoR(D)。这里引入Info(D)只是为了说明背后的原理,方便理解,实现时我们不需要计算Info(D)。举一个例子,数据集D如下:

记录ID 年龄 输入层次 学生 信用等级 是否购买电脑
1 青少年 高 否 一般 否
2 青少年 高 否 良好 否
3 中年 高 否 一般 是
4 老年 中 否 一般 是
5 老年 低 是 一般 是
6 老年 低 是 良好 否
7 中年 低 是 良好 是
8 青少年 中 否 一般 否
9 青少年 低 是 一般 是
10 老年 中 是 一般 是
11 青少年 中 是 良好 是
12 中年 中 否 良好 是
13 中年 高 是 一般 是
14 老年 中 否 良好 否

  这个数据集是根据一个人的年龄、收入、是否学生以及信用等级来确定他是否会购买电脑,即最后一列“是否购买电脑”是类标。现在我们用信息增益选出最最佳的分类属性,计算按年龄分裂后的信息量:

  整个式子由三项累加而成,第一项为青少年,14条记录中有5条为青少年,其中2(占2/5)条购买电脑,3(占3/5)条不购买电脑。第二项为中年,第三项为老年。类似的,有:

  可以得出Info年龄(D)最小,即以年龄分裂后,分得的结果中类标最纯,此时已年龄作为根结点的测试属性,根据青少年、中年、老年分为三个分支:

  注意,年龄这个属性用过后,之后的操作就不需要年龄了,即把年龄从attributeList中删掉。往后就按照同样的方法,构建D1,D2,D3对应的决策子树。ID3算法使用的就是基于信息增益的选择属性方法。

  • 增益比率(gain ratio)

  信息增益选择方法有一个很大的缺陷,它总是会倾向于选择属性值多的属性,如果我们在上面的数据记录中加一个姓名属性,假设14条记录中的每个人姓名不同,那么信息增益就会选择姓名作为最佳属性,因为按姓名分裂后,每个组只包含一条记录,而每个记录只属于一类(要么购买电脑要么不购买),因此纯度最高,以姓名作为测试分裂的结点下面有14个分支。但是这样的分类没有意义,它没有任何泛化能力。增益比率对此进行了改进,它引入一个分裂信息:

  增益比率定义为信息增益与分裂信息的比率:

  我们找GainRatio最大的属性作为最佳分裂属性。如果一个属性的取值很多,那么SplitInfoR(D)会大,从而使GainRatio(R)变小。不过增益比率也有缺点,SplitInfo(D)可能取0,此时没有计算意义;且当SplitInfo(D)趋向于0时,GainRatio(R)的值变得不可信,改进的措施就是在分母加一个平滑,这里加一个所有分裂信息的平均值:

  • 基尼指数(Gini index)

  基尼指数是另外一种数据的不纯度的度量方法,其定义如下:

  其中的m仍然表示数据集D中类别C的个数,Pi表示D中任意一个记录属于Ci的概率,计算时Pi=(D中属于Ci类的集合的记录个数/|D|)。如果所有的记录都属于同一个类中,则P1=1,Gini(D)=0,此时不纯度最低。在CART(Classification and Regression Tree)算法中利用基尼指数构造二叉决策树,对每个属性都会枚举其属性的非空真子集,以属性R分裂后的基尼系数为:

 

  D1为D的一个非空真子集,D2为D1在D的补集,即D1+D2=D,对于属性R来说,有多个真子集,即GiniR(D)有多个值,但我们选取最小的那么值作为R的基尼指数。最后:

  我们转Gini(R)增量最大的属性作为最佳分裂属性。

总结

  本来打算还讲一下实现的,今天要回家,帮家里收下谷子,本来买的前天的票的,台风影响京广线没走成,先写到这里,收拾东西去。9月30回来,再总结一下实现和实践,并持续后面的话题,欢迎持续关注。

参考文献:

 [1]:HanJiaWei. Data Mining: concept and  techniques.

机器学习2—分类算法之决策树(Decision Tree) 训练。给定一个数据集,每个样本包含一组特征和一个类别信息,然后调用分类算法训练分类模型。预测。利用生成的模型或函数对新的数据集(测试集)进行分类预测,并判断其分类后的结果,并进行可视化绘图显示。分类实例进行讲解。假设存在一个垃圾分类系统,将邮件划分为“垃圾邮件”和“非垃圾邮件”,现在有一个带有是否是垃圾邮件类标的训练集,然后训练一个分类模型,对测试集进行预测,步骤如下随机森林为了更好地解决泛化及树结构变动~等~问题,从决策树演进出来随机森林算法。httpshttpshttps。... 阅读详情

相关推荐

浅谈决策树算法以及matlab实现ID3算法

决策树方法在分类、预测、规则提取等领域有着广泛的应用。在20世纪70年代后期和80年代初期,机器学习研究者J.Ross Quinilan提出了ID3算法以后,决策树在机器学习、数据挖掘领域得到极大的发展。Quinilan后来又提出了C4.5,成为新的监督学习算法。1984年几位统计学家提出了CART分类算法。ID3和ART算法大约同时被提出,但都是采用类似的方法从训练样本中学习决策树的。决策树是一树

lfdanding的专栏 4万+

数据结构 - 决策树(分类)

数据结构 - 决策树一决策树的介绍二决策树的构造使用决策树做预测需要以下过程:1.信息熵2.条件熵(Conditional Entropy)与[信息增益](https://so.youkuaiyun.com/so/search?q=信息增益&spm=1001.2101.3001.7020)(Information Gain)3.信息增益做特征选择的优缺点4.信息增益比(Infomation Gain Ratio)5.Gini系数 一决策树的介绍 决策树(decision tree):是一种基本的分类与回归方法,

为了更好的未来_加油 1万+

数据挖掘-决策树ID3分类算法的C++实现

数据挖掘课上面老师介绍了下决策树ID3算法,我抽空余时间把这个算法用C++实现了一遍。决策树算法是非常常用的分类算法,是逼近离散目标函数的方法,学习得到的函数以决策树的形式表示。其基本思路是不断选取产生信息增益最大的属性来划分样例集和,构造决策树。信息增益定义为结点与其子结点的信息熵之差。信息熵是香农提出的,用于描述信息不纯度(不稳定性),其计算公式是Pi为子集合中不同性(而二元分类即正样例和负样

Coding for Dreams 6万+

分类算法系列⑤:决策树

本文介绍机器学习的决策树

逐梦苍穹的博客 1万+

6 - L5_1 决策树模型 | 分类模型

决策树算法是一种在机器学习和数据挖掘领域广泛应用的强大工具,它模拟人类决策过程,通过对数据集进行逐步的分析和判定,最终生成一颗树状结构,每个节点代表一个决策或一个特征。决策树的核心思想是通过一系列问题将数据集划分成不同的类别或值,从而实现对未知数据的预测和分类。这一算法的开发灵感源自人类在解决问题时的思考方式,我们往往通过一系列简单而直观的问题逐步缩小解决方案的范围。决策树的构建过程也是类似的,它通过对数据的特征进行提问,选择最能区分不同类别的特征,逐渐生成树状结构,最终形成一个可用于预测的模型。

hazel_cjx的博客 1030

数据挖掘--决策树

In [9]no=0 # 决策树节点的编号column=0 # 该节点的属性entropy=0 # 交叉熵samples=0 # 该节点下的数据数目value=[] # 记录由该节点划分的不同类别的数据split=0 # 分类临界值clss=-1 # 该节点的分类branch_positive=None # 左分支branch_negative=None # 右分支本项目通过自行搭建决策树和使用sklearn提供的决策树进行实验,在Adult数据集的测试集上取得了一致的结果。

2301_81887304的博客 1577

【海量数据挖掘/数据分析】之 决策树模型(决策树模型、决策树构成、决策树常用算法、决策树性能要求、信息增益、信息增益计算公式、决策树信息增益计算实例)

【海量数据挖掘/数据分析】之 决策树模型(决策树模型、决策树构成、决策树常用算法、决策树性能要求、信息增益、信息增益计算公式、决策树信息增益计算实例) 一、决策树模型 1、常用算法 2、属性划分策略 3、其他算法 三、决策树算法性能要求 四、 决策树模型创建 ( 递归创建决策树 ) 1 、 决策树模型创建 2 、 决策树创建算法 ( 递归 ) 3 、 递归操作 4 、 递归停止的条件 五、 决策树 树根属性 选择 六、信息增益 说明 1、 熵 和 信息 的数据组成 2 、 信息增

仙魁XAN 1万+

决策树分类数据挖掘

※写在前面的思考: A数据是怎么分类的? B如何选择分类的属性? C什么时候停止分裂? ①决策树 1. 决策树分类方法 从数据中生成分类器的一个有效的方法就是生成一个决策树。是从一组无次序、无规则的事例中推理出决策树表示形式的分类规则。决策树分类方法采用自顶向下的递归形式(实质就是分而治之),在决策树的内部节点进行属性值的比较并根据不同的属性值判断从该结点向下的分支,在决策树的叶节点得到结论。所以...

cyx_chen的博客 3284

数据挖掘十大算法之分类算法(决策树模型)

数据挖掘十大算法之分类算法(决策树模型) 接上篇文章分类介绍及评价指标我们讨论了分类算法中,分类模型的选择是非常关键的一步,接下来我们分析常用的分类模型——决策树模型 在本文中没有举例,全部为概念,所有举例都在ID3算法的学习中 1. 决策树的概念 决策树是一种树形结构,决策树包含一系列规则,一般我们使用决策树将大型记录集分割为小记录集,通过每一次连续分割,结果集中的成员彼此变得越来越相似。 例如我们想用决策树来分类下面表中的数据,来分析什么样的人群会购买电脑: 那我们可以生成下图所示的决策树,可以看到,

fengxiandada的博客 3375

分类算法:决策树算法详解

决策树算法在分类任务中具有其独特的优势,尤其是在数据解释性和处理多种类型数据方面。然而,它也存在容易过拟合和不稳定等局限性。在实际应用中,根据数据特性和问题需求,决策树可以与其他算法结合使用,如随机森林,以提高模型的性能和稳定性。

kkchenjj的博客 2466

Android GWP-Asan机制详解

基本用途:GWP-ASan是一种原生内存分配器功能,在内存分配时额外记录一些信息,用于检测DOUBLE_FREE、USE_AFTER_FREE、INVALID_FREE、BUFFER_OVERFLOW、BUFFER_UNDERFLOW五种内存错误问题。

专注于系统快稳省领域 4145

数据挖掘 | 实验三 决策树分类算法

使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点对应的类别作为决策结果。1、通过本次实验加深了我对决策树原理的理解,本次实验使用了4种分类算法进行分类,习了决策树模型的构建过程,分类算法,预测方法,以及决策树的可视化、最后进行交叉验证。了解pydotplus、GraphViz等相关库中决策树可视化方法的接口,结合上述构建方法中参数的设置,分析每次构建的树的层数及叶子数目。3)分别查看训练集、测试集上模型的评估指标(准确率);

猫天意的博客 2923

AR1020触摸控制器驱动开发:嵌入式I²C/SPI底层集成指南

电容式触摸控制器是现代嵌入式人机交互(HMI)系统的核心感知单元,其工作原理基于寄生电容变化检测与数字信号处理。Microchip AR1020 作为典型单芯片方案,内置硬件滤波、多点跟踪与手势识别引擎,通过I²C或SPI接口输出结构化事件数据,显著降低主控MCU负载。该类器件的技术价值在于平衡精度、功耗与实时性,广泛应用于工业HMI、医疗设备及车载终端等对可靠性要求严苛的场景。本文聚焦AR1020的寄存器映射、中断驱动模型、坐标解析机制及在STM32平台的HAL/LL级工程实现,涵盖硬件时序约束、固件配置

weixin_29323977的博客 600

【数据挖掘】决策树算法简介 ( 决策树模型 | 模型示例 | 决策树算法性能要求 | 递归创建决策树 | 树根属性选择 )

I . 决策树模型 II . 决策树模型 示例 III . 决策树算法列举 IV . 决策树算法 示例 V . 决策树算法性能要求 VI . 决策树模型创建 ( 递归创建决策树 ) VII . 决策树 树根属性 选择

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 4489

【QEMU系统分析之TPM篇(一)】

本文以 QEMU 8.2.2 为例,分析其 TPM-emulator 模块的实现,并为 QEMU 添加 Windows 平台的TPM 模拟器的支持。

David唐辉的博客 1191

手把手教你用Arduino搭建惠斯通电桥:从原理到代码实现(附完整电路图)

本文详细介绍了如何利用Arduino搭建惠斯通电桥,从硬件选型、电路设计到代码实现和校准技巧,提供完整的电路图和实用代码示例。特别适合电子爱好者和创客学习高精度电阻测量技术,并扩展应用于应变片测量和温度监测等实际项目。

o4p5q6r7s的博客 401

数据挖掘算法-分类[KNN、决策树、贝叶斯]

X.数据挖掘算法-分类 基于距离的方法 基于决策树的方法 基于贝叶斯理论的方法 基于神经网络的方法 基于SVM的方法 1.基于距离的分类算法 1.1 算法伪代码 算法 基于距离的分类算法 输入:每个类的中心C1,…,Cm;待分类的元组t。 输出:输出类别c。 (1)dist=∞;//距离初始化 (2)FOR i:=1 to m DO (3) IF dis(ci,t)<d...

Jemary_的博客 3112

3DGS-to-PC实战指南:零代码实现3D高斯场景到点云/Mesh的高效转换

本文详细介绍了3DGS-to-PC工具如何实现3D高斯场景到点云/Mesh的高效转换,无需代码即可完成。通过实战案例和参数调优技巧,帮助用户快速掌握这一开源插件的使用方法,提升3D数据处理效率。特别适合建筑扫描、影视特效等领域的专业人士。

q1w3e5r7t9y的博客 273

机器学习算法-决策树模型及小案例

机器学习算法-决策树一、决策树算法原理1、定义2、原理二、决策树算法小案例1、数据挖掘流程2、根据流程实现决策树算法(1)读取数据(2)探索性数据分析(3)数据清洗(4)特征筛选(5)数据预处理(6)建模(7)模型评估 一、决策树算法原理 1、定义 决策树算法定义:决策树算法是一种非参数的决策算法,它根据数据的不同特征进行多层次的分类和判断,最终决策出所需要预测的结果。它既可以解决分类算法,也可以解决回归问题,具有很好的解释能力。 2、原理 (1)决策树原理图 (2)对于决策树的构建方法具有多种出发点,它具

AKlianwenlan的博客 2155

基于Simulink环境,提供一个关于如何对DC-DC变换器进行效率分析的仿真建模

效率定义:变换器效率通常定义为输出功率与输入功率之比,即 η=PoutPinη=Pin​Pout​​。重要性:高效率意味着更少的能量损失和更好的热管理,对于便携式设备、电动汽车等应用至关重要。挑战开关损耗:高频操作带来的开关器件损耗。导通损耗:电流流过电阻性元件(如MOSFET导通电阻)造成的能量损失。控制策略:优化控制算法以减少损耗。首先明确要模拟的任务内容。设计一个能够支持特定输入输出电压比的DC-DC变换器。根据工作频率和谐振元件值确定合适的电路参数。

xiaoheshang_123的博客 156

通信原理 | python调制识别数据及代码

数据集包含了从-20dB 到+18dB 总共 20 个信噪比(步长为 2)下的 11 种调制信号, 包括 AM-DSB、 AM-SSB 和 WBFM 三种模拟调制信号,以及 BPSK、 QPSK、 8PSK、 CPFSK、 GFSK、 PAM4、 QAM16 和 QAM64 八种数字调制信号。其中信号的中心频率为 200KHz,采样频率为 1Msamp/s,且每个信噪比下每种调制信号包含 1000 个信号。其中每个信号包含 IQ 两路数据,且每一路数据都包含有 128 个采样点。

若北辰 1758
上一篇: 数据挖掘系列(5)使用mahout做海量数据关联规则挖掘
下一篇: 数据挖掘系列(7)分类算法评价
youbo_sun
博客等级 码龄12年 20粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值