ID3选择属性的依据是信息增益:

![Information Gain][equtation]

[equtation]: http://latex.codecogs.com/svg.latex?g_r(D,A)=H(D)-H(D|A)

ID3算法在选择根节点和内部节点中的分支属性时,采用信息增益作为评价标准。信息增益的缺点是倾向于选择取值较多的属性,在有些情况下这类属性可能不会提供太多有价值的信息。因此我们发展了C4.5乃至之后的C5.0算法。

C4.5算法

C4.5算法主要做出了以下方面的改进:

1.可以处理连续数值型属性

对于离散值,C4.5和ID3的处理方法相同,对于某个属性的值连续时,假设这这个节点上的数据集合样本为total,C4.5算法进行如下处理:

将样本数据该属性A上的具体数值按照升序排列,得到属性序列至{A1,A2,A3,...,Atotal};

在上一步生成的序列值中生成total-1个分割点。第i个分割点的取值为Ai和Ai+1的均值,每个分割点都将属性序列划分为两个子集。

计算每个分割点的信息增益(Information Gain),得到total-1个信息增益。

对分裂点的信息增益进行修正:减去log2(N-1)/|D|,其中N为可能的分裂点个数,D为数据集合大小。

选择修正后的信息增益值最大的分类点作为该属性的最佳分类点。

计算最佳分裂点的信息增益率(Gain Ratio)作为该属性的Gain Ratio。

选择Gain Ratio最大的属性作为分类属性。

![Gain Ratio][equtation2]

[equtation2]: http://latex.codecogs.com/svg.latex?g_R(D,A)=\frac{g_r(D,A)}{H_A(D)}=\frac{H(D)-H(D|A)}{H_A(D)}

2.用信息增益率(Information Gain Ratio)来选择属性

克服了用信息增益来选择属性时偏向选择值多的属性的不足。

![Gain Ratio][equtation2]

3.后剪枝策略

决策树很容易产生过拟合,剪枝能够避免树高度无限制增长,避免过度拟合数据。在上一节内容中,我们通过限制决策树的最大深度,这本质是一种预剪枝。

后剪枝相对来说更难一些,是通过一个剪枝系数来实现的,这里暂不论述。

**4.缺失值处理 **

对于某些采样数据,可能会缺少属性值。在这种情况下,处理缺少属性值的通常做法是赋予该属性的常见值,或者属性均值。另外一种比较好的方法是为该属性的每个可能值赋予一个概率,即将该属性以概率形式赋值。例如给定Boolean属性B,已知采样数据有12个B=0和88个B=1实例,那么在赋值过程中,B属性的缺失值被赋值为B(0)=0.12、B(1)=0.88;所以属性B的缺失值以12%概率被分到False的分支,以88%概率被分到True的分支。这种处理的目的是计算信息增益,使得这种属性值缺失的样本也能处理。

5.C4.5的缺点

算法低效,在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效

内存受限,适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时程序无法运行。

C4.5的伪代码

Function C4.5(R:包含连续属性的无类别属性集合,C:类别属性,S:训练集)

Begin

If S为空,返回一个值为Failure的单个节点;

If S是由相同类别属性值的记录组成,

返回一个带有该值的单个节点;

If R为空,则返回一个单节点,其值为在S的记录中找出的频率最高的类别属性值;

[注意未出现错误则意味着是不适合分类的记录];

For 所有的属性R(Ri) Do

If 属性Ri为连续属性,则

Begin

sort(Ri属性值)

将Ri的最小值赋给A1:

将Ri的最大值赋给Am;

For j From 1 To m-1 Do Aj=(A1+Aj+1)/2;

