ID3算法是一种用于创建决策树的机器学习算法,该算法基于信息论中的信息增益概念来选择最优属性进行划分。信息增益是原始数据集熵与划分后数据集熵的差值,熵越小表示数据集的纯度越高。有关ID3算法的详细步骤和算法公式在我之前的文章中谈到,大家可以回顾一下:
【机器学习300问】33、决策树是如何进行特征选择的?https://blog.csdn.net/qq_39780701/article/details/136660493
本文想讨论的是,ID3算法的局限性,以及为了避免其局限,人们提出的改进算法——C4.5
废话不多说,让我们直接列出其局限性,然后通过一个具体的任务例子来感受一下,在特定场景下ID3是如何犯错的。
ID3使用信息增益作为属性选择的指标,这一度量倾向于选择取值较多的属性,即使这些属性并不一定最具区分能力,可能导致生成的决策树偏向局部最优解而非全局最优。
随着数据集规模的增大,ID3算法的计算成本显著增加,对每个特征,都需要计算其信息增益,这涉及到了对数据集的遍历和对数运算,特别是在大数据集上,这一步骤可能相当耗时。
第二点计算成本高,就不用说了,很直观就能感受到。主要是第一个“偏好选择特征值多的属性”是个什么意思呢?下面看个例子:
有10个样本,三个特征(姓名、身高、体重),目标是预测性别(男、女)。为了明确说明问题,假设数据集中姓名的特征值最多,且姓名与性别之间没有明显的关联,而身高和体重则与性别有较强的关联性。
姓名 | 身高(cm) | 体重(kg) | 性别 |
---|---|---|---|
A | 170 | 70 | 男 |
B | 169 | 70 | 男 |
C | 180 | 80 | 男 |
D | 155 | 50 | 女 |
E | 175 | 75 | 男 |
F | 160 | 52 | 女 |
G | 178 | 85 | 男 |
H | 163 | 57 | 女 |
I | 171 | 66 | 女 |
J | 158 | 53 | 女 |
首先,计算整个数据集关于性别的熵。数据集中有5个男性和5个女性,因此熵为:
假设身高在一定程度上与性别相关联,我们以身高170cm为阈值来进行划分。则从表中可知:
通过条件信息熵的公式计算得出:
再用减去条件信息熵得到信息增益:
我们按照体重大于等于70,和小于70来划分男生和女生,可以从表中得知,通过这样的阈值:
由于姓名是高度特定的,假设每个姓名都独一无二,且与性别无关联。由于有10个不同的姓名,总的信息增益计算如下:
先算出条件信息熵:
再相减得到信息增益:
从上面的例子可以看出,ID3算法将姓名这种我们人类明显能看出和性别划分没什么关系的属性的信息增益也计算的非常高,在这个例子中,甚至和体重属性拥有一样的信息增益,显然不合理!
根据ID3算法的逻辑,如果仅考虑信息增益大小,算法可能会错误地认为姓名是一个有效的特征,因为它考虑了每个特征的取值数量,而没有充分评估这些特征对目标变量的实际区分能力。
C4.5算法通过引入一个新的属性选择度量——信息增益率(Gain Ratio),改进了ID3算法中“偏好特征值多的属性”的缺点。C4.5算法使用“增益率”(Gain Ratio)来选择属性,增益率是对信息增益进行规范化的一个指标。
通过选择具有最高信息增益的属性来分割数据。信息增益【分子】由下式给出:
其中,是数据集的信息熵,是在属性给定的条件下的信息熵。
分裂信息度量了分裂(即按属性A的不同取值划分数据集)的信息量,定义为:
其中,在属性上有个不同的取值,是属性上取值为的集合的大小。这个分裂信息,可以理解成属性本身的混乱程度【分母】。
为了减少对多值属性的偏向,C4.5算法使用增益率选择属性,定义为:
C4.5算法就是选择增益率最大的属性作为分割属性。
C4.5算法还引入了树的剪枝过程,以简化决策树结构和减少过拟合现象。剪枝是在构建完整的决策树后进行的,它通过移除掉决策树中那些能够将训练集分类效果提升而对验证集分类效果不产生大的影响的节点来实现。这样,C4.5算法生成的决策树通常比ID3算法生成的决策树泛化能力更强。