文章目录
实现决策树算法最关键的一点就是如何从所有的特征属性中选择一个最优的属性对样本进行分类,这种最优可以理解为希望划分后每种类别中的样本尽可能同类,也就是足够"纯净"。
1.信息增益(ID3)
需要先了解信息墒,墒表示一个系统内部的混乱程度,墒越大越混乱。信息墒的公式:
信息墒的最大值,就是当各类样本出现的比例相同时出现,代入公式可求。
对于公式的理解直接看deepseek的回答,比较准确形象:通俗理解信息墒的公式。
了解了信息墒的含义,假设现在有一个样本空间D,信息墒为E。D根据特征属性x可以划分为 D1, D2, D3 三个子样本空间,各个子样本空间样本数占总样本空间比例 k1, k2, k3,每个子样本空间根据公式也可以计算出自己的信息墒,假设为 E1, E2, E3,那么以这个特征属性划分后D的信息墒为 各个子样本空间信息墒*权重
之和,即 k1*E1 + k2*E2 + k3 *E3
,这个值越大,表示用特征属性x对样本空间划分后的分类效果越差。越小表示分类效果越好,能更有效地将数据划分为纯度更高的子集。因此,需要做的就是计算出每个特征属性划分后的信息墒,优先用信息墒最小的那个特征属性划分,此时能获得最大的信息增益。
然后在子样本空间中用剩下的特征属性重复这个流程,循环往复...,得到一棵分类效果最好的树。
下面是周志华机器学习书中对信息增益的定义:
2.信息增益率(C4.5)
信息增益的选择方式倾向于选择属性值较多的属性,因为这样划分后子空间的信息墒最小,信息增益最大,但容易造成过拟合模型返回能力差的问题,比如在用户的(id、性别、年龄、体重、各种检查指标...)中拿用户的id去预测是否患病,准确但没有意义。
此时通过在上一步信息增益的基础上,除以一个属性固有值(类似于墒值),来平衡属性值较多的属性的信息增益。
这个属性固有值的公式是:
a表示特征属性,V表示值类型的数量,D表示总样本数,Dv表示每个取值下样本数量。
对于这个公式的理解:信息增益中属性固有信息的公式及理解。
所以信息增益率的公式为:
根据增益率对划分属性的选择,
3.基尼指数(CART)
基尼指数属于CART算法,但CRAT算法并不只有基尼指数一种实现方式(分类: 基尼指数;回归: 均方误差)。 见【4.三者对比】部分

上图中4.5基尼值的公式中, p k p_k pk为第k类样本占总样本的比例, p k ′ p_{k'} pk′为非k类样本占的比例( 1 − p k 1-p_k 1−pk)。
为什么这个公式可以反映样本空间的混乱程度?
首先 p k p_k pk的取值在0-1,且所有可能的 p k p_k pk之和等于1。
明显当所有类别占比相等时最混乱,假设对于二分类,此时对于k1、k2,所占总样本的比例 p k 1 p_{k_1} pk1 p k 2 p_{k_2} pk2都为0.5,对应的 p k 1 ′ p_{k_1'} pk1′ p k 2 ′ p_{k_2'} pk2′也都为0.5,因此 ∑ k = 1 ∣ y ∣ p k 2 \sum\limits_{k=1}^{|y|} p_k^2 k=1∑∣y∣pk2= 0. 5 2 0.5^2 0.52+ 0. 5 2 = 0.5 0.5^2=0.5 0.52=0.5,基尼指数= 1 − 0.5 = 0.5 1-0.5=0.5 1−0.5=0.5。
当增大一个 p k p_k pk时,另一个 p k p_k pk必然减少,当对 p k p_k pk进行平方运算时,大的 p k p_k pk增大的那部分必然会大于小的 p k p_k pk减少的那部分,所以 ∑ k = 1 ∣ y ∣ p k 2 \sum\limits_{k=1}^{|y|} p_k^2 k=1∑∣y∣pk2一定会变得更大,所以最终的基尼值 1 − ∑ k = 1 ∣ y ∣ p k 2 1-\sum\limits_{k=1}^{|y|} p_k^2 1−k=1∑∣y∣pk2减少。
eg: p k 1 p_{k_1} pk1=0.6, p k 2 p_{k_2} pk2=0.4, ∑ k = 1 ∣ y ∣ p k 2 \sum\limits_{k=1}^{|y|} p_k^2 k=1∑∣y∣pk2= 0. 6 2 0.6^2 0.62+ 0. 4 2 = 0.52 0.4^2=0.52 0.42=0.52,基尼指数= 1 − 0.52 = 0.48 1-0.52=0.48 1−0.52=0.48。
而下面属性a的基尼指数公式,其实是度量用a属性划分后的所有子样本空间中各自的混乱程度,然后乘以各个子样本空间在总样本空间的占比权重,最后汇总求和。所以可以说公式表示的含义是:用a属性对总样本空间进行划分后,总样本空间的混乱程度。
因此属性a划分后基尼值越小,表示样本空间越"纯净",也就是分类效果越好。
需要注意的是:虽然基尼指数的公式理论上支持多分类,但算法实现中只会二分类,递归的生成二叉树。 分类过程中会在每个候选属性中枚举遍历找到基尼指数最小的最优组合,然后找出全局最优划分组合,该组合对应的属性和划分方式作为该节点的划分属性和分类的方式。
ps.三者对比

主要关注为什么CART可以做回归,而另外两种实现方式不支持。
因为上面两种核心都是要通过目标值的分类,进而知道概率计算墒值,只支持目标值为离散型变量。
而CART算法中,可以通过调整属性划分时的依据公式(均方差),尝试找到每个候选属性的最优分隔组合,这个分割组合要满足分隔后的两个子集的加权均方误差最小(目标值的均方误差),然后选择最优的那个候选属性划分。之后重复迭代下去...
当做回归预测时,最终落到哪个分类,直接返回这个类别的均值就行。