想象你周末想找朋友玩,但朋友神秘一笑,只告诉你他安排了三种活动之一:爬山、看电影、宅家。没有任何提示时,你只能三个里瞎猜;这时朋友补了一句:“今天下雨哦”——你的猜测立刻有了方向:雨天嘛,八成宅家。信息论把“有多不确定”变成一个可计算的数字,叫熵;而条件熵衡量的正是:拿到提示之后,还剩多少不确定。它就像猜谜游戏里的“省问题数”:一个提示越有用,剩下的问号越少。本文用这条猜谜主线,从信息熵讲起,一步步拆解条件熵的定义、链式法则和信息增益,最后落到决策树 ID3/C4.5 与特征工程中的实战应用。你会发现,AI 选特征的本质,不过是在挑选“最会出题的朋友”。

岗位关联

条件熵是信息论的地基,也是决策树、特征选择等机器学习方法的理论源头。掌握它,你才能真正读懂“模型为什么选这个特征、不选那个特征”,这是 AI 从业者理解和调试模型的基本功。

目录
  1. 可视化演示
  2. 信息熵回顾:猜谜的起点
  3. 条件熵定义:提示之后还剩多少问号
  4. 链式法则:两步猜谜的账本
  5. 信息增益:提示帮你省了多少问题
  6. 决策树应用:ID3 与 C4.5 的选问策略
  7. 特征工程应用:从猜谜到建模
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。

本节配有交互动效(进入视口后自动加载,约 3KB)。

系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T

信息熵回顾:猜谜的起点

游戏开始,朋友给出三个选项:爬山、看电影、宅家,但概率未知。你最关心的问题是:平均要问多少个“是/否”问题,才能锁定答案?当三种活动等可能时,答案是 log₂3 ≈ 1.585 个——不到两个问题,因为每次“是/否”都能排除一半可能。信息论给这个“平均问题数”起了名字:熵,单位 bit(二进制位)。

熵的直觉来自“惊讶”。概率越小的事件,一旦发生越让人意外,携带的信息量越大。单个事件的信息量叫自信息,就是 −log₂ p(x):抛硬币正面自信息 1 bit,而“彩票中奖”自信息高达约 20 bit。熵把所有事件的自信息按概率加权平均,得到“平均惊讶程度”:

等概率三种活动,熵 1.585 bit;若朋友 90% 概率宅家,熵骤降到约 0.57 bit——因为你已经“猜得差不多了”。熵把“不确定”变成了数字,接下来的所有问题——拿到提示还剩多少不确定、提示值多少钱——都在这把标尺上度量。

H(X)=−∑x∈Xp(x)log⁡2p(x)\displaystyle H(X) = -\sum_{x \in \mathcal{X}} p(x)\log_2 p(x)
  1. 求和符号对 X 的所有可能取值逐一累加,把每个取值的“惊讶贡献”汇总成整体不确定性。
    ∑x∈X\displaystyle \sum_{x \in \mathcal{X}}
  2. 概率 p(x)每个取值出现的概率,它在平均中充当权重。概率越大的事件,对熵的贡献越稳定。
    p(x),∑x∈Xp(x)=1\displaystyle p(x), \quad \sum_{x \in \mathcal{X}} p(x) = 1
  3. 自信息 −log₂ p(x)单个事件的信息量。概率越小,自信息越大,越让人意外。
    −log⁡2p(x)\displaystyle -\log_2 p(x)
  4. 整体加权平均熵就是自信息的期望,H(X)=E[−log₂ p(X)],单位为 bit(二进制位)。
    H(X)=E[−log⁡2p(X)]\displaystyle H(X) = \mathbb{E}[-\log_2 p(X)]

条件熵定义:提示之后还剩多少问号

现在朋友透露关键提示:今天的天气。你凭经验知道,晴天他可能去爬山,雨天八成宅家看电影,不确定性大幅缩水。条件熵 H(活动|天气) 就是“知道天气后,猜活动还剩多少不确定”。注意它不是在问“雨天时活动的熵”,而是把晴天、雨天、阴天三种情况各自的剩余不确定度,按它们出现的概率加权平均,得到一个总体的“平均剩余问号数”。

