数据挖掘资料

https://blog.csdn.net/baimafujinji/article/details/53269040

在2006年12月召开的 IEEE 数据挖掘国际会议上(ICDM, International Conference on Data Mining),与会的各位专家选出了当时的十大数据挖掘算法( top 10 data mining algorithms ),可以参见文献【1】。本博客已经介绍过的位列十大算法之中的算法包括:

  • [1] k-means算法(http://blog.csdn.net/baimafujinji/article/details/50570824)
  • [2] 支持向量机SVM(http://blog.csdn.net/baimafujinji/article/details/49885481)
  • [3] EM算法(http://blog.csdn.net/baimafujinji/article/details/50626088)
  • [4] 朴素贝叶斯算法(http://blog.csdn.net/baimafujinji/article/details/50441927)
  • [5] kkNN算法(http://blog.csdn.net/baimafujinji/article/details/6496222)
  • [6] C4.5决策树算法(http://blog.csdn.net/baimafujinji/article/details/53239581)

决策树模型是一类算法的集合,在数据挖掘十大算法中,具体的决策树算法占有两席位置,即C4.5和CART算法。本文主要介绍分类回归树(CART,Classification And Regression Tree)也属于一种决策树,希望你在阅读本文之前已经了解前文已经介绍过之内容:

  • 《数据挖掘十大算法之决策树详解(1)》
  • 《数据挖掘十大算法之决策树详解(2)》

欢迎关注白马负金羁的博客 http://blog.csdn.net/baimafujinji,为保证公式、图表得以正确显示,强烈建议你从该地址上查看原版博文。本博客主要关注方向包括:数字图像处理、算法设计与分析、数据结构、机器学习、数据挖掘、统计分析方法、自然语言处理。


CART生成

CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支。这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布。

CART算法由以下两步组成:

  1. 决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;
  2. 决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时损失函数最小作为剪枝的标准。

CART决策树的生成就是递归地构建二叉决策树的过程。CART决策树既可以用于分类也可以用于回归。本文我们仅讨论用于分类的CART。对分类树而言,CART用Gini系数最小化准则来进行特征选择,生成二叉树。 CART生成算法如下:

输入:训练数据集DD,停止计算的条件: 
输出:CART决策树。

根据训练数据集,从根结点开始,递归地对每个结点进行以下操作,构建二叉决策树:

  1. 设结点的训练数据集为DD,计算现有特征对该数据集的Gini系数。此时,对每一个特征AA,对其可能取的每个值aa,根据样本点对A=aA=a的测试为“是”或 “否”将DD分割成D1D1和D2D2两部分,计算A=aA=a时的Gini系数。
  2. 在所有可能的特征AA以及它们所有可能的切分点aa中,选择Gini系数最小的特征及其对应的切分点作为最优特征与最优切分点。依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
  3. 对两个子结点递归地调用步骤l~2,直至满足停止条件。
  4. 生成CART决策树。

算法停止计算的条件是结点中的样本个数小于预定阈值,或样本集的Gini系数小于预定阈值(样本基本属于同一类),或者没有更多特征。


一个具体的例子

下面来看一个具体的例子。我们使用《数据挖掘十大算法之决策树详解(1)》中图4-6所示的数据集来作为示例,为了便于后面的叙述,我们将其再列出如下: 


 

 

首先对数据集非类标号属性{是否有房,婚姻状况,年收入}分别计算它们的Gini系数增益,取Gini系数增益值最大的属性作为决策树的根节点属性。根节点的Gini系数 

Gini()=1(310)2(710)2=0.42Gini(是否拖欠贷款)=1−(310)2−(710)2=0.42


当根据是否有房来进行划分时,Gini系数增益计算过程为 

 


 

 

Gini()=1(03)2(33)2=0Gini()=1(37)2(47)2=0.4898Gini(左子节点)=1−(03)2−(33)2=0Gini(右子节点)=1−(37)2−(47)2=0.4898

 

Δ{}=0.42710×0.4898310×0=0.077Δ{是否有房}=0.42−710×0.4898−310×0=0.077

 

若按婚姻状况属性来划分,属性婚姻状况有三个可能的取值{married,single,divorced},分别计算划分后的

  • {married} | {single,divorced}
  • {single} | {married,divorced}
  • {divorced} | {single,married}

的Gini系数增益。 
当分组为{married} | {single,divorced}时,SlSl表示婚姻状况取值为married的分组,SrSr表示婚姻状况取值为single或者divorced的分组 

Δ{}=0.42410×0610×[1(36)2(36)2]=0.12Δ{婚姻状况}=0.42−410×0−610×[1−(36)2−(36)2]=0.12


当分组为{single} | {married,divorced}时, 

Δ{}=0.42410×0.5610×[1(16)2(56)2]=0.053Δ{婚姻状况}=0.42−410×0.5−610×[1−(16)2−(56)2]=0.053


当分组为{divorced} | {single,married}时, 

Δ{}=0.42210×0.5810×[1(28)2(68)2]=0.02Δ{婚姻状况}=0.42−210×0.5−810×[1−(28)2−(68)2]=0.02


对比计算结果,根据婚姻状况属性来划分根节点时取Gini系数增益最大的分组作为划分结果,也就是{married} | {single,divorced}。

 

最后考虑年收入属性,我们发现它是一个连续的数值类型。我们在前面的文章里已经专门介绍过如何应对这种类型的数据划分了。对此还不是很清楚的朋友可以参考之前的文章,这里不再赘述。

对于年收入属性为数值型属性,首先需要对数据按升序排序,然后从小到大依次用相邻值的中间值作为分隔将样本划分为两组。例如当面对年收入为60和70这两个值时,我们算得其中间值为65。倘若以中间值65作为分割点。SlSl作为年收入小于65的样本,SrSr表示年收入大于等于65的样本,于是则得Gini系数增益为 

Δ()=0.42110×0910×[1(69)2(39)2]=0.02Δ(年收入)=0.42−110×0−910×[1−(69)2−(39)2]=0.02


其他值的计算同理可得,我们不再逐一给出计算过程,仅列出结果如下(最终我们取其中使得增益最大化的那个二分准则来作为构建二叉树的准则): 

 



注意,这与我们之前在《数据挖掘十大算法之决策树详解(1)》中得到的结果是一致的。最大化增益等价于最小化子女结点的不纯性度量(Gini系数)的加权平均值,之前的表里我们列出的是Gini系数的加权平均值,现在的表里给出的是Gini系数增益。现在我们希望最大化Gini系数的增益。根据计算知道,三个属性划分根节点的增益最大的有两个:年收入属性和婚姻状况,他们的增益都为0.12。此时,选取首先出现的属性作为第一次划分。

 

接下来,采用同样的方法,分别计算剩下属性,其中根节点的Gini系数为(此时是否拖欠贷款的各有3个records)

Gini()=1(36)2(36)2=0.5Gini(是否拖欠贷款)=1−(36)2−(36)2=0.5


与前面的计算过程类似,对于是否有房属性,可得 

Δ{}=0.546×[1(34)2(14)2]26×0=0.25Δ{是否有房}=0.5−46×[1−(34)2−(14)2]−26×0=0.25


对于年收入属性则有:

 

 


 

 

最后我们构建的CART如下图所示:

 


 

 

最后我们总结一下,CART和C4.5的主要区别:

  • C4.5采用信息增益率来作为分支特征的选择标准,而CART则采用Gini系数;
  • C4.5不一定是二叉树,但CART一定是二叉树。

关于过拟合以及剪枝

决策树很容易发生过拟合,也就是由于对train数据集适应得太好,反而在test数据集上表现得不好。这个时候我们要么是通过阈值控制终止条件避免树形结构分支过细,要么就是通过对已经形成的决策树进行剪枝来避免过拟合。另外一个克服过拟合的手段就是基于Bootstrap的思想建立随机森林(Random Forest)。关于剪枝的内容可以参考文献【2】以了解更多,如果有机会我也可能在后续的文章里讨论它。

 

转载于:https://www.cnblogs.com/Rubick7/p/8810644.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何进行个人知识管理和提高自己能力?

21世纪是一个知识爆炸的世纪,知识爆炸是指人类创造的知识,主要是自然科学知识,在短时期内以极高的速度增长起来。是人们对当前大量出现并飞速发展的各种知识现象所进行的夸张和描述。有人综合计算,全世界的知识总量,七到十年翻一番。这就是风行全球的摩登名词的意思…

redis服务器端和客户端启动

服务器端 sudo redis-server /etc/redis/redis.conf 指定加载的配置文件 ps -ef|grep redis 查看redis服务器进程 sudo kill -9 pid 杀死redis服务器 连接特定IP的redis:

超级丑数

题目: 写一个程序来找第 n 个超级丑数。超级丑数的定义是正整数并且所有的质数因子都在所给定的一个大小为 k 的质数集合内。比如给你 4 个质数的集合 [2, 7, 13, 19], 那么 [1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] 是前 12 个超级丑数。注意事项:…

为什么要进行个人知识管理(PKM)

21世纪是一个知识爆炸的世纪,知识爆炸是指人类创造的知识,主要是自然科学知识,在短时期内以极高的速度增长起来。是人们对当前大量出现并飞速发展的各种知识现象所进行的夸张和描述。有人综合计算,全世界的知识总量,七到十年翻一番。这就是风行全球的摩登名词的意思…

NFC读卡------ci522

1、NFC及卡片 NFC是近距离无线通讯技术,是一种非接触式识别和互联技术,可以在移动设备、消费类电子产品、PC和智能控件工具间进行近距离无线通信。NFC提供了一种简单、触控式的解决方案,可以让消费者简单直观地交换信息、访问内容与服务。 …

mysql 索引效果是否叠加_MySQL基础实用知识集合(二)

上期小编给大家汇总介绍了mysql的6个基础的知识点,下面继续给大家分享一下另外7个知识点:7、什么是死锁?怎么解决?死锁:两个或多个事务相互占用了对方的锁,就会一直处于等待的状态。常见的解决死锁的方法:(…

IP协议

IP协议只负责传送IP数据包,无法监视和控制网络中出现的一些问题,这些工作由Internet的控制协议来完成IP是T C P / I P协议族中最为核心的协议。所有的T C P、U D P、I C M P及I G M P数据都以I P数据报格式传输。它的特点如下:不可靠(u n r e…

gitlab修改用户密码_CRM用户模块(用户密码修改)

四 密码修改1 需求分析修改当前登陆用户的登陆密码2 页面原型3 流程图 4 编写ControllerResponseBodyRequestMapping("updatePwd")public MessageModel updatePwd(HttpServletRequest request, String oldPassword, String newPassword, String confirmPassword){Mes…

third day- 01--文件操作

1 1、请分别介绍文件操作中不同的打开方式之间的区别:2 3 模式 含义4 r 文本只读模式5 rb 二进制模式  #这种方法,是用来传输或存储,不给人看的。6 r r 是读写模式,只要沾上r,文件必须存在7 rb …

微信小程序中form 表单提交和取值实例详解

2019独角兽企业重金招聘Python工程师标准>>> 我们知道&#xff0c;如果我们直接给 input 添加 bindinput&#xff0c;比如&#xff1a;<input bindinput"onUsernameInput" />&#xff0c;那么可以在 onUsernameInput 中直接使用 e.detail.value&…

matlab如何用代码导入文件_20+行Matlab代码实现文件扫描

最近刚好看到一篇回答&#xff0c;用阈值二值化处理图片水印&#xff0c;受到启发写此代码。阈值二值化适合处理只有黑白两色的图片&#xff0c;考虑到文件盖章&#xff0c;这里作者使用像素颜色替换及灰度值处理图片&#xff0c;进一步提高处理精度和能力。我们需要&#xff1…

启动django服务器报错raise errorclass(errno, errval) django.db.utils.InternalError

问题描述&#xff1a; 启动django服务器python manage.py runserver报错: raise errorclass(errno, errval) django.db.utils.InternalError: (1366, “Incorrect string value: ‘\xE7\x94\xA8\xE6\x88\xB7’ for column ‘name’ at row 1”) 原因&#xff1a;与mysql数据库…

java单例模式之线程安全问题

单例的目的是为了保证运行时Singleton类只有唯一的一个实例&#xff0c;用于一些较大开销的操作。 饿汉式&#xff08;没有线程安全问题&#xff09;: ‘ 由于使用static关键字进行了修饰&#xff0c;只能获取到一个对象&#xff0c;从而达到了单例&#xff0c;并且在Singleton…

448. Find All Numbers Disappeared in an Array 寻找有界数组[1,n]中的缺失数

&#xff3b;抄题&#xff3d;&#xff1a; Given an array of integers where 1 ≤ a[i] ≤ n (n size of array), some elements appear twice and others appear once. Find all the elements of [1, n] inclusive that do not appear in this array. Could you do it with…

Linux基本命令+Makefile

1.linux下查看进程占用cpu的情况(top)&#xff1b; 格式 top [&#xff0d;] [d delay] [q] [c] [S] [s] [i] [n] 主要参数 d&#xff1a;指定更新的间隔&#xff0c;以秒计算。q&#xff1a;没有任何延迟的更新。如果使用者有超级用户&#xff0c;则top命令将会以最高的优先…

mysql语法题_mysql数据库题语法练习

一、练习。导入下面sql执行语句/*数据导入&#xff1a;Navicat Premium Data TransferSource Server : localhostSource Server Type : MySQLSource Server Version : 50624Source Host : localhostSource Database : sqlexamTarget Server Type : MySQLTarget Server Version …

OpenGL开发库的详细介绍

OpenGL开发库的组成 开发基于OpenGL的应用程序&#xff0c;必须先了解OpenGL的库函数。它采用C语言风格&#xff0c;提供大量的函数来进行图形的处理和显示。OpenGL库函数的命名方式非常有规律。所有OpenGL函数采用了以下格式<库前缀><根命令><可选的参数个数&g…

thinkphp5运行原理_ThinkPHP5.1~5.2全版本远程代码执行高危漏洞预警

漏洞综述关于ThinkPHPThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架&#xff0c;其借鉴了国外很多优秀的框架和模式&#xff0c;包括使用面向对象的开发结构和MVC模式&#xff0c;融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式等。该框架常…

ASP.NET MVC中controller和view相互传值的方式

ASP.NET MVC中Controller向view传值的方式&#xff1a; ViewBag、ViewData、TempData单个值的传递Json匿名类型ExpandoObjectCookieViewModel(向普通View页面传个Model对象、向强类型页面传一个Model对象、用一个ViewModel对象解决所有问题)ASP.NET MVC中view向Controller传值的…