深夜的警局会议室里,老探长把三套假说摊在桌上:“A 嫉妒 B”、“A 与 C 联手”、“A、B、C 三人多年恩怨”。同一份证据,说法却有好几种。他皱着眉说:“光靠直觉没法给假说排序,得有一把统一标准的尺子在候选假说之间比出高下。”在因果发现领域,这把尺子就是评分函数。它的工作方式出奇简单:先看每套假说能多好地解释证据(对应“似然项”),再从总分里扣掉“把案子讲得太复杂”的代价(对应“复杂度惩罚项”)。BIC 像一位信奉“如无必要勿增实体”的务实探长——取证越多,越不买阴谋论的账;BDeu 像一位翻遍三十年卷宗的老师傅——手里握着先验经验,证据再少也能给出判断。这篇文章,就是带你认识这两位探长:他们各自的打分公式是什么、什么时候该派谁出场,以及如何把他们编入你的算法办案流程。

岗位关联

掌握 BIC/BDeu 评分函数是分数式因果发现的必修课,它决定你能否从观测数据中筛出真正可靠的因果结构,是数据科学家与 AI 工程师构建决策系统的关键设计决策。

目录
  1. 可视化演示
  2. 评分函数定位
  3. 似然项原理
  4. 复杂度惩罚
  5. BIC公式
  6. BDeu先验
  7. 超参数选择
  8. 实践对比
  9. 工程应用
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示分数式因果发现中BIC/BDeu评分函数:Score=LogL-Penalty,似然项衡量拟合优度,复杂度惩罚项控制模型复杂度,寻找最优DAG结构。

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

BIC/BDeu评分 LogL似然项 衡量DAG拟合优度 Penalty惩罚项 控制模型复杂度 BIC=LogL-(k/2)log(n) 最优DAG=最大评分结构

评分函数定位

深夜的会议室里,老探长把三套假说摊在桌上:“A 嫉妒 B”、“A 与 C 联手”、“A、B、C 三人多年恩怨”。证据明明只有一份,说法却有好几种。光靠直觉没法排序,他需要一把统一标准的尺子。在因果发现里,这把尺子就是评分函数——它把“哪个因果图更可信”变成可量化的数字。

我们把“假说”换成术语,就是有向无环图(DAG);把“证据”换成术语,就是观测数据 D。基于分数的方法要做的事非常直白:定义一个打分函数 score(G|D),然后在巨大的候选图空间里搜索,找到分数最高的那张图。这就是把“找因果”变成优化问题。评分函数有两个设计目标:一是拟合优度,图要能解释数据;二是复杂度控制,图不能为了解释数据而长成“千手观音”。特别要记住,分数本身没有绝对意义——“-52.3“不等于”差”,它唯一的用途是候选图之间的相对排序。

搜索策略与打分是搭档关系:爬山算法、禁忌搜索、精确搜索都在为同一个目标服务——找到分数最高的 DAG。分数最高不保证就是真实因果图,但在统计意义下,它是最可能生成这份数据的结构。现实中没有真图对照,我们只能通过打分排序,选出“证据支持下最可信”的假说。

探长的尺子并不指认哪个绝对正确,它只负责在两两之间给出“哪个更可信”的排序。有了这把尺子,后面的一切推理才有了起点。

似然项原理

探长打分的第一步是计算“吻合度”:如果 A 嫉妒 B,那么作案时间、动机、目击证词是否都对得上?每个证据点都有一个“对得上”的概率,把这些概率连乘起来,就是这套假说整体解释证据的完整程度。

在模型中,这个“完整程度”叫做似然 P(D|G, θ)。给定一张图 G 和一组参数 θ,似然衡量“如果数据真是这么生成的,我们看到这份数据的概率”。连乘会让数字小得离谱,所以习惯上取对数,把乘法变成加法,数值也更稳定。

探长把“证据吻合度”拆成一个个细小环节逐一核对:动机、时间线、目击证词……每个环节都给出一个“对得上”的分数,最后汇总。吻合度越高的假说,初试分数越高。可问题来了:越是“什么都能解释”的假说,越值得警惕。

