小李在城东开了家火锅店,锅底里总共放了二十多味调料,可顾客评价忽好忽坏。他请来一支由五十位老顾客组成的评审团,每人口味偏好各不相同,让他们盲测各批锅底。但小李最想知道的不是“这锅好不好吃”,而是:到底哪几味调料在决定成败?于是评审团边尝边记录每次判断的依据,小李又做了一组“抽掉某味调料看反应”的实验。最终一份调料重要度排行榜出炉——辣椒高居榜首,盐粒垫底。这份排行榜,就是机器学习里大名鼎鼎的“随机森林特征重要性”。本文就用这个火锅店的例子,带你理解它的两种主流算法:MDI 不纯度法和排列重要性法,以及它们如何帮你从一堆特征里揪出最关键的那几把钥匙。

岗位关联

学会随机森林特征重要性,你就掌握了特征筛选和模型可解释的利器:从一堆特征中快速锁定真正影响预测的少数关键变量,是高维数据分析与业务归因的核心技能。

目录
  1. 可视化演示
  2. 决策树基础
  3. 随机森林原理
  4. 特征重要性概念
  5. MDI不纯度法
  6. 排列重要性法
  7. 两法对比选择
  8. 特征选择应用
  9. 实战注意事项
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

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

MDI——不纯度减少 分裂时累加不纯度减少 训练中自动计算 高基数特征虚高! MDI=ΣΔGini/NTrees

决策树基础

小李想搞清楚锅底好坏,但一个人去尝,容易被一两个极端锅底带偏。于是他给每位评委设计了一张“判断题流程”:先看辣度是浓是淡,把锅底分成两堆;再看麻度、甜度、鲜度……每一个判断点,都让“这锅到底好不好”这个答案更确定一些。这张层层递进的流程表,就是一棵决策树。

决策树是随机森林的“单兵”。它从根节点出发,每次选一个特征(调味料)和一个切分阈值,把样本(锅底)分成两堆,目标是让“好吃”和“难吃”尽量分到不同堆里。衡量“分得有多干净”的指标,就是基尼不纯度。

基尼不纯度衡量一个节点里各类别混在一起的程度:若节点里全是同一类,基尼为 0,最纯;若两类各占一半,基尼为 0.5,最混乱。公式如下:

评委每做一个判断,锅底的“犹豫程度”就下降一截;哪一味调料能让犹豫程度降得最猛,他就优先用哪一味来切分。这个“优先切分”的选择,正是后面特征重要性记账的起点。

Gini(D)=1−∑k=1Kpk2\displaystyle Gini(D) = 1 - \sum_{k=1}^{K} p_k^2
基尼不纯度 = 1 减去各类别比例的平方和,数值越小说明节点越“整齐”,分裂时我们总想让不纯度降得最多。
  1. 类别比例 p_k若节点 D 里有 K 类样本,p_k 表示第 k 类占全部样本的比例
    pk=NkNp_k = \frac{N_k}{N}
  2. 平方求和把每个类别的比例先平方再加总,平方会让多数类的作用被放大
    ∑k=1Kpk2\sum_{k=1}^{K} p_k^2
  3. 一减取反用 1 减去平方和,就得到“混乱程度”,数值范围在 0 到 0.5 之间
    Gini(D)=1−∑k=1Kpk2Gini(D) = 1 - \sum_{k=1}^{K} p_k^2

随机森林原理

单个评委再有经验,也难免有口味盲区——有人吃不了辣,有人只爱麻。小李干脆组成了五十人的评审团,每位评委用“自助采样”从过往锅底中有放回地抽一批自己熟悉的口味作为训练素材;每次做判断题时,又只能从随机抽出的几味调料里选,不能看全所有调料。最后整锅好不好,由全体评委投票决定。

这两个“随机化”正是随机森林的精髓。自助采样让每棵树看到略有不同的数据,随机选特征让每棵树长成不同的形状;到了预测时,所有树投票,把“独断”变成“民主”,从而压低过拟合风险,提升整体稳定性。

每棵树独立训练、独立判断,森林最终用多数票定论。形式上可以写成:

五十位评委各自按随机清单反复建立“口味经验”,最后投票给出论断。这个“各有盲区、合起来靠谱”的评审团,就是随机森林的工作方式。