数学上先看局部:给定 X=x 时,Y 的条件分布是 p(y|x),这组样本内部仍有自己的熵 H(Y|X=x),叫局部条件熵。把所有局部条件熵按 p(x) 加权平均,就得到条件熵:

条件熵有个重要性质——非负。任何 p(y|x) 都在 0 到 1 之间,log 后非正,加负号后每一项都 ≥ 0,所以 H(Y|X) ≥ 0。当且仅当已知 X 后 Y 完全确定(p(y|x) 只取 0 或 1),条件熵才为 0。直观理解:信息只会帮你减少不确定性,绝不会把水搅浑。

回到猜谜:H(活动|天气) 就是“朋友已经告诉我天气,我还得再问几个问题”。如果这个数字很小,说明天气提示含金量高;如果和 H(活动) 差不多大,说明天气跟活动八竿子打不着。这就是后面信息增益的地基。

H(Y∣X)=∑x∈Xp(x) H(Y∣X=x)=−∑x∈X∑y∈Yp(x,y)log⁡2p(y∣x)\displaystyle H(Y|X) = \sum_{x \in \mathcal{X}} p(x)\,H(Y|X=x) = -\sum_{x \in \mathcal{X}}\sum_{y \in \mathcal{Y}} p(x, y)\log_2 p(y|x)
  1. 给定条件 H(Y|X=x)只看 X=x 的那一组样本,Y 依然有分布,局部仍可能有不确定性。比如雨天组也不是全员宅家,偶尔会去电影院。
    H(Y∣X=x)=−∑y∈Yp(y∣x)log⁡2p(y∣x)\displaystyle H(Y|X=x) = -\sum_{y \in \mathcal{Y}} p(y|x)\log_2 p(y|x)
  2. 加权系数 p(x)每个天气出现的概率。晴天多、雨天少的城市,雨天组的贡献就小。
    H(Y∣X)=∑x∈Xp(x)⋅H(Y∣X=x)\displaystyle H(Y|X) = \sum_{x \in \mathcal{X}} p(x)\cdot H(Y|X=x)
  3. 联合概率展开把 p(x)·p(y|x) 写成联合概率 p(x,y),公式变成对所有 (x,y) 对的求和。
    p(x) p(y∣x)=p(x,y)\displaystyle p(x)\,p(y|x) = p(x, y)
  4. 条件对数项 log₂ p(y|x)测的是“已知 X 后 Y 的剩余惊讶”,与无条件时的 p(y) 完全不同。
    −log⁡2p(y∣x)\displaystyle -\log_2 p(y|x)

链式法则:两步猜谜的账本

把谜题加大一档:一次要猜两个东西——周末的天气和活动,共 3×3=9 种组合。你怎么问最有效率?当然是分两步:先问天气(第一步),知道答案后,再顺着天气去问活动(第二步)。两步需要的问题数加起来,就是同时猜中两件事的总不确定度,也就是联合熵。链式法则把这个两步策略写成公式:

这个法则可以一路推广:H(X,Y,Z)=H(X)+H(Y|X)+H(Z|X,Y),猜几个变量就拆几步。它还印证了“信息不会凭空产生”:对数据做任何加工变换,能保住的互信息只会减少不会增加(即信息处理不等式),所以特征工程里才强调“垃圾进、垃圾出”。

对小雨(玩家)来说,链式法则是她的猜谜账本:不论先问哪个变量,总问题的账是守恒的,只是换了种拆法;顺序不同,每一步的难度也不同。

