ID3/C4.5决策树

循循善诱
• 阅读 1676

决策树的学习过程通常包括3个步骤:1.特征选择 2.决策树生成 3.决策树剪枝

决策树生成算法:

  • 构建根结点:将所有训练数据放在根结点。
  • 选择一个最优特征,根据这个特征将训练数据分割成子集,使得各个子集有一个在当前条件下最好的分类。

    若这些子集已能够被基本正确分类,则将该子集构成叶结点。
    若某个子集不能够被基本正确分类,则对该子集选择新的最优的特征,继续对该子集进行分割,构建相应的结点。
  • 如此递归下去,直至所有训练数据子集都被基本正确分类,或者没有合适的特征为止。

决策树剪枝算法

上述生成的决策树可能对训练数据有很好的分类能力,但是对于未知的测试数据却未必有很好要的分类能力,即可能发生过拟合的现象。

  • 解决的方法是:对生成的决策树进行剪枝,从而使得决策树具有更好的泛化能力。
  • 剪枝是去掉过于细分的叶结点,使得该叶结点中的子集回退到父结点或更高层次的结点并让其成为叶结点

决策树的生成对应着模型的局部最优,决策树的剪枝则考虑全局最优。

特征选择

本文主要介绍信息增益(ID3)特征选择方法和信息增益比(C4.5)特征选择方法
首先引入熵的概念。熵(Entropy)最初是一个物理学概念,后来在数学中用来描述“一个系统的混乱程度”,因此一个系统的信息熵越高就越无序,信息熵越低就越有序,信息熵越高,使其有序所要消耗的信息量就越大。
假设变量$$X=\left\{x_{1}, x_{2} \ldots x_{i} \ldots x_{n}\right\}$$
其中每个元素对应的概率(比例)为

$$ P=\left\{p_{1}, p_{2} \ldots p_{i} \ldots p_{n}\right\} $$

则对应熵的计算公式如下:

$$ E(X)=-\sum_{i=1}^{n} p_{i} \log _{2}\left(p_{i}\right) $$

1.信息增益

特征A对训练数据集S的信息增益(Info-Gain)定义为:集合S的经验熵E(S)于关于特征A经验条件熵E(A)之差:

$$ I \operatorname{Gain}(S, A)=E(S)-E(A) $$

$$ E(A)=\sum_{v \in \text { value }(A)} \frac{\operatorname{num}\left(S_{v}\right)}{\operatorname{num}(S)} E\left(S_{v}\right) $$

例子:
ID3/C4.5决策树
在这个例子中,最后一列指是否出去玩,这里作为我们所要预测的标记值(label),而前四列就是我们需要借助的数据,每一列都是一个特征(feature)。
初始状态下,label列总共为14行,有9个yes和5个no,所以label列初始信息熵为:

$$ E(S)=-\frac{9}{14} \log _{2}\left(\frac{9}{14}\right)-\frac{5}{14} \log _{2}\left(\frac{5}{14}\right) $$

假设我们先划分outlook这一列,分成sunny、rain、overcast三类,数量分别为5:5:4,考虑到每个类别下对应的label不同,可以计算出划分后的信息熵:

$$ E(A)=\frac{5}{14} E\left(S_{1}\right)+\frac{5}{14} E\left(S_{2}\right)+\frac{4}{14} E\left(S_{3}\right) $$

其中E(S1)、E(S2)、E(S3)分别为每个类别下对应的label列的熵。
在ID3算法中,信息增益(Info-Gain)越大,划分越好,决策树算法本质上就是要找出每一列的最佳划分以及不同列划分的先后顺序及排布。

2.信息增益比

根据前文的例子,Info-Gain在面对类别较少的离散数据时效果较好,上例中的outlook、temperature等数据都是离散数据,而且每个类别都有一定数量的样本,这种情况下使用ID3与C4.5的区别并不大。但如果面对连续的数据(如体重、身高、年龄、距离等),或者每列数据没有明显的类别之分(最极端的例子的该列所有数据都独一无二),在这种情况下,我们分析信息增益(Info-Gain)的效果:
E(S)为初始label列的熵,并未发生变化,则IGain(S,A)的大小取决于E(A)的大小,E(A)越小,IGain(S,A)越大,而根据前文例子,若某一列数据没有重复,ID3算法倾向于把每个数据自成一类,此时E(A)=0, 这样E(A)为最小,IGain(S,A)最大,程序会倾向于选择这种划分,这样划分效果极差,特征A不具有任何的分类能力。
为了解决这个问题,引入了信息增益率(Gain-ratio)的概念,其定义为信息增益IGain(S,A)于关于特征A的熵Info的比值,计算方式如下:

$$ \text { Gain-ratio }=\frac{I \operatorname{Gain}(S, A)}{\operatorname{Info}} $$