y^=arg⁡max⁡c∑t=1TI(y^t=c)\displaystyle \hat{y} = \mathop{\arg\max}_{c} \sum_{t=1}^{T} \mathbb{I}(\hat{y}_t = c)
森林预测结果 = 在全部类别中,选出被 T 棵树投票支持最多的那个类别。
  1. 单树预测第 t 棵决策树给出一个类别票,取值范围是 1 到 K
    y^t∈{1,2,…,K}\hat{y}_t \in \{1, 2, \ldots, K\}
  2. 指示函数括号内条件成立记为 1,否则记为 0,用来给投票计数
    I(y^t=c)\mathbb{I}(\hat{y}_t = c)
  3. 逐类求和把所有树的投票按类别加起来,得到每个类别的总票数
    ∑t=1TI(y^t=c)\sum_{t=1}^{T} \mathbb{I}(\hat{y}_t = c)
  4. 取最大值得票最多的类别成为森林的最终预测结果
    y^=arg⁡max⁡c∑t=1TI(y^t=c)\hat{y} = \mathop{\arg\max}_{c} \sum_{t=1}^{T} \mathbb{I}(\hat{y}_t = c)

特征重要性概念

评审团能评出好坏,可小李真正要的是“谁的功劳”。于是他让每棵树的决策路径都变成一本账:哪味调料在判断中起了决定性作用,就在谁的账上记一笔。把所有树的账汇总、排序,就得到调料排行榜——这就是特征重要性:回答“哪些特征对预测贡献最大”。

特征重要性有两大流派。第一派叫 MDI(基于不纯度减少),它翻看训练时的记账本,看谁让“混乱度”下降最多;第二派叫排列重要性,它做打乱实验,看随机换掉谁会让好评率暴跌。两派最后都输出每个特征的得分,得分越高越关键。

为了让不同模型、不同规模的特征之间可比,原始得分通常会做归一化,使所有特征得分之和等于 1,方便排序和后续画累积贡献曲线。

归一化就像把调料用量换算成“占配方的百分比”,排行榜一目了然。有了统一标尺,后面的累积贡献率曲线和筛选阈值才有计算基础。

VInorm(A)=VI(A)∑j=1PVI(j)\displaystyle VI_{norm}(A) = \frac{VI(A)}{\sum_{j=1}^{P} VI(j)}
归一化重要度 = 该特征原始得分 ÷ 全部特征得分之和,归一化后所有特征加起来恰好等于 1。
  1. 分子是原始得分VI(A) 是特征 A 的原始重要性,来自 MDI 记账或排列实验
    VI(A)VI(A)
  2. 分母是总账把所有 P 个特征的得分相加,得到全部特征的总贡献
    ∑j=1PVI(j)\sum_{j=1}^{P} VI(j)
  3. 相除得占比两者相除得到归一化占比,全部特征占比之和为 1
    VInorm(A)=VI(A)∑j=1PVI(j)VI_{norm}(A) = \frac{VI(A)}{\sum_{j=1}^{P} VI(j)}

MDI不纯度法

MDI 的记账规则很直接:每当一棵树的分裂节点用某味调料做出判断,就记下“这次判断让犹豫程度下降了多少”,再乘上这个节点覆盖的锅底数占比。一棵树训练完,把账本里该调料的所有记录加总;森林训练完,再对全部树取平均,得到最终得分。

这种“看过程”的方式在训练时顺带就算完了,零额外预测开销,所以速度极快。但也正因为它只看“分裂时是否好用”,会天然偏向取值种类多、更容易被拿来切分的高基数特征。

用符号表示,特征 A 的 MDI 得分为:

回到火锅店:MDI 像给每位评委配一个记账员,谁在判断时“一锤定音”的幅度大、次数多,账本上就记得多。五十本账平均之后,辣椒这种几乎每锅都起决定性作用的调料,账本自然最厚。