ln⁡L(G∣D)=∑i=1pln⁡P(xi∣PaiG,θ)\displaystyle \ln L(G \mid D) = \sum_{i=1}^{p} \ln P(x_i \mid \text{Pa}_i^{G}, \theta)
这张图的对数似然,等于每个变量在其父节点条件下的对数概率之和。
  1. 按变量求和把 p 个变量的对数条件概率逐一相加,整体似然是每个局部环节的分数之和。
    ∑i=1p\displaystyle \sum_{i=1}^{p}
  2. 条件概率每个变量 x_i 只依赖它在图 G 中的父节点集合 Pa_i^G,与图中其他“非后代”节点条件独立——这正是贝叶斯网络“局部依赖”的灵魂。
    P(xi∣PaiG,θ)\displaystyle P(x_i \mid \text{Pa}_i^{G}, \theta)
  3. 连接词的对数取对数后乘号变加号,数值上更稳定,也便于后续与复杂度惩罚线性相加。
    ln⁡\displaystyle \ln

复杂度惩罚

老探长有个铁规矩:“把案子讲得越玄乎,就得拿出越多的证据。”一个假说若要扯进三个人、两场预谋、一次巧合,它就自带“信用折扣”。模型世界的“玄乎程度”用什么衡量?最直接的是参数个数 d。

对离散变量,每个节点的条件概率表大小,取决于它自己和父节点的取值状态数。把所有节点需要的参数加起来,就是整张图需要估计的参数总量:

d 越大,模型越“精致”,拟合数据越容易——但风险是过拟合:把噪声当成信号背下来。真正的好模型应该像探长那样,用最少的关键环节解释最多的事实。所以评分函数不只奖励吻合度,还要从总分里扣掉复杂度。奥卡姆剃刀在这里不是哲学口号,而是数学公式。

d=∑i=1p(ri−1)×∏j∈PaiGrj\displaystyle d = \sum_{i=1}^{p} (r_i - 1) \times \prod_{j \in \text{Pa}_i^{G}} r_j
参数总量 = 每个节点“自由取值数减一”乘以其父节点取值组合数,再全图求和。
  1. 单节点参数块变量 x_i 有 r_i 个取值,条件概率表每行的自由度为 r_i - 1(因为该行概率之和必须等于 1,最后一个取值被“归一化”约束住了)。
    (ri−1)\displaystyle (r_i - 1)
  2. 父配置数量父节点取值组合数等于各父节点状态数连乘,代表条件概率表的行数——父节点越多,表越庞大。
    ∏j∈PaiGrj\displaystyle \prod_{j \in \text{Pa}_i^{G}} r_j
  3. 全图求和把每个节点的参数块加起来,得到全图参数总量 d,作为模型复杂度的统一度量。
    ∑i=1p\displaystyle \sum_{i=1}^{p}

BIC公式

老探长把“扣分”做成了固定收费标准:分数 = 证据吻合度 − 复杂度 × 标准系数。而且,随着他调查越深入(样本量越大),他对“多余环节”的容忍度就越低。这个收费标准的学名叫 BIC(贝叶斯信息准则),它并非拍脑袋定义,而是从贝叶斯因子的拉普拉斯近似中推导出来的经典渐近公式。

BIC 有一个漂亮的性质叫大样本一致性:当样本量趋于无穷时,生成数据的真实结构会以概率 1 获得最高分,因为虚假依赖在无限数据面前藏不住。实用上它只需要最大似然参数估计,不需要额外设定先验超参数,计算成本极低。注意 BIC 分数通常为负数,这完全正常——我们只看相对大小。

老探长心里有杆秤:取证越充分,他越不买“巧合 + 阴谋”的账。BIC 把这杆秤的读数写成了公式,任何拿到数据的人都能复现同样的判断。

