深夜的警局会议室里,老侦探面前摊开一份名单:8个嫌疑人,没有监控、没有指纹、没有证人。老侦探只知道小偷一定在这8人里,却无法把范围再缩小一步。这时助手冲进来,说出关键线索:“昨天中午,有人看见小偷穿了红色雨衣。”——而8人里恰好只有2人穿红色雨衣,嫌疑范围瞬间从8人缩小到2人。假如这两个人一个住城东、一个住城西,还能继续用“案发时在城东”这条信息锁定真凶。一条“线索”值多少钱,就取决于它能把不确定的名单压缩多少。信息增益,干的正是这件事。 在机器学习里,我们把这团“不确定的名单”叫做信息熵,把“线索带来的不确定性减少量”叫做信息增益。信息熵描述局面有多混乱,条件熵描述拿到线索后还剩多少混乱,两者之差就是信息增益。把它对所有候选特征排个序,就能从一堆变量中挑出最值得信任的情报来源。决策树、特征筛选、垃圾邮件分类、信贷风控,全都靠着这一逻辑运转。这篇文章会用侦探破案的故事,带你零基础吃透信息增益的原理、经典算法和实战应用。

岗位关联

信息增益是决策树与特征工程的核心基石,掌握它才能回答“为什么选这几个特征”,也能在建模与面试中展现你对不确定性度量的理解。

目录
  1. 可视化演示
  2. 信息熵基础
  3. 条件熵计算
  4. 信息增益定义
  5. ID3分裂准则
  6. 信息增益比
  7. 基尼系数对比
  8. 特征选择应用
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

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

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

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

信息熵基础

老侦探最先要回答的不是“谁是小偷”,而是“我现在到底有多不确定”。如果名单上8人全是男性,他至少知道排查方向;如果名单男女老少、高矮胖瘦都有,他就感觉脑子一团乱。信息熵就是给这团乱麻打分:越平均、越没有倾向性的名单,熵越高;如果名单上所有人都指向同一个人,熵就是 0。

在机器学习里,数据集的熵同样回答“这个集合有多不纯”。假设数据集 D 里共有 n 个类别,每个类别的样本占比为 p_i,那么熵的计算方式就是对每个类别做“概率 × 吃惊程度”的累加。它的数学形式如下:

熵的观念像是侦探手上的“混乱温度计”。它不关心具体谁是贼,只关心这团信息到底多难猜。均匀分布的名单最令人头大,熵也最高;名单已经指向唯一一人,那侦探就不用查了,熵归零。

H(D)=−∑i=1npilog⁡2(pi)H(D) = -\sum_{i=1}^{n} p_i \log_2(p_i)
信息熵衡量数据集的不确定程度。熵越大,说明各类样本越均匀地混在一起;熵越小,说明数据越集中于某几个类别。
  1. 统计类别概率先数出每种类别在数据集里的占比,比如正样本占 60%、负样本占 40%,得到 p_i。
    pi=∣Ci∣∣D∣p_i = \frac{|C_i|}{|D|}
  2. 计算对数项每个 $-\log_2(p_i)$ 表示看到该类别时带来的“意外程度”,概率越小越意外,这一项越大。
    −log⁡2(pi)-\log_2(p_i)
  3. 加权求和把每个概率 p_i 乘以它的意外程度,再全部相加,就是整个数据集的不确定性。
    H(D)=−∑i=1npilog⁡2(pi)H(D) = -\sum_{i=1}^{n} p_i \log_2(p_i)

条件熵计算

拿到“红雨衣”这条线索后,老侦探会把嫌疑人分成“穿红雨衣的”和“不穿红雨衣的”两组。如果穿红雨衣的两个人里有一个明显和案件无关,那剩下的排查难度就降低了一大截。条件熵做的事情,就是回答“在已知某个特征 A 的取值后,数据集的混乱还剩多少”。

条件熵的直觉是:先按特征 A 的取值把数据切分成若干个子集,再分别计算每个子集的熵,最后按子集大小加权平均。如果某个特征能把数据切得很“纯”——比如晴天那组全是不出门的宅男,雨天那组全是带伞的嫌疑人——条件熵就会很低。