VIMDI(A)=1T∑t=1T∑s∈St(A)NsN(Gini(s)−∑v=1VNs,vNsGini(sv))\displaystyle VI_{MDI}(A) = \frac{1}{T} \sum_{t=1}^{T} \sum_{s \in S_t(A)} \frac{N_s}{N} \left( Gini(s) - \sum_{v=1}^{V} \frac{N_{s,v}}{N_s} Gini(s_v) \right)
特征 A 的 MDI 得分 = 所有树中,凡是使用 A 分裂的节点,其“样本占比 × 基尼下降量”的累加再取平均。
  1. 单次分裂下降量节点 s 用特征 A 分裂后,子节点加权基尼之和相对父节点下降多少
    ΔGini(s,A)=Gini(s)−∑v=1VNs,vNsGini(sv)\Delta Gini(s, A) = Gini(s) - \sum_{v=1}^{V} \frac{N_{s,v}}{N_s} Gini(s_v)
  2. 样本占比加权N_s 是节点 s 的样本数,N 是总样本数,大节点的判断更值得记功
    ws=NsNw_s = \frac{N_s}{N}
  3. 树内累加把同一棵树里所有用到特征 A 的节点的加权贡献相加
    ∑s∈St(A)NsNΔGini(s,A)\sum_{s \in S_t(A)} \frac{N_s}{N} \Delta Gini(s, A)
  4. 森林平均对所有 T 棵树取平均,消除单棵树的随机噪声
    VIMDI(A)=1T∑t=1T∑s∈St(A)NsNΔGini(s,A)VI_{MDI}(A) = \frac{1}{T} \sum_{t=1}^{T} \sum_{s \in S_t(A)} \frac{N_s}{N} \Delta Gini(s, A)

排列重要性法

记账可能偏袒“好切”的调料,小李又做了个更硬核的实验:把某一味调料的用量从各批锅底里随机抽出来重新打乱,再让评审团重新打分。如果好评率暴跌,说明这味调料是主心骨;如果几乎不变,说明它可有可无。这就是排列重要性的直观思想。

在技术上,我们对验证集的每个样本随机打乱某一个特征的取值,破坏它与标签之间的关联,然后观察模型预测精度下降了多少。下降得越多,说明模型越依赖这个特征,它的重要性就越高。

假设打乱 K 次取平均,特征 A 的排列重要性为:

这个“抽走实验”不看过程只看结果,所以对高基数特征的偏袒小得多;代价是要反复用模型预测,计算量远高于 MDI。在火锅店里,它就是“把调料随机换掉后,看顾客还买不买单”的硬核验证。

VIPerm(A)=1K∑k=1K(Accbase−Accshuffle(k))\displaystyle VI_{Perm}(A) = \frac{1}{K} \sum_{k=1}^{K} \left( Acc_{base} - Acc_{shuffle}^{(k)} \right)
特征 A 的排列重要性 = 多次打乱 A 的取值后,验证集精度相对基线精度的平均下降量。
  1. 基线精度不打乱任何特征时,模型在验证集上的预测准确率
    Accbase=1∣Dval∣∑i∈DvalI(y^i=yi)Acc_{base} = \frac{1}{|D_{val}|} \sum_{i \in D_{val}} \mathbb{I}(\hat{y}_i = y_i)
  2. 单次打乱精度第 k 次随机打乱特征 A 的取值后,重新预测得到的准确率
    Accshuffle(k)Acc_{shuffle}^{(k)}
  3. 求下降量基线精度减去打乱后精度,差值越大说明特征越重要
    Δk=Accbase−Accshuffle(k)\Delta_k = Acc_{base} - Acc_{shuffle}^{(k)}
  4. 重复取平均打乱 K 次取平均,抵消单次随机打乱带来的波动
    VIPerm(A)=1K∑k=1KΔkVI_{Perm}(A) = \frac{1}{K} \sum_{k=1}^{K} \Delta_k

两法对比选择

记账法快而便宜,实验法慢而公道。小李的经验是:先用 MDI 快速扫一遍全量调料,筛掉明显无关的;再对进入决赛圈的少数调料用排列重要性逐一体检,防止被“好切却无用”的调料骗了。

技术层面,两者的差异很清晰。MDI 在训练时顺带获得(sklearn 中的 feature_importances_ 就是它),零额外成本;排列重要性需要对每个特征重复打乱并重新预测,数据量大时开销可观。MDI 对高基数特征容易虚高,而排列重要性对强相关特征更稳健——因为打乱其中一个,能真实反映“少了他模型还稳不稳”。

两种方法给出的排名通常高度一致,我们可以用排名相关性来量化验证结果的可信度:

两种方法不是互斥而是互补:快速筛查用 MDI,关键验证用排列重要性。就像小李先靠账本锁定嫌疑调料,再用抽走实验对嫌疑犯逐一验明正身,两者互相兜底。