BIC(G∣D)=ln⁡L(G∣D)−d2ln⁡n\displaystyle \text{BIC}(G \mid D) = \ln L(G \mid D) - \frac{d}{2} \ln n
BIC = 对数似然 − 二分之一参数个数乘样本量的自然对数,前一项是奖励,后一项是扣分。
  1. 似然项第一项是对数似然,代表图对数据的拟合能力,数值越高说明解释得越好。
    ln⁡L(G∣D)\displaystyle \ln L(G \mid D)
  2. 参数个数 d第二项里的 d 是整张图的参数总量,节点越多、边越多,d 越大,扣分基数越高。
    d\displaystyle d
  3. 惩罚系数0.5 × ln n 随样本量 n 增大而增大——样本越多,每多引入一个参数的代价越高。
    12ln⁡n\displaystyle \frac{1}{2} \ln n
  4. 整体扣分负号表示从拟合分中减去复杂度代价,最终分数高者胜出。
    −d2ln⁡n\displaystyle - \frac{d}{2} \ln n

BDeu先验

另一位探长的风格截然不同。他办案前先翻三十年卷宗:“年轻人多是单人冲动作案,惯犯才玩团伙预谋。”这份经验在证据不足时格外有用。BDeu(贝叶斯-狄利克雷等价均匀先验)就是带着“脑内卷宗”上场的评分函数。

BDeu 走的是纯贝叶斯路线:把参数 θ 也当成随机变量,用狄利克雷分布描述它的先验,再对所有参数积分,得到边际似然 P(D|G)。先验的强弱由一个超参数——等效样本量 α 控制:

等效样本量 α 的含义是:我们主观上“预先见过了” α 个样本,默认取 10 是很多开源库的惯例。伪计数的存在让小样本下分数稳定,代价是 BDeu 计算比 BIC 重,且经典版本面向离散数据,连续变量要先做离散化。

老师傅的“脑内卷宗”并非空穴来风:α 个等效历史案例规定了先验强度。卷宗越厚,他越不容易被一两个新鲜证据带偏;卷宗越薄,他越贴近现场。

BDeu(G∣D)=∑i=1p∑j=1qi[ln⁡Γ(α/qi)Γ(Nij+α/qi)+∑k=1riln⁡Γ(Nijk+α/(qiri))Γ(α/(qiri))]\displaystyle \text{BDeu}(G \mid D) = \sum_{i=1}^{p} \sum_{j=1}^{q_i} \left[ \ln\frac{\Gamma(\alpha/q_i)}{\Gamma(N_{ij} + \alpha/q_i)} + \sum_{k=1}^{r_i} \ln\frac{\Gamma(N_{ijk} + \alpha/(q_i r_i))}{\Gamma(\alpha/(q_i r_i))} \right]
BDeu 把“先验见过的 α 个等效样本”按父配置和取值均匀分配为伪计数,再与真实计数 N 一起通过 Gamma 函数计算边际似然。
  1. 双层遍历对每个变量 i 的每种父节点配置 j 分别计算局部分数,再全部累加。
    ∑i=1p∑j=1qi\displaystyle \sum_{i=1}^{p} \sum_{j=1}^{q_i}
  2. 先验归一项把等效样本量 α 平均分给 q_i 种父配置,用 Gamma 对数比评估“这个父配置出现的先验概率与数据后验之比”。
    ln⁡Γ(α/qi)Γ(Nij+α/qi)\displaystyle \ln\frac{\Gamma(\alpha/q_i)}{\Gamma(N_{ij} + \alpha/q_i)}
  3. 数据计数项N_ijk 是“变量 i 取第 k 个值且父配置为 j”的真实出现次数;α/(q_i r_i) 是分到每个取值格子的伪计数,两者相加避免零计数。
    Nijk+αqiri\displaystyle N_{ijk} + \frac{\alpha}{q_i r_i}
  4. Gamma 归一分母中的 Γ(α/(q_i r_i)) 保证先验分布是合法的概率分布,同时也让整个式子成为可比较的分数。
    Γ(⋅)Γ(α/(qiri))\displaystyle \frac{\Gamma(\cdot)}{\Gamma(\alpha/(q_i r_i))}
  5. 整体含义对参数积分得到边际似然,数据与先验共同决定分数——先验在样本少时“垫底”,数据在样本多时“主导”。

