机器学习&&数据挖掘之一:决策树基础认识
决策树入门篇
前言:分类是数据挖掘中的主要分析手段,其任务就是对数据集进行学习并构造一个拥有预测功能的分类模型,用于预测未知样本的类标号,把类标号未知的样本按照某一规则映射到预先给定的类标号中。
分类模型学习方法其中一类就是基于决策树的学习方法,下面,简单总结一下决策树的基础知识和构造决策树的两种算法:ID3、C4.5。
关键词:决策树、ID3、C4.5、信息熵、信息增益、分裂信息、信息增益率
正文
决策树分类的方法的特点是对训练样本集进行训练,生成一颗二叉或多叉的决策树。
ID3算法:使用信息增益作为属性选择标准。首先检测并计算所有的属性,然后选择信息增益最大的属性作为决策树节点,由该属性的不同取值建立分支,再对各分支的子集采取相同的信息增益计算方法后继续选择信息增益大的属性作为节点。一直递归调用下去,直到所有子集仅包含一个类别的数据为止,最后就得到了一颗决策树。
熵(Entropy,信息熵)的计算方法:假定S为训练集,S的目标属性C有m个可能的类标号值,C={C1,C2,C3…Cm},每个类标号值相应的概率为p1,p2,p3…pm。那么训练集S的信息熵定义为:Entropy(S)=Entropy(p1,p2,,pm)=-(p1*log2(p1)+p2*log2(p2)+pm*log2(pm));
信息增益:假设训练集为S,并用属性A来划分S,那么属性A的信息增益Gain(S,A)为训练集S的熵减去按属性A划分S后的子集的熵,即Gain(S,A)=Entropy(S)-Entropy_A(S)。
优缺点分析:ID3算法采用一种自顶向下、贪婪的搜索方法,理论清晰,方法简单,学习能力较强,但是ID3算法只能处理分类型数据,无法处理连续性数据。该算法使用信息增益作为决策树属性节点的选择标准,由于信息增益在类别值多的属性上大于类别值少的属性的计算结果,这将导致决策树偏向于选择类别值多的属性。
C4.5算法:基于ID3算法的不足而改进的决策树分类算法。
如果属性A为离散型数据:计算方法和ID3相同。
如果属性A为连续型数据:则对属性A的取值排序,将每两个相邻值的中点看做分裂点,然后对每个分裂点计算Sl和Sr(Sl和Sr分别对应于属性A的取值对该分裂点进行划分开的两部分子集,即Sl为属性A取值中比该分裂点小的值的个数,Sr亦如此),然后计算该分裂点的熵Entropy_A(S)=abs(Sl)/abs(S)Entropy(Sl)+abs(Sr)/abs(S)Entro
py(Sr),选择Entropy_A(S)值最小的分裂点作为属性A的最佳分裂点,并以此分裂点按属性A划分S的熵值作为属性A划分S的熵值。
分裂信息SplitE(A)=-(S1/S*log2(S1/S)+S2/S*log2(S2/S)……Sk/S*log2
(Sk/S)
对有缺失数据的处理:以某种方式填充缺失的数据(如平均值,常见值,赋予概率等等)
信息增益率定义为GainRatio(A)=Gain(A)/SplitE(A)。
优缺点分析:C4.5算法能够处理离散型数据和连续型数据以及有缺失值的数据,使用信息增益率来作为决策树的属性选择标准,对生成的决策树进行剪枝处理;在构造树的过程中,需要对数据集进行多次扫描和排序,因此算法相对而言不是很高效,并且C4.5算法对大规模数据集的处理不是很理想。
机器学习&&数据挖掘之一:决策树基础认识的更多相关文章
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱(转)
原文:http://www.52nlp.cn/python-网页爬虫-文本处理-科学计算-机器学习-数据挖掘 曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然开 ...
- 常用的机器学习&数据挖掘知识点【转】
转自: [基础]常用的机器学习&数据挖掘知识点 Basis(基础): MSE(Mean Square Error 均方误差),LMS(LeastMean Square 最小均方),LSM(Le ...
- [resource-]Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
reference: http://www.52nlp.cn/python-%e7%bd%91%e9%a1%b5%e7%88%ac%e8%99%ab-%e6%96%87%e6%9c%ac%e5%a4% ...
- 【Python】Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
本文转载自:https://www.cnblogs.com/colipso/p/4284510.html 好文 mark http://www.52nlp.cn/python-%E7%BD%91%E9 ...
- 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考 ...
- 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...
- [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...
- 常见的机器学习&数据挖掘知识点
原文:http://blog.csdn.net/heyongluoyao8/article/details/47840255 常见的机器学习&数据挖掘知识点 转载请说明出处 Basis(基础) ...
- 2018-02-03-PY3下经典数据集iris的机器学习算法举例-零基础
---layout: posttitle: 2018-02-03-PY3下经典数据集iris的机器学习算法举例-零基础key: 20180203tags: 机器学习 ML IRIS python3mo ...
- Python数据挖掘之决策树DTC数据分析及鸢尾数据集分析
Python数据挖掘之决策树DTC数据分析及鸢尾数据集分析 今天主要讲述的内容是关于决策树的知识,主要包括以下内容:1.分类及决策树算法介绍2.鸢尾花卉数据集介绍3.决策树实现鸢尾数据集分析.希望这篇 ...
随机推荐
- 全排列 (codevs 1294)题解
[题目描述] 给出一个n, 请输出n的所有全排列(按字典序输出). [样例输入] 3 [样例输出] 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 [解题思路] 听说C++有作 ...
- python 数据类型(sequence 序列、dictionary 词典、动态类型)
文章内容摘自:http://www.cnblogs.com/vamei 1.sequence 序列 sequence(序列)是一组有顺序的元素的集合 (严格的说,是对象的集合,但鉴于我们还没有引入“对 ...
- Python核心编程--学习笔记--2--Python起步(上)
本章是对Python的主要特性做一个快速介绍. 1 介绍 交互执行时,解释器有两种提示符: 主提示符(>>>):解释器在等待输入下一个语句: 次提示符(...):解释器在等待输入当前 ...
- sftp
SFTP 为 SSH的一部分,是一种传输档案至 Blogger 伺服器的安全方式.其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文 ...
- oh-my-zsh配置你的zsh提高shell逼格终极选择
抱歉,这篇博文推迟发布了,人都是有惰性的...看在这个牛逼闪闪的标题就原谅我吧! 为何这篇文章要归类到 mac 下? 第一个问题,稍后我们说明下. zsh是个什么东东? 第二个问题... 你应该稍微接 ...
- Android WIFI 启动流程
参考:http://blog.chinaunix.net/uid-26215986-id-3260413.html 一. WIFI 工作步骤 1. Wifi模块初始化 2. Wifi启动 3. 查找热 ...
- Android--监听ListView滚动到最底部
监听ListView滚动到最底部使用 onScrollStateChanged(AbsListView view, int scrollState) 方法,代码大致如下: // 监听listview滚 ...
- jdk 1.6 & 1.7新特性
jdk1.6新特性 1.Desktop类和SystemTray类 2.使用JAXB2来实现对象与XML之间的映射 3.StAX 4.使用Compiler API 5.轻量级Http Server AP ...
- JavaScript高级程序设计之原型对象
构造函数.原型对象.构造器是一体的关系,同时产生: 实例中的隐藏属性__proto__指向原型对象: 原型对象是这四种关系的纽带. 原型对象是动态的,不论在何处变化,实例中可以立即体现出来. var ...
- android 的生命周期自我理解
android的active的生命周期,经过网站的blog学习,加上自己的理解总结如下: 第1种:全新的启动应用程序顺序 onCreate--->onStart---->onResume ...