ρ=Cov(rMDI,rPerm)σMDI σPerm\displaystyle \rho = \frac{Cov(r^{MDI}, r^{Perm})}{\sigma_{MDI}\,\sigma_{Perm}}
排名相关系数衡量两个方法排序的吻合程度,越接近 1,说明 MDI 与排列重要性相互印证,结论越可靠。
  1. 排名向量将两个方法对每个特征给出的得分,分别转成排名序号
    rjMDI,rjPermr_j^{MDI}, \quad r_j^{Perm}
  2. 去中心化每个排名减去该方法的平均排名,消除整体高低的影响
    rj−rˉr_j - \bar{r}
  3. 协方差比标准差分子是两排名序列的协方差,分母是两者标准差之积,结果落在 -1 到 1 之间
    ρ=Cov(rMDI,rPerm)σMDI σPerm\rho = \frac{Cov(r^{MDI}, r^{Perm})}{\sigma_{MDI}\,\sigma_{Perm}}
  4. 解读一致性ρ 越接近 1,两个方法的排序越一致,特征排行榜越可信
    ρ≈1\rho \approx 1

特征选择应用

拿到排行榜,小李开始精简配方。他发现排名最后几味的得分趋近于零:把它们的用量随机打乱,好评率几乎不变。这说明它们是冗余或无关调料,砍掉它们,配方成本降低,味道却几乎不打折。

实际做特征选择时,我们会把归一化重要度降序排列,逐项累加得到“累积贡献率曲线”。曲线从陡变缓的拐点(俗称“肘部”)就是筛选阈值——取前 k 个特征贡献达到 80%,后面的特征就可以放心砍掉。

用公式表达,阈值的选择是:

精简后的配方好复制、省成本、不易翻车。在机器学习里,这对应着高维数据降维、发现冗余特征(高相关特征互相抢功劳),以及向业务方解释“到底哪些变量在驱动结果”。

k∗=min⁡{k:∑j=1ks(j)≥0.8}\displaystyle k^* = \min\left\{ k : \sum_{j=1}^{k} s_{(j)} \geq 0.8 \right\}
在重要度从大到小排序后,找到使累积贡献率首次达到 80% 的最小特征数,这就是筛选取舍点。
  1. 降序排列把归一化重要度从大到小排成一列,得到有序序列
    s(1)≥s(2)≥⋯≥s(P)s_{(1)} \geq s_{(2)} \geq \cdots \geq s_{(P)}
  2. 累加前 k 项把排名前 k 个特征的得分加总,得到累积贡献
    ∑j=1ks(j)\sum_{j=1}^{k} s_{(j)}
  3. 取最小达标数用 min 取满足“累积贡献 ≥ 0.8”的最小 k,作为筛选阈值
    k∗=min⁡{k:∑j=1ks(j)≥0.8}k^* = \min\left\{ k : \sum_{j=1}^{k} s_{(j)} \geq 0.8 \right\}

实战注意事项

小李交过一笔学费:有一次他把“顾客是否提前预约”也当成调料加进锅底实验,结果它高居榜首——因为能预约的几乎都是回头客,这味调料偷偷泄露了结局。这就是数据泄漏:特征里混入了与标签间接相关的信息,导致重要度虚高得离谱。

还有几个坑。高度相关的调料(比如辣椒粉和干辣椒)会互相抢功劳,两个排名都被压低;单次训练出来的排名带有随机波动,换个随机种子可能就变;最重要的一点是——重要度高说明“预测上关联强”,绝不等于“业务上因果强”。

为了量化排名波动,可以多次训练并计算特征得分的标准差:

认清这些坑,排行榜才不会骗人。火锅店最终写进菜单的配方,是“排除了泄漏特征、验证过稳定性、只做关联解读”之后才敢定的。数据世界里,特征重要性应当被视为“值得怀疑的线索”,而不是“铁板钉钉的真相”。