超参数选择

警局发现两位探长可以“调教”:给老师傅多塞些卷宗,他就更信经验;让他少看点,他就更信现场。破案风格没有绝对好坏,关键是与案子匹配。把两位探长的评分放进同一个框架,就得到广义评分公式,其中 λ 代表对复杂度的扣分力度:

实践中怎么选?小样本离散数据 + 有领域先验 → BDeu,α 从 1 到 30 做网格搜索,观察结构是否稳定;大样本连续数据 → BIC 足够。无论哪种,都要先摸清数据特性:变量是连续还是离散、样本是否充足、是否有已知的因果顺序约束。这些决定了评分函数与搜索策略的搭配,也决定了最终结构的可信度。

调参的本质,是告诉探长你有多信任他的风格:先验强的老师傅适合证据稀碎的旧案,务实刻板的探长适合证据海量的新案。

score(G∣D)=ln⁡L(G∣D)−λ×d\displaystyle \text{score}(G \mid D) = \ln L(G \mid D) - \lambda \times d
评分 = 对数似然 − λ × 参数个数,λ 是模型复杂度的“单价”。
  1. λ 的含义λ 是每多一个参数要付出的分数代价,它直接决定了模型偏好——λ 大则偏好简单,λ 小则偏好复杂。
    λ×d\displaystyle \lambda \times d
  2. 与 BIC 的关系当 λ = 0.5 ln n 时,公式退化为 BIC,λ 随样本量自适应增长。
    λ=12ln⁡n\displaystyle \lambda = \frac{1}{2}\ln n
  3. 与 BDeu 的关系BDeu 中没有显式 λ,但等效样本量 α 越大,先验越强,等效于对复杂结构施加更保守的压力。
    α↑⇒先验↑\displaystyle \alpha \uparrow \Rightarrow \text{先验} \uparrow

实践对比

警局要派探长出任务:一起是监控录像多到硬盘存不下的盗窃案,一起是 20 年前只有三份口供的悬案。该派谁?答案显而易见。BIC 与 BDeu 的分工,正对应这两种案子。

BIC 的优势在大样本下的渐近可靠性和极低计算成本——它只需一次极大似然估计。BDeu 的优势在小样本下的稳定性——伪计数天然平滑零计数,先验补充了数据缺失的信息。两者在小样本时的差异尤其明显:BIC 的惩罚系数 0.5 ln n 在 n 很小时偏小,可能奖励过复杂的图;BDeu 的伪计数则像给每个格子“垫底”,避免极端概率让结构跟着噪声走。

变量类型也要纳入考量:BIC 配高斯似然可直接处理连续数据;经典 BDeu 面向多项分布,连续数据必须先离散化(分箱或聚类),而离散化的粒度本身又成了一个超参数。计算开销上,BIC 只算 MLE 和参数个数,极快;BDeu 涉及 Gamma 函数与多维计数统计,在大图上更慢。

选探长不看名气,看案子的证据量和可靠性。数据量大、证据干净,务实探长 BIC 足矣;数据稀少、噪声满天飞,老师傅 BDeu 的经验才是救命稻草。

工程应用

警局最终把两位探长的打分标准固化成了标准办案流程:取证 → 打分 → 搜索 → 复核。任何人按这个流程都能复现同样的结论。工程上的分数式因果发现,也是一条标准流水线:数据预处理、评分函数定义、结构搜索、结果验证。

开源工具已经把这套流程封装好了:Python 的 pgmpy 提供 BDeu/BIC 评分与 HillClimbSearch;causal-learn 内置多种 score-based 方法;R 的 bnlearn、Java 的 Tetrad 也各有实现。它们共同的分工是:评分函数当“裁判”,搜索算法当“跑腿”。

工程落地时建议配合 bootstrap 重采样:把原始数据重采样上百份,每份跑一遍结构学习,统计每条边出现的频率作为置信度,只保留高置信度边。最后再与领域知识对照,避免“统计上显著、物理上荒谬”的因果结论。评分函数只给出“最可能的图”,它不等于真相——结合干预实验和专家校验,才能让模型真正可用。