H(X,Y)=H(X)+H(Y∣X)\displaystyle H(X, Y) = H(X) + H(Y|X)
  1. 联合熵 H(X,Y)同时猜中 X 和 Y 所需的平均问题数,对所有 (x,y) 组合衡量的总不确定性。
    H(X,Y)=−∑x∈X∑y∈Yp(x,y)log⁡2p(x,y)\displaystyle H(X, Y) = -\sum_{x \in \mathcal{X}}\sum_{y \in \mathcal{Y}} p(x, y)\log_2 p(x, y)
  2. 先猜 X第一步消耗的不确定性 H(X)。先猜哪个变量都行,但顺序会影响第二步的难度。
    H(X)\displaystyle H(X)
  3. 再猜 Y 的条件熵已知 X 的结果后,带着答案去猜 Y,只需付出 H(Y|X)。
    H(Y∣X)\displaystyle H(Y|X)
  4. 相加总账 = 第一问的账 + 第二问的账。变形可得 H(Y|X)=H(X,Y)−H(X),这是实际计算条件熵最常用的路径。
    H(Y∣X)=H(X,Y)−H(X)\displaystyle H(Y|X) = H(X, Y) - H(X)

信息增益:提示帮你省了多少问题

玩游戏时,你要在众多候选提示里挑最划算的。怎么量化一个提示“值多少钱”?很简单:比较“没提示时平均要问几个问题”和“拿到提示后平均还要问几个问题”,差值就是提示帮你省下的问题数——这就是信息增益。

信息增益的物理意义是 X 与 Y 的相互依赖强度:增益大说明“知道 X 对猜 Y 帮助巨大”,增益为 0 说明两者独立、提示毫无价值。它度量的是统计关联而非因果关系——“冰淇淋销量”与“溺水人数”增益很高,但没人会因为买冰淇淋而溺水。计算流程很简单:先算 H(Y),再算 H(Y|X),最后相减。

聪明的猜谜玩家永远先问增益最大的问题——这正是 ID3 决策树干的事。到了机器学习里,“提示”换了个名字:特征。

Gain(X;Y)=H(Y)−H(Y∣X)=I(X;Y)\displaystyle \text{Gain}(X;Y) = H(Y) - H(Y|X) = I(X;Y)
  1. 无提示基准 H(Y)完全不知道 X 时,猜 Y 平均要问的问题数。
    H(Y)\displaystyle H(Y)
  2. 有提示剩余 H(Y|X)拿到提示 X 后平均还要问的问题数。由于条件熵非负且不超过无条件熵,差值不会算成负数。
    H(Y∣X)≤H(Y)\displaystyle H(Y|X) \leq H(Y)
  3. 相减得增益差值越大,提示越给力。这个值在信息论中正是互信息 I(X;Y),两个视角一个本质:X 与 Y 的相互依赖程度。
    I(X;Y)=H(Y)−H(Y∣X)=H(X)−H(X∣Y)\displaystyle I(X;Y) = H(Y) - H(Y|X) = H(X) - H(X|Y)

决策树应用:ID3 与 C4.5 的选问策略

决策树就是一台自动化的“二十问”机器:根节点先选信息增益最大的特征提问,按答案把样本分到子节点,每个子节点再递归地重复“选特征、划分”,直到叶子节点。ID3 算法每一步都用信息增益选特征——也就是我们前面算的 H(Y)−H(Y|X)。

但 ID3 有个著名毛病:偏爱取值特别多的特征。比如候选特征“样本编号”每个样本一个值,划分后每个子集只有一个样本、内部熵为 0,计算出的信息增益爆表——可这个特征毫无泛化能力。C4.5 算法用增益率纠偏:把增益除以特征自身的熵(分裂信息),特征取值越多、分裂信息越大、折扣越狠:

C4.5 还有三项配套改进:连续特征离散化(把数值排序后按阈值二分找最大增益)、缺失值处理,以及后剪枝——先长成一棵完整大树,再用验证集修剪掉帮助不大的分支,对抗过拟合(模型把训练数据背下来、对新数据却失灵)。最终这棵树本身就是一份可读的“猜谜攻略”:从根到叶的每条路径,就是一条 if-then 规则。

小雨发现,决策树的训练过程和她玩猜谜一模一样:ID3 是“哪个提示省问题最多就问哪个”,C4.5 是“省得多但不要太啰嗦”。现代 XGBoost、LightGBM 虽然用二阶梯度,但选分裂点的基因依然来自信息增益。