将Ri点的基于Aj(1<=j<=m-1划分的最大信息增益属性(Ri,S)赋给A;

End;

将R中属性之间具有最大信息增益的属性(D,S)赋给D;

将属性D的值赋给{dj/j=1,2...m};

将分别由对应于D的值为dj的记录组成的S的子集赋给{sj/j=1,2...m};

返回一棵树,其根标记为D;树枝标记为d1,d2...dm;

再分别构造以下树:

C4.5(R-{D},C,S1),C4.5(R-{D},C,S2)...C4.5(R-{D},C,Sm);

End C4.5

CART算法

CART算法的重要基础包含以下三个方面:

二分(Binary Split):在每次判断过程中,都是对观察变量进行二分。

CART算法采用一种二分递归分割的技术,算法总是将当前样本集分割为两个子样本集,使得生成的决策树的每个非叶结点都只有两个分枝。因此CART算法生成的决策树是结构简洁的二叉树。因此CART算法适用于样本特征的取值为是或非的场景,对于连续特征的处理则与C4.5算法相似。

单变量分割(Split Based on One Variable):每次最优划分都是针对单个变量。

剪枝策略:CART算法的关键点,也是整个Tree-Based算法的关键步骤。

剪枝过程特别重要,所以在最优决策树生成过程中占有重要地位。有研究表明,剪枝过程的重要性要比树生成过程更为重要,对于不同的划分标准生成的最大树(Maximum Tree),在剪枝之后都能够保留最重要的属性划分,差别不大。反而是剪枝方法对于最优树的生成更为关键。

CART的基础是基尼系数(gini,并非经济学中的基尼系数):

![观察第一个等式,对比信息熵公式,我们把log(1/p_k)换成了(1-p_k)可以认为对log(1/p_k)在x_0=1处的泰勒展开,只取前两项后的结果。这种处理实际上减轻了运算压力。][equtation3]

[equtation3]: http://latex.codecogs.com/svg.latex?Gini(p)=\sum_{k=1}{K}p_k(1-p_k)=1-\sum_{k=1}{K}p_k2=1-\sum_{k=1}{K}(\frac{\left|C_k\right|}{D})^2

GINI指数主要是度量数据划分或训练数据集D的不纯度为主。GINI值越小,表明样本的纯净度越高(即该样本只属于同一类的概率越高)。

衡量出数据集某个特征所有取值的Gini指数后,就可以得到该特征的Gini Split info,也就是GiniGain。

Gini Gain

不考虑剪枝情况下,分类决策树递归创建过程中就是每次选择GiniGain最小的节点做分叉点,直至子数据集都属于同一类或者所有特征用光。

CART的核心在于剪枝,我们日后再讨论这个问题。在最后一节,我们将会介绍随机森林的概念和简单的实践。

c4.5决策树算法 c语言,决策树(三):C4.5算法和CART算法相关推荐

  1. 决策树决策算法ID3算法、改进算法C4.5算法和CART算法代码实现

    决策树决策算法之ID3算法 ID3算法 在决策树各个节点上应用信息增益准则选择特征,每一次都选择是的信息增益最大的特征进行分裂,递归的构建决策树 具体计算可以参考 决策常用算法数学计算过程 ID3代码 ...

  2. 决策树算法介绍(ID3算法和CART算法)

    文章目录 一.ID3算法 二.CART算法 一.ID3算法 信息熵:加入当前样本集D中第K类样本所占的比例为Pk(k=1,2-|K|),K为类别的总数(对于二元分类来说,K=2),则样本集的信息熵为: ...

  3. matlab粗集系统评估wine,C4.5 决策树算法对UCI wine数据集分类的实现(MATLAB)

    一.功能实现与样本分析 在数据挖掘领域,能够利用相应的算法对数据集进行训练,即对样本的特征进行分析,从而概括出相同类别的样本之间存在的内在特征联系,进一步对未知类别的样本进行预测,判断出该样本所属的类 ...

  4. C4.5 决策树算法对UCI wine数据集分类的实现(MATLAB)

    1.功能实现与样本分析 在数据挖掘领域,可以利用相应的算法对数据集进行训练,即对样本的特征进行分析,从而归纳出相同类别的样本之间存在的内在特征联系,进一步对未知类别的样本进行预测,判断出该样本所属的类 ...

  5. 决策树C4.5算法 c语言实现,数据挖掘十大经典算法(1) C4.5_决策树算法

    数据挖掘十大经典算法(1) C4.5_决策树算法 机器学习中,决策树是一个预测模型:他代表的是对象属性与对象值之间的一种映射关系.树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每 ...

  6. 决策树算法原理以及决策树规则生成方法

    决策树算法原理以及决策树规则生成方法 决策树是一种可解释性较强的策略分析工具.creditmodel提供了分类回归树和条件推断树两种决策树生成和提取规则的方法. 每一个风险管理人员都应该掌握使用决策树 ...

  7. 决策树算法和CART决策树算法详细介绍及其原理详解

    相关文章 K近邻算法和KD树详细介绍及其原理详解 朴素贝叶斯算法和拉普拉斯平滑详细介绍及其原理详解 决策树算法和CART决策树算法详细介绍及其原理详解 线性回归算法和逻辑斯谛回归算法详细介绍及其原理详 ...

  8. Algorithm:C++语言实现之字符串相关算法(字符串的循环左移、字符串的全排列、带有同个字符的全排列、串匹配问题的BF算法和KMP算法)

    Algorithm:C++语言实现之字符串相关算法(字符串的循环左移.字符串的全排列.带有同个字符的全排列.串匹配问题的BF算法和KMP算法) 目录 一.字符串的算法 1.字符串的循环左移 2.字符串 ...

  9. c4.5决策树算法python_Python3实现机器学习经典算法(四)C4.5决策树

    一.C4.5决策树概述 C4.5决策树是ID3决策树的改进算法,它解决了ID3决策树无法处理连续型数据的问题以及ID3决策树在使用信息增益划分数据集的时候倾向于选择属性分支更多的属性的问题.它的大部分 ...

最新文章

  1. Go语言写的解析器(支持json,linq,sql,net,http等)
  2. SyntaxError: invalid syntax的问题原因和解决办法
  3. C/C++动态二维数组的内存分配和释放
  4. universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法
  5. 在创建的Silverlight Control中使用图片
  6. Docker入门-docker compose的使用
  7. Linux直接与编译安装Vsftpd服务器
  8. AirFlow常见问题汇总
  9. 康奈尔大学计算机科学人工智能,美国康奈尔大学工程学院申请之计算机科学
  10. Springboot毕设项目餐厅后勤管理系统cxjgl(java+VUE+Mybatis+Maven+Mysql)
  11. Map转换List一些方法
  12. 10步(**10 step**)天才思维模型
  13. 十年老撕鸡分享,五分钟搭建个人轻论坛
  14. OSPF之链路状态数据库LSDB
  15. 涨价、盈利、IPO?共享充电宝没你想象得好过!
  16. 淘宝天猫整店店铺商品API,店铺商品分类接口代码教程
  17. i5-10200h怎么样
  18. ABP 扩展 OrganizationUnit 数据实体(新增字段)
  19. 2022-2027年中国微光器件行业市场调查研究及投资战略研究报告
  20. MPC5744-PIT

热门文章

  1. 通过连接大华dss平台来实现查看摄像头画面和实现云台控制功能Extjs
  2. \\ip 映射 指定的网络名不再可用
  3. 怎么在windows桌面添加便签
  4. 二叉树非递归遍历(模版)
  5. < meter >标签 定义度量衡
  6. 打开图片链接直接打开QQ对话框
  7. 【Oracle】 sql 中的字符(串)替换与转换
  8. 关于联想笔记本常见问题心得
  9. ThreadLocal面试题
  10. 【Android】【IDE】解决android-studio或IntelliJ-IDEA搜索不到文件内容的问题