Std(VI(r)(A))=1R−1∑r=1R(VI(r)(A)−VI‾(A))2\displaystyle Std\big(VI^{(r)}(A)\big) = \sqrt{\frac{1}{R-1} \sum_{r=1}^{R} \left( VI^{(r)}(A) - \overline{VI}(A) \right)^2}
多次训练所得重要性得分的标准差越大,说明该特征的排名越不稳定,使用它时越要多一分谨慎。
  1. 多轮得分换 R 个随机种子重复训练 R 次,得到特征 A 的一组得分
    VI(1)(A),VI(2)(A),…,VI(R)(A)VI^{(1)}(A), VI^{(2)}(A), \ldots, VI^{(R)}(A)
  2. 平均得分先对 R 轮得分求平均,作为波动比较的中心基准
    VI‾(A)=1R∑r=1RVI(r)(A)\overline{VI}(A) = \frac{1}{R} \sum_{r=1}^{R} VI^{(r)}(A)
  3. 偏差平方和每轮得分减平均分之差平方后求和,再除以 R-1,得到方差
    1R−1∑r=1R(VI(r)(A)−VI‾(A))2\frac{1}{R-1} \sum_{r=1}^{R} \left( VI^{(r)}(A) - \overline{VI}(A) \right)^2
  4. 开根号得标准差对方差开平方,得到波动大小的直观度量
    Std(VI(r)(A))=1R−1∑r=1R(VI(r)(A)−VI‾(A))2Std\big(VI^{(r)}(A)\big) = \sqrt{\frac{1}{R-1} \sum_{r=1}^{R} \left( VI^{(r)}(A) - \overline{VI}(A) \right)^2}

AI 应用场景

信贷风控模型的快速特征筛

阶段:特征工程 / 模型解释

解决的问题:传统做法把几十上百个字段全部塞进模型,训练慢、过拟合风险高、业务解释难。利用随机森林特征重要性先给字段排名,筛掉得分趋零的冗余特征,再用 Top-K 特征重训模型,精度几乎不变,模型却大幅简化。

具体案例:某消费金融公司有借款人年龄、收入、负债率、征信查询次数、设备型号等 60 个字段。用 MDI 快速排序后发现,征信查询次数、负债率、近 6 个月收入波动贡献了约 80% 的重要度,设备型号、星座等基本为 0。砍到 8 个特征后 AUC 仅下降 0.002,模型上线推理时间减半。

电商流失预警的业务归因

阶段:结果解释 / 业务决策

解决的问题:运营只知道“用户可能要走”,却不知道“因为什么要走”。树模型本身是黑盒,用排列重要性找出让流失概率波动最大的行为特征,给出可落地的归因解释。

具体案例:某电商对近 90 天未复购用户建模,排列重要性显示“最近登录距今天数”和“优惠券核销次数”排名前二,而“注册时长”几乎无影响。运营据此调整召回策略:主攻活跃下降期的触达,不再对老会员一刀切发券。

医疗辅助诊断的可解释报告

阶段:模型可解释性 / 临床辅助

解决的问题:医生不敢用黑盒模型。利用随机森林重要性输出“哪些检查指标对判断起了决定性作用”,并附上排列实验和稳定性信息,帮助医生复核模型结论。

具体案例:某医院用 30 项血常规指标预测败血症风险,特征重要性前三名是乳酸、降钙素原和白细胞计数,与临床共识高度吻合。模型生成的报告会标注这三项为“决策依据”,医生采纳率显著提升。

Python 演示

python47 行
import numpy as npfrom sklearn.datasets import make_classificationfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.model_selection import train_test_splitfrom sklearn.inspection import permutation_importance  def main():    # 1. 造一批锅底数据, 其中 8 个特征真正影响标签    X, y = make_classification(        n_samples=1200,        n_features=20,        n_informative=8,        n_redundant=4,        n_classes=2,        random_state=42,    )    X_train, X_test, y_train, y_test = train_test_split(        X, y, test_size=0.3, random_state=42    )     # 2. 组建随机森林评审团并训练    forest = RandomForestClassifier(n_estimators=300, random_state=42)    forest.fit(X_train, y_train)     # 3. MDI 记账法, 训练时免费得到的特征重要性    mdi = forest.feature_importances_     # 4. 排列实验法, 打乱每个特征后看精度下降    result = permutation_importance(        forest, X_test, y_test, n_repeats=10, random_state=42    )    perm = result.importances_mean     # 5. 打印两种方法排序对比    print("特征  MDI    排列重要性")    for i in range(X.shape[1]):        print(f"F{i:02d}  {mdi[i]:.4f}  {perm[i]:.4f}")     # 6. 用 MDI 排名挑选 Top-8 特征    order = np.argsort(mdi)[::-1]    top8 = sorted(order[:8].tolist())    print("挑选出的 Top-8 特征编号:", top8)  if __name__ == "__main__":    main()
目的:一次性跑通“训练随机森林 → 得到 MDI 特征重要性 → 计算排列重要性 → 打印两种排行榜 → 筛选 Top-8 特征”的完整流程。
  1. make_classification(...)生成 20 个特征的数据集,其中只有 8 个与标签真正相关,模拟“关键调料混在调料堆里”
  2. RandomForestClassifier(n_estimators=300, random_state=42)300 棵树组成的评审团,固定随机种子方便复现
  3. forest.fit(X_train, y_train)评审团开始品尝和学习
  4. mdi = forest.feature_importances_直接读出 MDI 记账结果,训练时免费获得
  5. permutation_importance(...)对每个特征做打乱实验,n_repeats=10 表示每特征打乱 10 次取平均
  6. np.argsort(mdi)[::-1]把重要度从大到小排序,得到特征编号的降序列表
  7. if __name__ == "__main__":让脚本可以直接运行并输出结果