GainRatio(D,A)=Gain(D,A)SplitInfoA(D),SplitInfoA(D)=−∑v∈values(A)∣Dv∣∣D∣log⁡2∣Dv∣∣D∣\displaystyle \text{GainRatio}(D, A) = \frac{\text{Gain}(D, A)}{\text{SplitInfo}_A(D)}, \qquad \text{SplitInfo}_A(D) = -\sum_{v \in \text{values}(A)} \frac{|D_v|}{|D|}\log_2\frac{|D_v|}{|D|}
  1. 分子 Gain(D,A)按特征 A 划分后,标签熵减少了多少。这就是 ID3 的选问标准。
    Gain(D,A)=H(D)−H(D∣A)\displaystyle \text{Gain}(D, A) = H(D) - H(D|A)
  2. 分母 SplitInfo_A(D)特征 A 自身的“分裂熵”,A 取值越多这个值越大,折扣越重。
    −∑v∈values(A)∣Dv∣∣D∣log⁡2∣Dv∣∣D∣\displaystyle -\sum_{v \in \text{values}(A)} \frac{|D_v|}{|D|}\log_2\frac{|D_v|}{|D|}
  3. 相除取平衡增益大且分裂信息小 → 增益率高 → 特征既有效又不过度细分。
    GainRatio=GainSplitInfo\displaystyle \text{GainRatio} = \frac{\text{Gain}}{\text{SplitInfo}}

特征工程应用:从猜谜到建模

真实项目里,候选特征动辄几百上千,不可能全塞进模型。条件熵给了工程师一杆天然的秤:对每个特征计算它对目标标签的条件熵与信息增益,按增益从大到小排序,筛掉那些“对猜谜毫无帮助”的噪声特征,再把高增益特征放进模型。最常用的判据是条件熵的非负性与等号条件:

这套“过滤式特征选择”与互信息完全等价,好处有三:计算快(每个特征单独打分,不用训练模型)、可解释强(增益大 → 特征与标签关联强,业务方听得懂)、能缓解冗余(“收入”与“收入等级”增益都很高,留一个即可)。局限是只看单变量与标签的关联,忽略特征之间的组合效应,所以常与包装式、嵌入式方法配合使用。

小雨恍然大悟:AI 的“经验”不过是一本巨大的条件概率账本,而条件熵就是给这本账本里每个特征称重的秤——称出它在模型的猜谜游戏里,到底值多少分量。

H(Y∣X)≥0,H(Y∣X)=0  ⟺  Y=f(X)\displaystyle H(Y|X) \geq 0, \qquad H(Y|X) = 0 \iff Y = f(X)
  1. ≥ 0剩余不确定性不可能为负,说明“知道一个特征绝不会让目标更混乱”。
    H(Y∣X)≥0\displaystyle H(Y|X) \geq 0
  2. 等号条件 Y=f(X)条件熵为零当且仅当 X 的值唯一确定了 Y——对任意 x,p(y|x) 只在某个 y 上为 1,其余为 0。
    p(y∣x)∈{0,1},∀x∈X,∀y∈Y\displaystyle p(y|x) \in \{0, 1\}, \quad \forall x \in \mathcal{X}, \forall y \in \mathcal{Y}
  3. 判别工具H(Y|X) 接近 0 说明 X 是 Y 的强预测因子;H(Y|X) 接近 H(Y) 说明 X 与 Y 几乎独立,可直接丢弃。
    H(Y∣X)→H(Y)  ⟹  X⊥Y\displaystyle H(Y|X) \to H(Y) \implies X \perp Y

AI 应用场景

决策树风控评分卡

阶段:模型训练与特征选择

解决的问题:信贷风控中几百个特征鱼龙混杂,人工挑特征凭经验、易遗漏。用条件熵计算每个特征对“违约标签”的信息增益,自动选出强特征构建决策树,模型既准又可解释。

具体案例:某金融科技公司做小额贷风控,候选特征包括收入、负债率、申请渠道、设备型号等 300+。工程师用信息增益排序,发现“负债率”增益最高,决策树根节点直接用它划分,AUC 提升 8%,且树结构顺利通过监管审查。

推荐系统冷启动特征筛选

阶段:特征工程

解决的问题:新用户没有行为数据,只能靠画像特征(年龄、地域、设备)预测偏好,特征价值参差不齐。用条件熵 H(点击|年龄) 等指标评估每个画像特征的预测力,筛选高增益特征进模型。