对侦探来说,条件熵代表“问完一个问题之后的思路清晰度”。问题问得好,嫌疑人名单瞬间分崩离析,条件熵直逼 0;问题问得烂,两组人都还像原来一样五五开,条件熵约等于没问。

H(D∣A)=∑v=1V∣Dv∣∣D∣H(Dv)H(D|A) = \sum_{v=1}^{V} \frac{|D_v|}{|D|} H(D_v)
条件熵是“拿到线索后剩下的不确定性”。特征分组越纯,条件熵越小,说明这条线索对破案越有用。
  1. 按特征值划分数据集特征 A 有 V 个取值,每个取值 a_v 划出一个子集。
    Dv={x∈D∣A(x)=av}D_v = \{x \in D \mid A(x) = a_v\}
  2. 计算子集权重每个子集的样本数占全集的比例,就是它在最终结果中的话语权。
    ∣Dv∣∣D∣\frac{|D_v|}{|D|}
  3. 加权求和先算每个子集内部的熵,再按权重累加,得到已知 A 后的平均剩余混乱。
    H(D∣A)=∑v=1V∣Dv∣∣D∣H(Dv)H(D|A) = \sum_{v=1}^{V} \frac{|D_v|}{|D|} H(D_v)

信息增益定义

现在,老侦探手里有了两张图:问问题之前的混乱程度 H(D),以及问完问题之后的剩余混乱 H(D|A)。把这两个数字一减,差值就是这条问题的“含金量”——信息增益。差值越大,说明这条线索让破案思路清晰得越多。

信息增益的数学定义因而非常简洁:它是信息熵与条件熵的差。若某个特征能让数据集从“一团乱麻”变成“泾渭分明”,它的信息增益就高;若切完之后还是同样混乱,信息增益就接近 0。

经典“打网球”数据集里,14 个样本中 9 个去玩、5 个不去,整体熵约为 0.94。若用“天气”这个特征分组,条件熵约 0.69,信息增益就是 0.25——比“风速”等其他特征更高,所以它是更有价值的线索。侦探看到这里会心一笑:好线索的标准,从来不是听起来多玄乎,而是能让名单缩得有多快。

g(D,A)=H(D)−H(D∣A)g(D, A) = H(D) - H(D|A)
信息增益度量特征 A 带来的不确定性减少量。它越大,说明特征 A 对区分样本类别的贡献越强。
  1. 计算整体熵先不看任何特征,统计原始数据集 D 中各类别的占比,算出基准混乱度。
    H(D)=−∑i=1npilog⁡2(pi)H(D) = -\sum_{i=1}^{n} p_i \log_2(p_i)
  2. 计算条件熵再按特征 A 的取值分组,计算已知 A 之后的加权平均熵。
    H(D∣A)=∑v=1V∣Dv∣∣D∣H(Dv)H(D|A) = \sum_{v=1}^{V} \frac{|D_v|}{|D|} H(D_v)
  3. 相减得到增益整体熵减条件熵,就是特征 A 带来的净收益。
    g(D,A)=H(D)−H(D∣A)g(D, A) = H(D) - H(D|A)

ID3分裂准则

如果老侦探有十个问题可以依次问,他会怎么安排顺序?最优策略是:每次都问“当前剩余嫌疑人名单上,信息增益最大的那个问题”,问完之后根据答案继续分组,再在每组里面重复同样的思考。这个思路就是 ID3 算法的核心:在决策树的每一个节点,贪婪地挑选让信息增益最大的特征来分裂。

ID3 算法在每个节点执行的操作可以写成:遍历所有候选特征,分别计算它们的信息增益,找到最大值对应的特征,然后按照该特征的每个取值生成子节点,递归地对子数据集重复上述过程,直到数据被分干净或达到停止条件。

侦探团队的效率从此大幅提升:他们不再凭经验拍脑袋问问题,而是严格按“信息增益最大”来编排问话顺序。不过 ID3 也有短板——它只能处理离散特征,连续数值必须先离散化,而且它偏爱取值很多的特征,这个毛病引出了下一节的修正方案。