常见误区

误区“辣椒重要度 0.4,那去掉辣椒精度就会掉四成吧?这个数字很直观,直接当贡献率用就好了。”

正解MDI 的归一化只是相对占比,不代表“删掉后精度一定下降这么多”。高度相关的特征会互相抢功劳,单独看某个数字很容易误判。真实贡献要用排列重要性或重新训练评估才能确认。

为何常见:sklearn 默认把 feature_importances_ 归一化到总和为 1,形似百分比,让人自然误认为是可分解的独立贡献率。

误区“排列重要性又要调参又要重新预测,太慢了。MDI 是官方训练时算好的,肯定靠谱,直接用就行。”

正解MDI 对高基数特征有偏好,且只反映训练时的分裂过程;排列重要性用真实精度变化度量,更能反映泛化层面的重要度。实践中建议两者都算、互相印证。

为何常见:MDI 免费且随模型直接输出,很多人在项目里图省事只读这一个数,不知道它的偏向性。

误区“排名第一的调料肯定是因为它本身好吃,才决定了顾客好评,这不就是因果关系吗?”

正解特征重要性只刻画预测关联。比如“排队人数”与“好吃”强相关,但排队人数不是好吃的因。要谈因果,必须结合领域知识和受控实验。

为何常见:大脑天生喜欢为强关联编造因果故事,尤其是当特征本身带有业务含义时,更容易想当然。

误区“排行榜靠后的肯定没用,直接全部删掉,模型肯定更快还不掉点。”

正解低重要度可能来自与高重要特征强相关导致功劳被分摊,也可能只是当前模型没利用好它。删特征后必须在验证集上重新训练评估,不能只看一次排名就下结论。

为何常见:把一次实验的重要性排名当成了“一锤定音”的硬证据,忽略了相关性和模型随机性的影响。

误区“线性模型都要标准化,那随机森林先做归一化,特征重要性肯定也更准吧?”

正解随机森林是树模型,分裂时只比较阈值,不受量纲影响。标准化不会让重要性更准,反而多做了无用操作。真正应该关注的是数据泄漏、特征相关性和样本平衡。

为何常见:从线性模型或神经网络迁移过来的习惯——那些模型对特征尺度敏感,但树模型并不需要。

面试题

Q1. 随机森林中,一棵决策树在分裂时应如何选择特征?

单选题 · easy

  • A.随机抽取特征直接划分
  • B.不纯度下降最多的特征← 正确答案
  • C.与标签相关性最大的特征
  • D.出现次数最多的那个特征

答案:B。决策树分裂时会在候选特征中选使基尼不纯度下降最多的那一个;随机性只体现在候选特征子集的抽取上,而不是直接乱划分。相关系数大不等于分裂效果好,出现次数多也不代表不纯度下降多。

Q2. MDI 特征重要性统计的核心思路是什么?

单选题 · mid

  • A.特征被选作分裂点的次数
  • B.加权不纯度下降的累加均值← 正确答案
  • C.特征与标签的相关系数
  • D.特征自身方差的大小

答案:B。MDI 不只看“用了多少次”,而是把每次分裂带来的基尼下降按样本占比加权后,在一棵树内累加,再对森林所有树取平均。只看次数会把高基数但没什么用的特征排到前面,方差和相关系数则根本不是 MDI 的度量。

