代码部分以及资料来源: https://blog.csdn.net/chenxiqilin/article/details/50395809
定义
分类树(决策树)是一种十分常用的分类方法。他是一种监管学习,所谓监管学习就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分类器,这个分类器能够对新出现的对象给出正确的分类。这样的机器学习就被称之为监督学习。
决策树学习通常包括3个步骤:特征选择,决策树的生成和决策树的修剪。这些决策树学习的思想主要来源于由Quinlan在1986年提出的ID3算法和1993年提出的C4.5算法,以及由Breiman等人在1984年提出的CART算法。
今天主要记录ID3与c4.5算法。
假设有以下8组数据,希望通过决策树计算一个算法模型,判断新进入的一组数据(例如:身高:183,喉结:有)判断性别(男\女)

首先,我们需要熟悉信息论中熵的概念。熵度量了事物的不确定性,越不确定的事物,它的熵就越大。具体的,随机变量X的熵的表达式如下:
熵的算法:

id3算法

熵(H(X)) :累加所有的 " -pi * (log*pi)" , log 以2为底。
先算出总的熵,既未分类时的熵(5女3男), 5/8 * log(5/8) -3/8 * log(3/8) = 0.42375 - (-0.530625) = 0.42375 + 0.530625 = 0.954375
前一个公式中的H(X) 对应后一个公式中的D
举个例子:总数除去ID列,还剩两列:身高和喉结,性别是最后的类别,
1.先以身高列做分类,则有高和矮两种类别且一共有8组数据,按照身高区分后一共有3男5女两种类别
以身高区分一共会出现三种情况 高:男 高:女 矮:女
则以身高做区分时的熵为 5/8 * [-3/5 * log(3/5) - 2/5 * log(2/5)] + 3/8 * 3/3 * log(3/3)
=0.625 * [-0.6 *(-0.736) - 0.4 * (-1.321)] = 0.60625
说明:5/8代表8个总数里面有5个"高",第一个3/5前面的3代表以身高划分后男生的数量 5代表总以身高划分后 值为"高"的总数, 以此类推。
最后的3/3代表 以身高划分后女生的身高值(矮) / 以身高划分后女生的总数,由于log(3/3) = 0 所以后面省略了。
那么问题来了 一共有两个特征 "身高"和"喉结" ,那么以那种特征区分更好呢?
我们来计算一下以喉结划分之后的熵值。
4/8 * [-3/4 * log(3/4) - 1/4 * log(1/4)] + 4/8 * [- 4/4 * log(4/4)] = -0.75 * (-0.31) - 0.25 * (-0.5)
=0.5*(0.232 + 0.125 )= 0.1785
则以喉结划分之后的熵值为0.1785
现在有了两个熵值了,如何比较呢,这里引入一个概念:信息增益:既用"当前分类值"的总熵减去每个分类后熵,取结果最小值,这里的例子里面,总的熵值为0.954375 身高分类的熵值为0.60625 以喉结区分的熵值为0.1785
0.954375 - 0.60625 小于 0.954375 - 0.1785
所以这里以身高分类为最优的选择。
如果有多个分支,则以父节点的熵值作为被减数(0.954375的位置) 不能最外层总的熵值作为被减数。
由于ID3算法一般会优先选择有较多属性值的特征,因为属性值多的特征会有相对较大的信息增益,所以分的越细数据集确定性越高, 为了避免这个不足,C4.5中是用信息增益比率(gain ratio)来作为选择分支的准则。
C4.5算法
C4.5相比于ID3,用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足。
C4.5算法流程与ID3相类似,只不过将信息增益改为信息增益比。
还是上面的例子为例 ,在计算0.954375 - 0.60625 与 0.954375 - 0.1785 之后不以数值的大小直接区分
而是加一步,双方都除以各自的信息熵值
信息熵计算方法: 以本例来计算 身高划分的信息熵= -5/8 * log(5/8) + (-3/8 * log(3/8)) = 0.661
以喉结划分的信息熵 = -4/8 * log(4/8) + (-4/8 * log(4/8)) = 0.693
既 (0.954375 - 0.60625) / 0.661 = 0.526
与(0.954375 - 0.1785) / 0.693 = 1.119 结果是0.526 < 1.119 则以身高做区分为最优选择。
以上就是简单了解ID3以及C4.5初步了解
参考:https://blog.csdn.net/chenxiqilin/article/details/50395809

567

被折叠的 条评论
为什么被折叠?