有了标准流程,探长的直觉变成了可量化、可追溯、可复现的算法。每一次因果判断背后,都有一张白纸黑字的打分表。

AI 应用场景

基因调控网络推断

阶段:结构学习与模型选择

解决的问题:基因表达数据样本少(几十到几百)、维度极高,直接回归极易过拟合。BDeu 的伪计数与先验平滑让稀疏数据下的边估计更稳;BIC 则在批量组学数据中作为快速基线。

具体案例:某课题组拿到乳腺癌 RNA-seq 表达矩阵,p = 2000 个基因、n = 150 个样本。他们先将表达量离散化,再用 BDeu(等效样本量 α = 10)执行 bootstrap 100 次结构搜索,保留出现频率高于 0.8 的调控边,最终锁定了一批与已知通路吻合的候选调控关系。

电商用户行为因果链路

阶段:因果结构发现

解决的问题:日志数据海量(百万级以上),希望从“曝光 → 点击 → 加购 → 支付”中找出真正的因果驱动关系,从而指导投放策略。BIC 大样本一致性强、计算快,适合此类场景。

具体案例:某电商离线分析用户行为日志,用 BIC 对行为变量打分并配合爬山搜索,发现“加购 → 支付”的因果强度远高于“曝光 → 支付”,据此调整推荐排序与优惠券投放时机,转化率显著提升。

工业故障根因定位

阶段:根因分析

解决的问题:生产设备传感器同时报警时,需要判断故障传播的方向。传感器数据量中等,且工程师对“哪些故障常伴随出现”有经验认知。BDeu 能把这些经验编码为先验。

具体案例:某工厂将报警序列离散化后,用 BDeu 评分搜索故障传播 DAG,α 设为工程师估计的等效样本量 20,输出根因节点 Top-3,将排障时间从小时级缩短到分钟级。

Python 演示

python62 行
import numpy as np  def generate_data(n_samples=2000, seed=42):    # 按隐藏的真实结构 X -> Y -> Z 生成高斯数据    rng = np.random.default_rng(seed)    x = rng.normal(0, 1, n_samples)    y = 0.8 * x + rng.normal(0, 0.6, n_samples)    z = 0.5 * y + rng.normal(0, 0.6, n_samples)    return np.stack([x, y, z], axis=1)  def fit_local(data, child, parents):    # 用最小二乘拟合局部条件高斯模型,返回残差方差与参数个数    y = data[:, child]    if len(parents) == 0:        var = ((y - y.mean()) ** 2).mean()        return var, 1    x_mat = np.column_stack([np.ones(len(y))] + [data[:, p] for p in parents])    beta, _, _, _ = np.linalg.lstsq(x_mat, y, rcond=None)    resid = y - x_mat @ beta    return (resid ** 2).mean(), len(parents) + 1  def loglik_and_params(data, edges):    # 返回整个 DAG 的对数似然与参数总数    n, p = data.shape    ll, total_params = 0.0, 0    for child in range(p):        var, k = fit_local(data, child, edges.get(child, []))        var = max(var, 1e-9)        ll += -n / 2 * np.log(2 * np.pi * var) - n / 2        total_params += k    return ll, total_params  def bic(data, edges):    # BIC = 对数似然 - 0.5 * 参数数 * ln(样本量)    n = data.shape[0]    ll, d = loglik_and_params(data, edges)    return ll - 0.5 * d * np.log(n)  def main():    data = generate_data(n_samples=2000)    # 节点编号: 0=X, 1=Y, 2=Z    candidates = {        "empty": {},        "X->Y->Z": {1: [0], 2: [1]},        "X->Y & X->Z": {1: [0], 2: [0]},        "full": {1: [0], 2: [0, 1]},    }    print("structure    loglik   params   BIC")    for name, edges in candidates.items():        ll, d = loglik_and_params(data, edges)        print(f"{name:<12} {ll:8.1f} {d:6d} {bic(data, edges):10.1f}")    best = max(candidates, key=lambda k: bic(data, candidates[k]))    print("Best structure by BIC:", best)  if __name__ == "__main__":    main()
目的:生成符合真实结构 X→Y→Z 的合成数据,用 BIC 给四张候选 DAG 打分排序,复现“似然拟合与复杂度惩罚平衡”的核心思想。
  1. generate_data(n_samples=2000, seed=42)按隐藏真实结构生成数据,X 影响 Y、Y 影响 Z,作为后续评分的“案件现场”。
  2. fit_local(data, child, parents)对每个节点做局部最小二乘拟合,返回残差方差和该节点参数个数,是似然计算的基本单元。
  3. loglik_and_params(data, edges)遍历所有节点,把局部对数高斯似然累加,同时统计全图参数总数 d。
  4. bic(data, edges)用公式 ll - 0.5 * d * np.log(n) 计算 BIC,一行的减法同时完成奖励与扣分。
  5. data.shape[0]取出样本量 n,它进入惩罚项后决定了“每多一个参数要扣多少分”。
  6. max(candidates, key=...)在候选图上取 BIC 最高者,即“证据支持下的最优结构”。