Q3. 排列重要性方法的核心操作是什么?

单选题 · mid

  • A.打乱特征后看精度下降← 正确答案
  • B.删除特征后重新训练
  • C.将特征数值做随机缩放
  • D.用另一模型预测该特征

答案:A。排列重要性把某个特征在验证集上的取值随机打乱,破坏它与标签的关联,再观察精度下降幅度。它不需要重新训练模型,只是多次重新预测;删除重训和随机缩放都不是标准做法。

Q4. 关于 MDI 与排列重要性,下列说法正确的有?

多选题 · mid

  • A.MDI 在训练时可直接获得← 正确答案
  • B.排列重要性需要重复预测← 正确答案
  • C.MDI 对高基数特征更友好← 正确答案
  • D.排列重要性普遍算得更快

答案:ABC。MDI 随训练免费产出,排列重要性要对每个特征做多次打乱预测,速度通常更慢,所以 D 错误。MDI 因“越容易切分越占便宜”而对高基数特征更友好,A、B、C 均正确。

Q5. 两个高度相关的特征同时建模,MDI 重要度通常会出现什么情况?

单选题 · hard

  • A.两者重要度都会升高
  • B.功劳被分摊导致都被低估← 正确答案
  • C.一个升高而另一个降低
  • D.不受任何明显的影响

答案:B。高度相关的特征携带相似信息,树在分裂时随机选择其中一个,功劳会被两个特征摊薄,因此两者的 MDI 都被低估。这提醒我们:低重要度不一定没用,也可能是“另一个影子”抢了功劳。

Q6. 特征选择时使用累积贡献率曲线,主要目的是?

单选题 · easy

  • A.找到贡献达标的最少特征数← 正确答案
  • B.把特征的重要度画成曲线
  • C.计算特征之间的相关系数
  • D.自动填补缺失的观测值

答案:A。累积贡献率曲线把重要度从大到小逐项累加,曲线拐点(肘部)对应的 k 就是“累积贡献首次达到阈值(如 80%)”的最少特征数,用于确定筛选阈值。画曲线本身不是目的,相关系数和补缺失值与它无关。

Q7. 以下哪种情况最容易导致特征重要性虚高?

单选题 · mid

  • A.特征里混入标签的衍生信息← 正确答案
  • B.特征名称使用了中文命名
  • C.模型训练时固定了随机种子
  • D.训练之前做了特征标准化

答案:A。数据泄漏(特征里混入与标签间接相关的未来信息或标签派生信息)会让特征显得极其重要,因为模型“偷看了答案”。中文命名、随机种子和标准化都不会造成虚高。

Q8. 要判断特征重要性排名是否稳定,正确的做法有哪些?

多选题 · hard

  • A.换多个随机种子反复训练← 正确答案
  • B.比较多次实验的排名波动← 正确答案
  • C.只跑一次后立即下结论
  • D.交叉验证各折分别计算再汇总← 正确答案

答案:ABD。随机森林有自助采样和随机选特征的随机性,单次排名可能波动。换随机种子多跑几次、比较排名变化、或用交叉验证各折分别计算再汇总,都能评估稳定性;只跑一次恰恰是误区所在。

Q9. 关于随机森林的自助采样,正确的说法有?

多选题 · easy

  • A.每棵树用有放回抽样得到样本← 正确答案
  • B.约三成样本会成为袋外数据← 正确答案
  • C.所有树使用完全相同的样本
  • D.抽样时连特征也全部重排

答案:AB。自助采样是对样本做有放回抽样,因此同一棵树里可能有重复样本,而大约 36.8%(约三成)的样本不会被抽到,称为袋外样本。所有树用相同样本就失去了随机性;特征重排不是自助采样的含义。

Q10. 特征 A 的 MDI 重要度恰好是特征 B 的两倍,下列推断最合理的是?

单选题 · extreme

  • A.A 的真实贡献至少是 B 的两倍
  • B.A 在分裂中的不纯度贡献更大← 正确答案
  • C.删除 B 后精度必然明显下降
  • D.A 和 B 之间必然没有相关

答案:B。MDI 衡量的是训练过程中不纯度下降的贡献,它受基数、相关性等因素影响,不能直接外推为真实预测贡献,更不能推出删除后果。两倍关系只说明在分裂层面 A 贡献更大,B 是唯一合理的推断。