信息熵、信息增益、信息增益比、基尼指数分别是什么?
简化版
这几个都是决策树选择分裂特征的纯度指标。信息熵衡量一个集合的「混乱/不确定程度」,越混乱(各类样本越均匀)熵越大,纯度越低。信息增益 = 分裂前的熵 − 分裂后的加权熵,即「这次分裂让不确定性下降了多少」,ID3 选信息增益最大的特征。信息增益比 = 信息增益 / 本次分支比例的 SplitInfo,C4.5 用它修正信息增益偏向取值多的特征的缺陷。基尼指数也衡量不纯度(随机抽两个样本类别不同的概率),CART 用它,计算比熵简单(不用 log)。核心:都是在找「分裂后子节点最纯」的特征。
详细版
信息熵(Entropy):
H(D) = - Σ pₖ log₂ pₖ (pₖ 是第 k 类样本的占比)
- 全属一类时 H=0(最纯);各类均匀时 H 最大(最混乱)。二分类下 H∈[0,1]。
信息增益(Information Gain,ID3):
Gain(D, a) = H(D) - Σ (|Dv|/|D|)·H(Dv)
= 分裂前熵 - 分裂后各子集加权熵
- 增益越大,说明用特征 a 分裂后不确定性下降越多 → 越该选它。
信息增益比(Gain Ratio,C4.5):
GainRatio(D,a) = Gain(D,a) / IV(a)
IV(a) = - Σ (|Dv|/|D|) log₂(|Dv|/|D|) (特征 a 的固有值/分裂信息)
- 除以 IV(a) 惩罚「取值特别多」的特征,修正信息增益的偏好缺陷。
基尼指数(Gini,CART):
Gini(D) = 1 - Σ pₖ² 基尼越小越纯
分裂后: Gini_index(D,a) = Σ (|Dv|/|D|)·Gini(Dv) → 选最小
- 不用 log,计算比熵快;含义是「随机抽两个样本类别不同的概率」。
完整版教学
一、共同目标:量化「纯度」,指导选特征
决策树每次分裂要选一个「最好」的特征,标准是分裂后子节点尽量纯。要做这个选择,先得能量化「一个集合有多纯/多不纯」。信息熵和基尼指数就是两把「不纯度的尺子」,信息增益、增益比则是「用这把尺子衡量某次分裂带来多少纯度提升」。理解它们,就理解了 ID3/C4.5/CART 的分裂内核。
二、信息熵:衡量「混乱/不确定」
信息熵来自信息论,衡量一个系统的不确定性:
H(D) = - Σₖ pₖ log₂ pₖ
pₖ 是集合 D 中第 k 类样本的比例。直觉理解:
- 全是一类(如 100% 正类):
H = -1·log₂1 = 0,最纯、无不确定性。 - 两类各半(50%/50%):
H = -(½log₂½ + ½log₂½) = 1,最混乱、不确定性最大(二分类下熵取最大值 1)。 - 越接近均匀分布,熵越大;越偏向某一类,熵越小。
所以熵大 = 混乱 = 不纯,熵小 = 有序 = 纯。决策树想把熵降下来。
三、信息增益:分裂让不确定性下降多少(ID3)
有了熵,就能衡量一次分裂的「收益」——信息增益:
Gain(D, a) = H(D) - Σᵥ (|Dv|/|D|)·H(Dv)
└分裂前的熵┘ └分裂后各子集熵的加权平均┘
- 第一项是分裂前整个集合的混乱度。
- 第二项是用特征 a 分裂后,各子集的混乱度按样本占比加权求和。
- 两者之差 = 分裂消除了多少不确定性 = 信息增益。
ID3 算法就是每次选信息增益最大的特征分裂——哪个特征分完后最”降混乱”,就用哪个。
举例:用「是否有房」分裂后,两个子集几乎各自纯净(有房的都还款、没房的都违约),熵大幅下降 → 信息增益大 → 优先选它。
四、信息增益的缺陷:偏向取值多的特征(C4.5 的动机)
信息增益有个著名缺陷:它天然偏爱「取值数目多」的特征。
极端例子:用「身份证号」当特征。每个样本的身份证号都不同,用它分裂后每个子集只有一个样本、纯度 100%、熵=0,信息增益达到最大!但「身份证号」显然是毫无泛化意义的特征——它只是把每个样本单独隔开,学到的是噪声,换新数据完全没用。
根本原因:取值越多的特征,分出的子集越小越纯,信息增益虚高。这会诱导 ID3 选出这种「假聪明」的特征而过拟合。
五、信息增益比:惩罚取值多的特征(C4.5)
为修正上述缺陷,C4.5 改用信息增益比:
GainRatio(D, a) = Gain(D, a) / IV(a)
其中 IV(a)(固有值 / 分裂信息) 衡量特征 a 自身取值的分散程度:
IV(a) = - Σᵥ (|Dv|/|D|) log₂(|Dv|/|D|)
- 特征取值越多、越分散,IV(a) 越大。
- 用信息增益除以 IV(a),相当于给取值多的特征打折——身份证号那种 IV 极大,增益比被拉低,不再被青睐。
注意:增益比又矫枉过正地偏向取值少的特征。所以 C4.5 实际用启发式:先找信息增益高于平均的特征,再从中选增益比最高的——两者结合。
六、基尼指数:CART 的选择,更快
CART 用基尼指数衡量不纯度:
Gini(D) = 1 - Σₖ pₖ²
含义:从 D 中随机抽两个样本,它们类别不同的概率。
- 全一类:
Gini = 1 - 1² = 0,最纯。 - 两类各半:
Gini = 1 - (½²+½²) = 0.5,最不纯。
分裂时选分裂后加权基尼指数最小的特征:
Gini_index(D, a) = Σᵥ (|Dv|/|D|)·Gini(Dv) → 越小越好
为什么 CART 偏爱基尼而非熵?
- 计算快:熵要算
log(较慢),基尼只用平方和,不含对数,效率更高。 - 效果接近:基尼和熵的曲线形状很相似,实践中选出的分裂差别很小。
- CART 还固定用二叉分裂(每次只分两支),基尼配二叉更简洁。
七、三者对比与常见追问
| 指标 | 算法 | 特点 |
|---|---|---|
| 信息增益 | ID3 | 偏向取值多的特征 |
| 信息增益比 | C4.5 | 修正上述偏好,但偏向取值少 |
| 基尼指数 | CART | 不用 log、计算快、二叉 |
- 熵和基尼选哪个? 差别很小;追求速度用基尼(sklearn 默认),追求信息论解释用熵。
- 为什么信息增益偏向多值特征? 多取值 → 子集更碎更纯 → 增益虚高(身份证号例子)。
- 基尼指数为什么不用 log 也能衡量不纯?
1-Σp²可解释为按节点分布独立抽取两个标签时不同类的概率;它与熵有相同的纯度端点和相近排序,但不是简单等同的公式。 - 回归树用什么? 不用熵/基尼,用平方误差(方差) 衡量不纯度(详见回归树专题)。
八、把信息增益、增益率和 Gini 放进同一算例
父节点 8 个样本正负各 4,熵为 1、Gini 为 0.5。某二值切分产生 [3正,1负] 与 [1正,3负],子节点熵都约 0.811,加权后信息增益约 0.189;子节点 Gini 都是 0.375,Gini 下降 0.125。若特征有 8 个唯一值,信息增益可到 1,但 SplitInfo 为 3,增益率只有约 0.333。
Gain(D, A) = H(D) - sum_v |D_v|/|D| * H(D_v)
GainRatio(D, A) = Gain(D, A) / SplitInfo(D, A)
Gini(D) = 1 - sum_k p_k^2
| 对象/方案 | 核心机制 | 选择或风险 |
|---|---|---|
| 信息增益 | 父熵减子熵加权和 | 偏好候选分支多的特征 |
| 增益率 | 增益除以 SplitInfo | 需防止偏好分裂信息极小的特征 |
| Gini 下降 | 父 Gini 减子 Gini 加权和 | CART 分类常用 |
候选切分 → 统计每个子节点类别比例
→ 用同一指标算加权下降 → 选最大有效下降
记忆钩子:增益率分母是这次分裂产生的分支分布 SplitInfo,不是目标标签熵,也不是特征取值本身随便算一个熵。
九、常见误区与追问
- 误区:信息增益率就是信息增益除以标签熵。 分母是分支样本比例形成的 SplitInfo。
- 误区:增益率彻底消除了特征取值数偏差。 它可能转而偏好 SplitInfo 很小的切分,C4.5 还要做候选筛选。
- 追问:对数底数会改变最优特征吗? 同一轮统一底数只做比例缩放,通常不改变排序。
- 追问:样本权重怎么进入公式? 用权重和替代样本数计算类别比例与子节点占比。
- 追问:回归树为什么不用分类熵? 连续目标没有类别比例,通常直接比较平方误差等回归损失下降。
十、加强记忆
四个纯度指标都为选分裂特征服务,核心是「让子节点更纯」。信息熵 H=-Σpₖlog₂pₖ 衡量混乱度(各类均匀时最大、单一类时为 0);信息增益 = 分裂前熵 − 分裂后加权熵(这次分裂降了多少不确定性,ID3 选最大),但偏向取值多的特征(身份证号极端例);信息增益比 = 增益 / 特征固有值 IV(a),C4.5 用它惩罚多值特征(但反过来偏向少值,故 C4.5 用启发式两步结合);基尼指数 Gini=1-Σpₖ²(随机抽两样本类别不同的概率)是 CART 的选择,不用 log、计算快、配二叉分裂,效果与熵接近。回归树则改用平方误差。