常见误区

误区我以为评分函数分数越高,说明模型画得越全、边加得越多越好,反正数据拟合得越完美分数就越高。

正解分数里已经扣掉了复杂度罚分。一个加了大量假边的 DAG,拟合分虽然上涨,但惩罚分涨得更快,总分反而会跌。就像探长不会因为“阴谋论环节多”就给高分——讲得越玄乎,扣得越狠。评分的本质是拟合与简洁的平衡,绝不是追求复杂。

为何常见:初学者最先接触似然概念,直觉上“拟合好 = 好模型”,忽略了评分函数里还有一个相反方向的惩罚项。

误区BDeu 的等效样本量 α 是一种平滑参数,那我把 α 设得越大,估计岂不是越稳定、越好?

正解α 太大,先验会淹没数据。比如只有 50 个样本却设 α = 1000,模型几乎完全跟着先验走,真实数据里的结构信号全被冲淡。α 的意义是“用多少虚构样本稀释真实样本”,是权衡而非越大越好。一般从 α = 10 起步,按数据量做敏感性分析。

为何常见:正则化思想深入人心,很多人以为“平滑参数越大越安全”,忽略了贝叶斯先验与数据之间存在对抗关系。

误区反正都是给 DAG 打分的,BIC 和 BDeu 差别不大,选哪个都行。

正解两者推导路线不同:BIC 是渐近近似,样本越大越可靠;BDeu 是精确贝叶斯,先验与伪计数在小样本下更稳。在 n = 50 的小数据集上,两者选出的结构可能完全不同。选错评分函数相当于派错探长,结论的可靠性无从谈起。

为何常见:两个函数长得像——都有“拟合减惩罚”的形态,用户容易忽略它们背后截然不同的统计假设。

误区模型评估不都看分数正负吗?BIC 算出来是负数,是不是说明这个因果图不合格?

正解BIC 是相对评分,绝对值没有任何物理含义。对数似然本身常为负,所以 BIC 为负再正常不过。它唯一的作用是在同一份数据、同一批候选图之间比大小——最高分胜出,哪怕 -52.3 和 -48.1 都是负数,也不影响选出更优的那张图。

为何常见:日常评分(考试、信用分)都是越高越好且多为正数,用户把这种惯性思维带到了信息准则上。

面试题

Q1. BIC 评分函数的两个组成部分是?

单选题 · easy

  • A.似然项与复杂度惩罚项← 正确答案
  • B.均值项与方差项
  • C.先验项与后验项
  • D.误差项与正则项

答案:A。BIC 由对数似然项(奖励拟合)和复杂度惩罚项 0.5·d·ln(n)(扣分)组成,正如探长打分既看证据吻合度又扣“阴谋论”复杂度。其余选项是其他统计概念的混淆。

Q2. BIC 公式中符号 d 表示?

单选题 · easy

  • A.样本总容量大小
  • B.模型参数总个数← 正确答案
  • C.变量节点总个数
  • D.有向边总条数