A∗=arg⁡max⁡A∈F  g(D,A)A_* = \underset{A \in \mathcal{F}}{\arg\max}\; g(D, A)
ID3 的规则只有一句话:每次分裂都选择能让信息增益达到最大的特征,这就是“贪心”的决策树生长方式。
  1. 确定候选特征集当前节点可用的特征集合记作 $\mathcal{F}$,其中每个特征都是候选分裂点。
    F={A1,A2,…,Am}\mathcal{F} = \{A_1, A_2, \ldots, A_m\}
  2. 逐一计算信息增益对每个候选特征 A,计算它相对于数据集 D 的信息增益。
    g(D,Ai)g(D, A_i)
  3. 取增益最大的特征在所有增益中选最大值,对应的特征就是本次分裂的“最佳问题”。
    A∗=arg⁡max⁡A∈F  g(D,A)A_* = \underset{A \in \mathcal{F}}{\arg\max}\; g(D, A)

信息增益比

试想一个极端场景:如果侦探得到的线索是“嫌疑人的手机尾号”,而每个嫌疑人的尾号都不同,那么这条线索可以让名单瞬间只剩下一个人,信息增益直接拉满。但手机尾号真的能用来破案吗?下次换个案子,这条规律就完全失效。信息增益的天然缺陷,就是偏向取值特别多的特征:取值越多,每组越“纯”,条件熵越容易被切到 0。

C4.5 算法的解决办法是给信息增益加一个“分母”:先计算特征 A 本身的固有值——也就是把特征 A 当作标签时的熵——再用信息增益除以这个固有值。取值越多的特征,固有值越大,最终得分被惩罚得越狠,贪婪的 ID3 就不敢再偏爱“手机尾号”这类花架子了。

其中:

侦探从此多了一条考核线索的标准:不仅要看线索能缩小多少范围,还要看这条线索本身是不是“只有本案才碰巧成立”。真正的好线索,应该像“红色雨衣”一样可泛化,而不是像“手机尾号”一样只能表演魔术。

gR(D,A)=g(D,A)HA(D)g_R(D, A) = \frac{g(D, A)}{H_A(D)}
HA(D)=−∑v=1V∣Dv∣∣D∣log⁡2∣Dv∣∣D∣H_A(D) = -\sum_{v=1}^{V} \frac{|D_v|}{|D|} \log_2 \frac{|D_v|}{|D|}
信息增益比是信息增益的“标准化版本”。它通过除以特征自身的固有熵,抑制了多值特征带来的虚假优势。
  1. 发现偏差当特征 A 的取值非常多时,信息增益往往虚高,因此先用固有值来衡量特征本身的信息量。
    HA(D)=−∑v=1V∣Dv∣∣D∣log⁡2∣Dv∣∣D∣H_A(D) = -\sum_{v=1}^{V} \frac{|D_v|}{|D|} \log_2 \frac{|D_v|}{|D|}
  2. 计算固有值该值越大,说明特征 A 的取值分布越散、分支越多。
    HA(D)>0H_A(D) > 0
  3. 做除法修正将信息增益除以固有值,多值特征的得分被拉低。
    gR(D,A)=g(D,A)HA(D)g_R(D, A) = \frac{g(D, A)}{H_A(D)}
  4. C4.5 采纳决策树算法 C4.5 改用增益比作为分裂准则,在多数场景下缓解过拟合。

基尼系数对比

老侦探有时并不追求精确计算,他只想快速判断“这两条线索哪条更省事”。于是另一位同事推荐了一把更趁手的尺子——基尼系数。与信息熵相比,基尼系数没有对数运算,只做平方和减法,计算起来像心算一样快,因此在大型数据集上更受欢迎。

基尼系数的定义同样直观:随机从数据集中抽两个样本,它们属于不同类别的概率越小,说明数据集越纯。公式上,它先把每个类别概率求平方再加总,得到“抽到同一类”的概率,再用 1 减去它,剩下的就是“抽到不同类别”的概率,也就是不纯度。