具体案例:视频平台给新用户做兴趣预测,统计发现“设备型号”对“游戏类内容点击”的条件熵远低于“地域”,于是模型对游戏用户优先使用设备特征,首屏点击率提升 12%。

医疗诊断可解释特征分析

阶段:模型解释与特征诊断

解决的问题:医疗 AI 需要向医生解释“为什么这么判”。条件熵给出单个特征对诊断的贡献度量,医生可以通过信息增益看到哪些生命体征对重症判断贡献更大。

具体案例:某医院 ICU 预警系统用信息增益排序 40 项生命体征,发现“血氧饱和度变化率”和“呼吸频率”贡献最大,模型据此重点监测这两项指标,误报率下降 15%。

Python 演示

python69 行
import mathfrom collections import Counter  def entropy(labels):    # 计算标签列表的信息熵 H(Y)    total = len(labels)    if total == 0:        return 0.0    cnt = Counter(labels)    return -sum(c / total * math.log2(c / total) for c in cnt.values())  def conditional_entropy(data, labels, feature_idx):    # 计算 H(Y|X):按特征取值分组后对各组熵加权平均    total = len(data)    result = 0.0    values = set(row[feature_idx] for row in data)    for value in values:        sub = [labels[i] for i, row in enumerate(data) if row[feature_idx] == value]        result += len(sub) / total * entropy(sub)    return result  def info_gain(data, labels, feature_idx):    # ID3 准则:H(Y) - H(Y|X)    return entropy(labels) - conditional_entropy(data, labels, feature_idx)  def gain_ratio(data, labels, feature_idx):    # C4.5 准则:信息增益除以分裂信息    gain = info_gain(data, labels, feature_idx)    split_info = entropy([row[feature_idx] for row in data])    return gain / split_info if split_info > 0 else 0.0  def best_feature(data, labels, features, criterion):    # 返回得分最高的特征下标及其得分    score_fn = info_gain if criterion == "id3" else gain_ratio    scores = {f: score_fn(data, labels, f) for f in features}    best = max(scores, key=scores.get)    return best, scores  def main():    # 经典天气数据集,每行: 天气(0晴1阴2雨) 温度(0高1中2低) 湿度(0高1正常) 风(0无1有)    data = [        [0, 0, 0, 0], [0, 0, 0, 1], [1, 0, 0, 0], [2, 1, 0, 0],        [2, 2, 1, 0], [2, 2, 1, 1], [1, 2, 1, 1], [0, 1, 0, 0],        [0, 2, 1, 0], [2, 1, 1, 0], [0, 1, 1, 1], [1, 1, 0, 1],        [1, 0, 1, 0], [2, 1, 0, 1],    ]    # 标签: 0 不去运动, 1 去运动    labels = [0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0]    feature_names = ["天气", "温度", "湿度", "风"]    h_y = entropy(labels)    print("目标熵 H(Y) = %.4f bit" % h_y)    for f, name in enumerate(feature_names):        h_cond = conditional_entropy(data, labels, f)        print("%s: 条件熵=%.4f 信息增益=%.4f 增益率=%.4f" %              (name, h_cond, info_gain(data, labels, f), gain_ratio(data, labels, f)))    best_id3, s_id3 = best_feature(data, labels, range(4), "id3")    best_c45, s_c45 = best_feature(data, labels, range(4), "c45")    print("ID3 最优特征: %s (信息增益 %.4f)" % (feature_names[best_id3], s_id3[best_id3]))    print("C4.5 最优特征: %s (增益率 %.4f)" % (feature_names[best_c45], s_c45[best_c45]))  if __name__ == "__main__":    main()
目的:用经典天气数据集演示条件熵、信息增益与增益率的完整计算,并分别用 ID3 与 C4.5 准则选出最优划分特征。
  1. cnt = Counter(labels)统计每个类别的样本数,这是熵计算的第一步。
  2. return -sum(c / total * math.log2(c / total) for c in cnt.values())一行实现 H=−Σp·log₂p。
  3. values = set(row[feature_idx] for row in data)找出特征的所有取值,相当于把样本按特征分组。
  4. result += len(sub) / total * entropy(sub)每个子组的熵按样本占比加权,这就是条件熵的加权平均。
  5. return gain / split_info if split_info > 0 else 0.0除以特征自身的熵,惩罚取值过多的特征。
  6. best = max(scores, key=scores.get)选出得分最高的特征,这是决策树递归划分的第一步。