答案:B。d 是整张 DAG 需要估计的参数总量,由各节点取值状态数与父节点组合数累加得到。它度量模型复杂度,直接进入惩罚项;样本量是 n,节点数与边数都只是 d 的间接来源。

Q3. 样本量 n 不断增大时,BIC 的惩罚项会?

单选题 · mid

  • A.随 ln n 持续增大← 正确答案
  • B.随 1/n 逐渐衰减
  • C.始终保持为零
  • D.先增大后减小

答案:A。惩罚项是 0.5·d·ln(n),ln n 是增函数,样本越大惩罚越重。这正是大样本一致性背后的机制:证据越多,越不信任多余的复杂假设。

Q4. BDeu 中等效样本量 α 的作用是?

单选题 · mid

  • A.控制先验的强度← 正确答案
  • B.决定图的节点数
  • C.替换全部观测数据
  • D.强制结构为树状

答案:A。α 表示“预先见过了多少个等效样本”,它分配到各取值格子成为伪计数,控制狄利克雷先验的强弱。α 越大先验越强,但不会替换真实数据,更不决定图的节点数。

Q5. 分数式因果发现第一步核心工作是?

单选题 · easy

  • A.定义评分函数← 正确答案
  • B.绘制散点图
  • C.训练神经网络
  • D.设置置信区间

答案:A。分数式方法的核心是“先定评分标准,再搜索最高分”。评分函数(如 BIC/BDeu)定义了什么叫“更可信的图”,是后续一切搜索的前提,类似探长先定好打分尺子再破案。

Q6. 关于 BIC 的正确说法有哪些?

多选题 · hard

  • A.由贝叶斯因子渐近推导← 正确答案
  • B.惩罚系数随样本量增长← 正确答案
  • C.具备大样本一致性← 正确答案
  • D.必须手动指定先验

答案:ABC。BIC 从贝叶斯因子拉普拉斯近似导出;惩罚系数 0.5·ln(n) 随样本量增长;样本无穷时能恢复真实结构,即大样本一致性。它不需要手动指定先验,所以 D 错误。

Q7. BDeu 的小样本优势主要来自?

单选题 · mid

  • A.伪计数平滑与先验← 正确答案
  • B.更复杂的图搜索算法
  • C.更大的等效样本量
  • D.完全不需要参数估计

答案:A。BDeu 用 α/(q_i·r_i) 伪计数给零计数格子“垫底”,并用狄利克雷先验补充数据缺失的信息,因此小样本下估计稳定。搜索算法与评分函数是两回事,α 也并非越大越好。

Q8. 哪些场景更适合选用 BDeu?

多选题 · mid

  • A.小样本离散数据← 正确答案
  • B.拥有领域先验知识← 正确答案
  • C.海量点击日志场景
  • D.需要平滑零计数← 正确答案

答案:ABD。BDeu 面向离散数据,小样本时先验能稳住估计,伪计数平滑零计数,且能融入领域先验。海量日志场景通常选计算快、渐近可靠的 BIC,因此 C 不选。

Q9. BIC 的惩罚项为何随样本量增长?

单选题 · hard

  • A.数据越多越应警惕虚假依赖← 正确答案
  • B.样本量越大似然必然越小
  • C.参数数量随样本自动增加
  • D.为避免计算溢出而加权

答案:A。样本越多,虚假依赖越容易被发现,模型越该“简练”。惩罚 0.5·d·ln(n) 随 n 增长,正是用越来越重的扣分压住靠噪声堆出来的复杂结构。似然不一定变小,参数数也不随样本自动增加。

Q10. 工程落地时验证因果结构的做法?

多选题 · hard

  • A.用 bootstrap 统计边的频率← 正确答案
  • B.与领域专家知识对照← 正确答案
  • C.只保留高置信度边← 正确答案
  • D.直接信最高分那张图

答案:ABC。工程上常用 bootstrap 重采样多次搜索,统计每条边出现频率作为置信度,并保留高置信度边,同时与领域知识对照以防“统计显著但物理荒谬”。只信最高分那张图是常见工程失误,因此 D 不选。