决策树 CART 算法正是看中了基尼系数“无对数、速度快”的优点,在工程中大规模使用。两颗指标如同两把尺子:熵更精细,适合需要敏感捕捉分布差异的场景;基尼更快速,适合大样本训练。侦探查案时自然愿意随身带一把轻便的尺子,而 CART 就是那把最趁手的工具。

Gini(D)=1−∑i=1npi2Gini(D) = 1 - \sum_{i=1}^{n} p_i^2
基尼系数衡量数据集的“不纯度”。它的值与熵呈正相关趋势,但省去了对数运算,计算更轻量。
  1. 计算各类别概率平方对于每个类别,取样本占比的平方,得到两个样本都属于它的概率份额。
    pi2p_i^2
  2. 求和把所有类别的平方概率相加,代表“随机抽两个样本属于同一类”的总概率。
    ∑i=1npi2\sum_{i=1}^{n} p_i^2
  3. 用 1 减去剩下的部分就是抽到不同类别的概率,也就是当前集合的混乱程度。
    Gini(D)=1−∑i=1npi2Gini(D) = 1 - \sum_{i=1}^{n} p_i^2

特征选择应用

侦探寻常案子的经验终于沉淀成了系统方法论,警局开始用它来校准数据库里的每一条线索。信息增益从此走出决策树,成为特征工程中最重要的“情报评级系统”:在建模之前,先把所有候选特征按信息增益排序,留下真正有价值的高增益特征,扔掉那些只会添乱的噪声。

以文本分类为例,每个词都可以看成一个候选特征。对每个词 w,把文档集合分成“包含 w 的文档”和“不包含 w 的文档”两类,然后计算这个词带来的信息增益:

在信贷场景中,工程师面对数百个用户字段,也会用同样的逻辑给“逾期次数”“负债收入比”“账户活跃天数”等信息招标打分。分值最高的字段才能进入模型。信息增益于是从侦探手心的线索,变成了数据科学家手里的筛子——筛掉废话,留下真金。

Score(w)=H(D)−∑v∈{0,1}∣Dv∣∣D∣H(Dv)Score(w) = H(D) - \sum_{v \in \{0,1\}} \frac{|D_v|}{|D|} H(D_v)
词的得分越高,说明该词对区分文档类别的贡献越大,越应该被保留为文本特征。
  1. 按是否含词分组特征词 w 将文档集 D 分成两个子集:包含该词的和不包含该词的。
    D1={d∈D∣w∈d},D0=D∖D1D_1 = \{d \in D \mid w \in d\}, \quad D_0 = D \setminus D_1
  2. 计算加权条件熵对两个子集分别计算类别熵,再按文档数量加权平均,得到残余混乱。
    ∑v∈{0,1}∣Dv∣∣D∣H(Dv)\sum_{v \in \{0,1\}} \frac{|D_v|}{|D|} H(D_v)
  3. 相减得到词得分整体熵减去残余混乱,就是该词对分类的信息增益。
    Score(w)=H(D)−H(D∣w)Score(w) = H(D) - H(D|w)

AI 应用场景

场景1:银行信用评分中的特征筛选

阶段:特征工程与特征选择

解决的问题:传统信贷风控模型往往要面对上百个用户字段:年龄、职业、学历、负债比、历史逾期次数、查询次数等。直接全部喂给模型,会导致维度爆炸、过拟合且难以解释。利用信息增益对每个字段计算其与“是否违约”之间的关系强度,只保留得分最高的核心字段,可以显著提升模型稳定性和业务可解释性。

具体案例:某消费金融公司建立申请评分卡时,原始候选字段有 120 余个。通过计算每个字段的信息增益并排序,人工结合业务规则后保留 10 个核心字段,模型 AUC 提升约 3 个百分点,同时审批系统响应时间下降,风控人员也能清楚地解释每个字段的决策权重。

场景2:垃圾邮件关键词识别

阶段:文本特征提取与降维