常见误区

误区我以为 H(带伞|下雨) 就是“下雨天带伞的熵”,直接看下雨那一天的样本就行,不用管晴天阴天。

正解条件熵是对 X 所有取值(下雨、晴天、阴天)下 H(Y|X=x) 的加权平均,权重就是 p(x)。只算下雨一组,等于只看局部条件熵,忘记了加权,数值必然偏差。就像算全班平均成绩,不能只统计第一名那一组的分数。

为何常见:条件熵的符号 H(Y|X) 和条件概率 p(y|x) 长得太像,容易把“条件”误解成单一事件而非加权平均。

误区增益为正就说明特征有用,那我把能想到的特征全塞给 ID3,树越长越准。

正解信息增益对训练集永远非负,但取值多的特征(如样本编号)会造成增益虚高;而且模型会拟合训练数据里的噪声,导致过拟合、泛化变差。决策树要配合增益率、剪枝和验证集评估,增益衡量的是统计关联也不等于因果关系。

为何常见:只看训练集上的增益数字,忽略了特征取值偏置和过拟合这两个隐藏问题。

误区都是“一个条件下另一个的熵”,听起来对称,大小应该一样。

正解条件熵不满足对称性。H(Y|X) 是“已知 X 后 Y 的剩余不确定”,H(X|Y) 是反过来。比如“已知下雨推断带伞”很准,但“已知带伞推断下雨”不准——因为带伞的人不一定遇到下雨。链式法则里顺序也决定了每一步的难度。

为何常见:互信息 I(X;Y) 是对称的,初学者容易把这个性质错误推广到条件熵,忘了回到加权平均定义去验证。

误区熵等于 0 就是没信息、没关联,所以条件熵为零说明两个变量无关。

正解恰好相反!H(Y|X)=0 表示知道 X 后 Y 完全确定,即 Y 是 X 的函数,这是最强的依赖关系。完全独立时 H(Y|X)=H(Y)>0。条件熵为零意味着“路标太准了”,而不是“路标不存在”。

为何常见:人们习惯把“零”直觉等同于“没有、不存在”,忽略了这里它表示的是剩余不确定性的下界,即“完全确定”。

误区决策树里讲信息增益,信息论里讲互信息,是两个不同领域的名词,记两套就行。

正解它们是同一个量的两种写法:Gain=H(Y)−H(Y|X)=I(X;Y)。决策树每次选特征,本质就是在最大化特征与标签的互信息。理解了这一点,特征工程里算信息增益就等于算互信息,可以互相印证。

为何常见:教材在不同章节、不同术语体系下介绍它们,学生容易当成两个独立概念,缺少跨章节的联系。

面试题

Q1. 在猜谜游戏中,条件熵 H(带伞|下雨) 最准确的含义是?

单选题 · easy

  • A.知道下雨后带伞的剩余不确定← 正确答案
  • B.下雨事件本身的不确定性
  • C.带伞与下雨的联合概率
  • D.带伞和下雨事件的信息和

答案:A。条件熵度量“已知 X 后 Y 的平均剩余不确定度”,A 正是这个含义。B 是 H(下雨),C 是联合分布,D 是混淆了联合熵与条件熵的说法。

Q2. 公式 H(Y|X)=Σ p(x)H(Y|X=x) 中,求和的对象是?

单选题 · easy

  • A.对 Y 的所有可能取值求和
  • B.对 X 的所有可能取值求和← 正确答案
  • C.对 X 与 Y 的联合取值求和
  • D.对全部样本逐个编号求和

答案:B。条件熵把“每一个 X 取值下的局部熵”按 p(x) 加权,所以是对 X 求和。C 是联合熵的求和方式,D 混淆了样本与取值空间。