$$ \text { Info }=-\sum_{v \in \text { value }(A)} \frac{\operatorname{num}\left(S_{v}\right)}{\operatorname{num}(S)} \log _{2} \frac{\operatorname{num}\left(S_{v}\right)}{\operatorname{num}(S)} $$

如上面的例子,对特征outlook的Info:

$$ \text{Info}=-\frac{5}{14} \log _{2}\left(\frac{5}{14}\right)-\frac{5}{14} \log _{2}\left(\frac{5}{14}\right)-\frac{4}{14} \log _{2}\left(\frac{4}{14}\right) $$

Info表征了特征A对训练集S的拆分能力。
信息增益比本质上是对信息增益乘以一个加权系数:

  • 当特征A的取值集合较大时,加权系数较小,表示抑制该特征。
  • 当特征A的取值集合较小时,加权系数较大,表示鼓励该特征。
点赞
收藏
评论区
推荐文章
大数据
课程安排 一、大数据概述 二、大数据处理架构Hadoop 三、分布式文件系统HDFS 四、分布式数据库HBase 五、MapReduce 六、Spark 七、IPythonNotebook运行PythonSpark程序 八、PythonSpark集成开发环境 九、PythonSpark决策树二分类与多分类 十、PythonSpark支持向量机 十一
Stella981 Stella981
3年前
Python算法之决策树利器——Graphviz
解密思想和方法,谁都会写程序!!(https://oscimg.oschina.net/oscnet/d138dbc753d10e682a48ce9b129284e088b.gif)!(https://oscimg.oschina.net/oscnet/466e1fdae130f31f5d9a1806e7e207907
Wesley13 Wesley13
3年前
MesaTEE GBDT
!(https://static.oschina.net/uploads/space/2020/0702/190947_Fixv_4501957.jpg)GBDT(GradientBoostingDecisionTree,梯度提升决策树)是工业界广泛应用的机器学习算法,而XGBoost则是著名华人学者陈天奇发起并被工业界广泛应用的开源GBDT工
Stella981 Stella981
3年前
LightGBM 算法原理
LightGBM的动机GBDT(GradientBoostingDecisionTree)是机器学习中一个长盛不衰的模型,其主要思想是利用弱分类器(决策树)迭代训练以得到最优模型,该模型具有训练效果好、不易过拟合等优点。GBDT在工业界应用广泛,通常被用于点击率预测,搜索排序等任务而GBDT在每一次迭代的时
Wesley13 Wesley13
3年前
KNN分类算法原理分析及代码实现
1、分类与聚类的概念与区别分类:是从一组已知的训练样本中发现分类模型,并且使用这个分类模型来预测待分类样本。目前常用的分类算法主要有:朴素贝叶斯分类算法(NaïveBayes)、支持向量机分类算法(SupportVectorMachines)、KNN最近邻算法(kNearestNeighbors)、神经网络算法(NNet)以及决策树(De
Stella981 Stella981
3年前
Spark OneHotEncoder
1、概念独热编码(OneHotEncoding) 将表示为标签索引的分类特征映射到二进制向量,该向量最多具有一个单一的单值,该单值表示所有特征值集合中特定特征值的存在。此编码允许期望连续特征(例如逻辑回归)的算法使用分类特征。对于字符串类型的输入数据,通常首先使用StringIndexer
Stella981 Stella981
3年前
GPU上的随机森林:比Apache Spark快2000倍
作者|AaronRichter编译|VK来源|TowardsDataScience随机森林是一种机器学习算法,以其鲁棒性、准确性和可扩展性而受到许多数据科学家的信赖。该算法通过bootstrap聚合训练出多棵决策树,然后通过集成对输出进行预测。由于其集成特征的特点,随机森林是一种可以在分布式计算环境中实现的算法。树可以在集群中跨进程和机器并
Wesley13 Wesley13
3年前
巧用决策树消灭 if
前言最近公司在搞技术创新,老板把一群程序员拉到山上,锁在酒店会议室里憋了一晚总结出来几条意见,其中之一就是之所以每次产品改需求我们都会苦哈哈的加班写bug,主要不是因为产品今天提的需求,昨天就该上线,而是因为我们没有一种无需硬编码就能修改系统逻辑的方法。大家一致同意改变命运的关键在于开发一个可视化的规则编辑和执行引擎。我一听这不就是我N年前搞过的决
大数据——决策树(decision tree)
大数据————决策树(decisiontree)决策树(decisiontree):是一种基本的分类与回归方法,主要讨论分类的决策树。在分类问题中,表示基于特征对实例进行分类的过程,可以认为是ifthen的集合,也可以认为是定义在特征空间
递归解析Json,实现生成可视化Tree+快速获取JsonPath | 京东云技术团队
内部平台的一个小功能点的实现过程,分享给大家:递归解析Json,可以实现生成可视化Tree快速获取JsonPath。步骤:1.利用JsonPath读取根,获取JsonObject2.递归层次遍历JsonObjec,保存结点信息3.利用zTree展示结点为