解决的问题:垃圾邮件里充斥着“免费”“点击”“中奖”等词语,但并不是所有高词频词都有区分度。如果直接把几万个词都作为特征,模型既慢又容易过拟合。正确做法是以每个词为特征,计算其信息增益,将真正能区分垃圾邮件与正常邮件的高增益词汇筛选出来。

具体案例:对 5000 封已标注邮件做词频统计后,计算“发票”“点击”“中奖”“亲爱的”等词的信息增益,保留增益最高的 200 个词输入朴素贝叶斯分类器。实验显示垃圾邮件检出率从 88% 提升到 95%,误报率明显下降,训练时间也只有原来的三分之一。

Python 演示

python71 行
import mathfrom collections import Counter def entropy(labels):    total = len(labels)    if total == 0:        return 0.0    counts = Counter(labels)    ent = 0.0    for v in counts.values():        p = v / total        ent -= p * math.log2(p)    return ent def conditional_entropy(data, labels, feature):    groups = {}    for row, label in zip(data, labels):        groups.setdefault(row[feature], []).append(label)    total = len(labels)    cond = 0.0    for group in groups.values():        cond += len(group) / total * entropy(group)    return cond def information_gain(data, labels, feature):    return entropy(labels) - conditional_entropy(data, labels, feature) def best_feature(data, labels, features):    gains = {f: information_gain(data, labels, f) for f in features}    best = max(gains, key=gains.get)    return best, gains def gini(labels):    total = len(labels)    if total == 0:        return 0.0    counts = Counter(labels)    sq = 0.0    for v in counts.values():        p = v / total        sq += p * p    return 1.0 - sq if __name__ == '__main__':    data = [        ['sunny', 'hot', 'high', 'weak'],        ['sunny', 'hot', 'high', 'strong'],        ['overcast', 'hot', 'high', 'weak'],        ['rainy', 'mild', 'high', 'weak'],        ['rainy', 'cool', 'normal', 'weak'],        ['rainy', 'cool', 'normal', 'strong'],        ['overcast', 'cool', 'normal', 'strong'],        ['sunny', 'mild', 'high', 'weak'],        ['sunny', 'cool', 'normal', 'weak'],        ['rainy', 'mild', 'normal', 'weak'],        ['sunny', 'mild', 'normal', 'strong'],        ['overcast', 'mild', 'high', 'strong'],        ['overcast', 'hot', 'normal', 'weak'],        ['rainy', 'mild', 'high', 'strong'],    ]    labels = [        'No', 'No', 'Yes', 'Yes', 'Yes', 'No', 'Yes',        'No', 'Yes', 'Yes', 'Yes', 'Yes', 'Yes', 'No',    ]    features = ['outlook', 'temp', 'humidity', 'wind']    print('整体熵:', round(entropy(labels), 4))    for f in features:        ig = information_gain(data, labels, f)        print(f, '信息增益:', round(ig, 4), '基尼:', round(gini(labels), 4))    best, gains = best_feature(data, labels, features)    print('最优分裂特征:', best)
目的:实现了从零手写的信息熵、条件熵、信息增益与基尼系数计算,并在经典打网球数据集上选出最优分裂特征,直观展示 ID3 算法的核心步骤。
  1. def entropy(labels)用 Counter 统计每个类别的出现次数,再按 $-\sum p \log_2 p$ 计算数据集的信息熵。
  2. def conditional_entropy(data, labels, feature)按特征取值把样本分到不同组,对每组分别求熵后按组大小加权平均。
  3. def information_gain(data, labels, feature)用整体熵减去条件熵,得到该特征的信息增益。
  4. def best_feature(data, labels, features)对每个候选特征计算增益,再用 max(gains, key=gains.get) 找出最大者。
  5. def gini(labels)用 $1 - \sum p_i^2$ 计算基尼系数,方便与信息增益作对比。

常见误区

误区我一直以为信息增益越大,这个特征就越重要。拿到数据后,我用信息增益排序直接挑 Top K 特征,结果模型反而变差了,信息增益是不是没用?