Q3. 已知 H(X,Y)=3.0 bit,H(X)=1.2 bit,则 H(Y|X) 等于?

单选题 · mid

  • A.4.2 bit
  • B.1.8 bit← 正确答案
  • C.2.5 bit
  • D.0.6 bit

答案:B。由链式法则 H(X,Y)=H(X)+H(Y|X),得 H(Y|X)=3.0−1.2=1.8 bit。选 4.2 是把减法方向加反了,选 2.5 或 0.6 没有对应的公式依据。

Q4. ID3 算法在决策树每个节点选择划分特征时使用的准则是?

单选题 · mid

  • A.最大化信息增益← 正确答案
  • B.最小化信息增益
  • C.最大化增益率
  • D.最小化条件熵

答案:A。ID3 每一步选信息增益最大的特征来划分,对应“先问最能省问题的提示”。增益率是 C4.5 的改进,选 C 混淆了两代算法。

Q5. 条件熵 H(Y|X)=0 说明什么?

单选题 · easy

  • A.X 与 Y 完全独立无关
  • B.知道 X 后 Y 被完全确定← 正确答案
  • C.Y 无法从 X 中推断得到
  • D.X 和 Y 的信息量都为零

答案:B。条件熵为零表示剩余不确定性为零,X 是 Y 的完美函数,即 Y=f(X)。如果独立,则 H(Y|X)=H(Y)>0,A 恰好说反了。

Q6. 信息增益 Gain=H(Y)−H(Y|X) 在信息论中等价于?

单选题 · mid

  • A.联合熵 H(X,Y) 的值
  • B.互信息 I(X;Y) 的值← 正确答案
  • C.条件熵 H(X|Y) 的值
  • D.交叉熵 KL 散度的值

答案:B。Gain 与互信息是同一个量,I(X;Y)=H(Y)−H(Y|X),决策树选特征就是最大化特征与标签的互信息。联合熵、条件熵、KL 散度定义不同,不能混用。

Q7. ID3 偏爱“样本编号”这类取值极多的特征,根本原因是?

单选题 · hard

  • A.取值多的特征计算起来更快速
  • B.每个子集样本少导致条件熵偏低← 正确答案
  • C.取值多代表特征携带更丰富信息
  • D.增益公式天然惩罚取值多的特征

答案:B。取值多 → 每个分支样本极少甚至单一 → 子组熵接近 0 → 加权条件熵虚低 → 信息增益虚高。C4.5 用增益率(除以分裂信息)纠偏,恰恰说明增益公式并不天然惩罚取值多的特征。

Q8. 关于增益率(GainRatio),下列说法正确的有?

多选题 · mid

  • A.信息增益除以分裂信息得到← 正确答案
  • B.数值结果恒小于等于零
  • C.与信息增益的大小完全等价
  • D.是 C4.5 的特征选择准则← 正确答案

答案:AD。增益率=信息增益/分裂信息,是 C4.5 的准则。B 错:增益率非负;C 错:增益率会对取值多的特征“打折”,并不与信息增益完全等价。

Q9. 下列对条件熵性质的说法,正确的有?

多选题 · mid

  • A.条件熵是剩余不确定的加权平均← 正确答案
  • B.条件熵与反方向的条件熵相等
  • C.条件熵总是满足不大于原熵← 正确答案
  • D.条件熵为零时目标完全依赖← 正确答案

答案:ACD。A 是条件熵的加权平均定义;C 是条件熵不超过无条件熵;D 是零条件熵的“完全依赖”含义。B 错:H(Y|X) 与 H(X|Y) 一般不相等,条件熵不对称。

Q10. C4.5 相对 ID3 的主要改进包括?

多选题 · hard

  • A.用增益率替代信息增益← 正确答案
  • B.支持连续属性的离散化← 正确答案
  • C.完全消除模型的过拟合
  • D.引入剪枝对抗数据噪声← 正确答案

答案:ABD。C4.5 用增益率纠偏、支持连续特征二分、引入剪枝来缓解过拟合。C 错:任何算法都无法“完全消除”过拟合,剪枝只能缓解而不能根除。