正解信息增益大只代表这个特征能把当前训练集切得更纯,不代表它在真实世界能泛化。像“身份证号”“手机尾号”这类取值极多的特征,可以把每个样本单独切到一个叶子节点,熵变成 0,增益自然拉满,但换个新样本就完全失效。就像侦探得到“嫌疑人的鞋码精确到毫米”,看起来人人都不一样、线索清晰,实际根本无法沉淀规律。所以工程中要使用信息增益比、交叉验证或业务规则来综合判断。

为何常见:因为 ID3 教材总强调“选增益最大的特征”,让人误以为训练集上的增益等同于真实的预测价值,忽略了特征取值数量带来的虚假繁荣。

误区信息量有时候是负的,那么信息熵既然是信息量的平均,应该也可能算出负值吧?

正解熵的定义是 $-\sum p_i \log_2(p_i)$,而合法的概率 $p_i$ 范围是 (0,1],所以 $-\log_2(p_i) \ge 0$,每一项都非负,求和后必然非负。只有当数据只有一个类别时熵为 0;类别越均匀,熵越接近 $\log_2(n)$。所谓“负信息量”是单个事件的信息量定义(比如必然事件的惊奇度为 0,而不是负),不要把单点信息和整体期望混为一谈。

为何常见:口语里“信息量”和“熵”经常互换使用,而单个事件的信息量公式与熵的期望结构并不相同,初学者容易混淆两者。

误区信息增益和基尼系数都是衡量混乱程度的,既然目的相同,那么它们选出来的最佳特征肯定完全一样。

正解两者的数学形态不同:熵用对数压缩概率,基尼用平方度量不纯度。对于某些分布,两个指标的变化速率不同,完全可能选出不同的分裂特征。比如一个特征能切出一小簇非常纯的数据,但其余部分依然混乱时,平方项会被主导概率拉低,基尼下降得更快;而熵的响应则相对平稳。所以在同一份数据上,ID3 和 CART 可能长出结构不同的树,这是正常现象。

为何常见:人们习惯把所有“纯度指标”归为一类,以为它们只是公式不同、结论等价,忽略了不同函数对不同概率分布的敏感度差异。

误区我在教科书里只在决策树那一章见过信息增益,所以它只是 ID3 算法的一个附属品,其他模型用不上。

正解信息增益的本质是“某个特征能降低多少不确定性”,这是一个通用的特征评估逻辑。它广泛用于特征工程中的特征筛选、文本分类的关键词抽取、推荐系统的候选特征排序、以及模型可解释性分析。即使你最终用的模型是逻辑回归或 XGBoost,也可以先用信息增益做一轮特征初筛,减少噪声并提升训练速度。

为何常见:绝大多数教材以决策树为引入场景,导致信息增益和树模型深度绑定,读者很难意识到它本身是一个独立的“信息价值度量”工具。

面试题

Q1. 信息熵的常用单位是下面哪一个?

单选题 · easy

  • A.bit,以 2 为底的对数← 正确答案
  • B.byte,以 10 为底的对数
  • C.没有单位,以 e 为底
  • D.无法确定的任意单位

答案:A。信息熵在机器学习与通信中最常用以 2 为底的对数,单位是 bit(比特)。以 e 为底对应 nat,以 10 为底对应 dit,但在决策树语境中默认是 bit,因此选 A。

Q2. 数据集 D 中 90 个是正样本,10 个是负样本,它的熵约为多少?

单选题 · easy

  • A.0.00
  • B.0.47← 正确答案
  • C.0.99
  • D.1.58

答案:B。H = -0.9×log2(0.9) - 0.1×log2(0.1) ≈ 0.469。熵不会为 0,因为类别不纯;也不会接近 1,因为 9:1 的比例已经明显偏向正类,混乱度相对中等。

Q3. 关于信息增益偏向多值特征的问题,下列说法正确的是?

多选题 · mid

  • A.特征取值越多,信息增益可能越大← 正确答案
  • B.信息增益比可以缓解该偏差← 正确答案
  • C.该偏差容易导致过拟合← 正确答案
  • D.信息增益比能完全消除所有偏差

答案:ABC。取值多的特征容易把数据切得很细,条件熵趋近于 0,信息增益虚高;增益比通过除以固有值校正这一点;但增益比本身也会引入新的保守倾向,不可能“完全消除所有偏差”,所以 D 错误。

Q4. C4.5 算法采用什么策略修正 ID3 的缺点?

单选题 · mid

  • A.使用信息增益比代替信息增益← 正确答案
  • B.使用基尼系数代替信息熵
  • C.限制每棵树的深度
  • D.对特征做归一化处理

答案:A。C4.5 的核心改进之一是用信息增益比代替信息增益,通过除以特征固有值来惩罚取值过多的特征。基尼系数是 CART 的选择,限制深度和归一化都不是 C4.5 的修正策略。

Q5. 二分类数据集中正负样本各占 50%,该数据集的熵是多少?

单选题 · mid

  • A.0
  • B.0.5
  • C.1← 正确答案
  • D.2

答案:C。H = -0.5×log2(0.5) - 0.5×log2(0.5) = 0.5 + 0.5 = 1,这是二分类中最混乱的情形,熵达到最大值 log2(2) = 1。

Q6. 以下关于信息熵与基尼系数的比较,正确的有?

多选题 · hard

  • A.两者都可以用于评价节点纯度← 正确答案
  • B.基尼只做平方运算,计算更快← 正确答案
  • C.两者选出的最优特征总是一样的
  • D.熵使用对数,对不均匀分布更敏感← 正确答案

答案:ABD。熵和基尼都能度量不纯度,熵包含对数运算,基尼只有平方运算,速度更快。但两者曲线形状不同,在部分分布上会选出不同特征,因此 C 错误。熵对极端概率的敏感度更高,D 正确。

Q7. 特征 A 将数据集分成三组,三组样本量相同,组内正样本占比分别为 0.95、0.5、0.05,该特征的条件熵约为多少?

单选题 · hard

  • A.0.29
  • B.0.52← 正确答案
  • C.0.72
  • D.0.98

答案:B。每组熵分别为 H(0.95)≈0.286、H(0.5)=1、H(0.05)≈0.286,三组等权,条件熵 = (0.286+1+0.286) / 3 ≈ 0.524。0.29 只是单组的熵,0.98 接近整体熵,均不正确。

Q8. ID3 算法在节点分裂时选择特征的规则是?

单选题 · easy

  • A.选择信息增益最大的特征← 正确答案
  • B.选择基尼系数最大的特征
  • C.随机选取一个特征
  • D.选择取值数量最多的特征

答案:A。ID3 的核心分裂准则是贪心地选择信息增益最大的特征,使当前节点的熵减少最多。基尼系数是 CART 的选择标准,随机选取和按取值数量选取都不是 ID3 的做法。

Q9. 下列哪些场景适合用信息增益做特征筛选?

多选题 · mid

  • A.文本分类中挑选关键词← 正确答案
  • B.银行信贷场景筛选核心特征← 正确答案
  • C.评估分类模型的整体准确率
  • D.回归任务中预测连续房价

答案:AB。信息增益适合评价离散特征对类别标签的区分能力,文本关键词和信贷特征都属于分类问题中的特征筛选。模型准确率是模型评估指标,连续房价回归问题属于回归场景,都不适用信息增益。

Q10. 若数据集 D 的所有样本都属于同一个类别,则加入任意特征 A 后,信息增益 g(D,A) 为?

单选题 · hard

  • A.一定为 0,因为 H(D)=0← 正确答案
  • B.一定大于 0,因为分裂后各子集更纯
  • C.等于特征 A 的固有值
  • D.无法确定,取决于 A 的取值分布

答案:A。数据集已经是纯类别,整体熵 H(D)=0。条件熵 H(D|A) 是对各子集熵的加权平均,非负且最小也为 0,因此 g(D,A)=H(D)-H(D|A) 一定为 0。无论特征 A 怎么分裂,都无法让“本来就不混乱”的数据变得更纯。