想象你是一座新城市的交通规划师。这座城市只有四个关键路口:天空、事故、拥堵、迟到。它们之间有着清晰的因果链——下雨会增加事故,也会加剧拥堵;事故让拥堵雪上加霜;拥堵最终让通勤者迟到。你手里没有这座“概率之城”所有可能状态的完整照片集——那种组合数是天文数字。你只握着几张小巧的“局部规则牌”。 贝叶斯网络,就是给概率之城画的地图。它用一张有向无环图记录“谁直接影响了谁”,用条件概率表记录每个路口的具体规则,再用精确推断算法从部分已知路况推演全城。整张地图并不神秘:它只是把“谁影响谁”和“影响多大”拆成可管理的零件,再按固定方式拼装,让你在不确定的世界里做出有依据的判断。

岗位关联

掌握贝叶斯网络,你就能把风控、医疗诊断、故障排查中的不确定性画成图、算成数、讲成故事——这是 AI 落地岗位的核心竞争力。

目录
  1. 可视化演示
  2. 图结构基础
  3. 条件概率表
  4. 联合概率分解
  5. 条件独立性
  6. 网络构建
  7. 精确推断
  8. 概率查询
  9. 工程应用
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

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

贝叶斯网络DAG: 天气-草地示例 联合概率分解:P(C,S,R,W,Sl) = P(C)P(S|C)P(R|C)P(W|S,R)P(Sl|R)

图结构基础

规划师的第一步,是掏出一张白纸,画四个圆圈:天空、事故、拥堵、迟到。然后用带箭头的线把它们连起来——雨影响事故和拥堵,事故影响拥堵,拥堵影响迟到。这张画着圆圈和箭头的草图,就是贝叶斯网络的灵魂:一张有向无环图(DAG)。

图中的每个圆圈叫节点,对应一个随机变量;每条箭头叫有向边,表示“直接依赖”。所谓无环,是指你顺着箭头走永远回不到起点——下雨导致事故,事故又导致下雨,这种循环会让概率逻辑崩溃,所以被严格禁止。父子节点描述的是箭头两侧的关系:箭头指向的节点是子节点,箭头出发的是父节点。

数学上,图结构写作 G = (V, E),V 是节点集,E 是有向边集,同时要求不存在有向环。

这张草图让“谁影响谁”一目了然。但你很快会发现:只有箭头还远远不够——箭头画出了骨架,却没有告诉我们“影响有多大”。下一节,规划师要给每个路口挂上规则牌。

G=(V,E),图中不存在任何有向环\displaystyle G = (V, E), \quad 图中不存在任何有向环
  1. V——节点集合V 是随机变量的集合,每个节点代表一个待建模的量(如“下雨”“迟到”)。
    V={X1,X2,…,Xn}V = \{X_1, X_2, \dots, X_n\}
  2. E——有向边集合E 是箭头集合,每条箭头表示一对变量之间的直接依赖。
    E⊆V×VE \subseteq V \times V
  3. 无环约束从任一节点出发沿箭头方向走,永远无法回到自身,这是概率良定义的前提。
    ∄ X1→X2→⋯→X1\nexists \ X_1 \to X_2 \to \cdots \to X_1

条件概率表

如果你开车经过一个路口,会看到一块电子屏:“下雨时,前方事故概率 8%;不下雨时,事故概率 2%”。在贝叶斯网络里,每个子节点都挂着这样一块“信号灯规则牌”,学名叫条件概率表(CPT)。

条件概率表回答的是:在父节点取各种可能值的情况下,子节点取某个值的概率是多少。它把“影响”从定性的箭头变成了定量的数字。每个节点的局部分布记作 P(Xᵢ | Pa(Xᵢ)),读作“在父节点已知的条件下,Xᵢ 的分布”。

条件概率表有一个务实的代价:如果一个二值节点有 k 个父节点,它需要记录 2^k 行规则(因为父节点的取值组合有 2^k 种)。每多一个父节点,表格大小就翻一倍。这也是为什么构建网络时要克制——不要让一个路口连接太多上游,否则规则牌会厚到挂不上去。

规则牌挂满了整张地图,可它们都是“局部”的。要回答“全城路况如何”,还必须知道一个关键问题:这些局部规则如何拼成整体的概率?这就是联合概率分解的用武之地。

P(Xi∣Pa(Xi))\displaystyle P(X_i \mid \text{Pa}(X_i))
  1. Xᵢ——当前子节点被一系列父节点影响的变量,例如“事故”。
    XiX_i
  2. Pa(Xᵢ)——父节点集合所有带箭头直接指向 Xᵢ 的节点,例如“雨”。
    Pa(Xi)={Xj∣Xj→Xi}\text{Pa}(X_i) = \{X_j \mid X_j \to X_i\}
  3. 条件竖线"|“竖线读作”在……条件下",它把已知条件和待求概率隔开。
    ∣\mid

联合概率分解

整座城的完整路况,是所有路口状态的一次大组合。如果四个路口都是二值的,就有 2⁴ = 16 种全城状态;如果有 30 个变量,就是 10 亿种——直接列出来是天文数字。规划师的聪明做法是:把全城概率写成每个路口“局部规则”的乘积。

这个写法的依据是图结构本身:每个节点一旦知道了父节点的取值,就不再依赖更远的祖先。这就是贝叶斯网络的马尔可夫假设。于是,全城状态的联合分布被分解成 n 个条件概率表的连乘:

对比通用的概率链式法则——每个节点要以所有前辈为条件——贝叶斯网络的分解大幅砍掉了多余条件。原本需要一张指数级大小的“全城照片册”,现在只需要 n 小块规则牌相乘。这是网络结构带来的第一份红利:压缩表达。

但你会追问:为什么能放心地省略那些“更远的祖先”?这背后有一套独立的判定逻辑——条件独立性,它是这座概率之城的红绿灯规则。

P(X1,X2,…,Xn)=∏i=1nP(Xi∣Pa(Xi))\displaystyle P(X_1, X_2, \dots, X_n) = \prod_{i=1}^{n} P(X_i \mid \text{Pa}(X_i))
  1. 左端联合概率所有变量同时取某个状态组合的完整概率。
    P(X1,X2,…,Xn)P(X_1, X_2, \dots, X_n)
  2. 连乘符号对 i 从 1 到 n 遍历所有节点,把它们的局部规则统统乘在一起。
    ∏i=1n\prod_{i=1}^{n}
  3. 局部条件概率每个节点只以父节点为条件,不需要理会整张图的其他部分。
    P(Xi∣Pa(Xi))P(X_i \mid \text{Pa}(X_i))

条件独立性

假设规划师发现:给定“是否下雨”之后,事故和“地铁是否停运”似乎不再互相影响。这就是条件独立性的直觉——当某个中间信息被固定后,两件事就“各管各的”了。在贝叶斯网络里,这是一切推理加速的根源。

严格定义:给定 Z 时,若 X 与 Y 条件独立,则知道 Y 不会给 X 增加任何额外信息。判断这种关系有一套图上的机械规则,叫 D 分离:在图中把 Z 标记为“被观测”,然后看 X 到 Y 的所有路径是否都被阻断。判断依据是三种结构:顺连(X→Z→Y,观测 Z 则阻断)、分连(X←Z→Y,观测 Z 则阻断)、汇连(X→Z←Y,观测 Z 反而连通)。

D 分离还引出一个重要的“影响范围”概念:马尔可夫毯——一个节点的父节点、子节点、以及子节点的其他父节点集合。给定马尔可夫毯后,该节点与网络中其余节点全部独立。这对理解推断算法至关重要:计算某个节点的分布,只需要它的“邻域”,不需要看全城。

独立关系有了,地图的骨架和规则牌也备齐了。接下来有个现实问题:这张图到底怎么画出来?规划师需要一套可靠的建图流程。

X⊥ ⁣ ⁣ ⁣⊥Y∣Z  ⟺  P(X∣Y,Z)=P(X∣Z)\displaystyle X \perp\!\!\!\perp Y \mid Z \iff P(X \mid Y, Z) = P(X \mid Z)
  1. 独立符号读作“在给定 Z 的条件下,X 与 Y 相互独立”。
    X⊥ ⁣ ⁣ ⁣⊥Y∣ZX \perp\!\!\!\perp Y \mid Z
  2. 等价概率式等式成立就意味着知道 Y 的取值不会改变 X 的分布。
    P(X∣Y,Z)=P(X∣Z)P(X \mid Y, Z) = P(X \mid Z)
  3. 双向箭头左边图结构上的独立性与右边概率等式完全等价,可双向推导。
      ⟺  \iff

网络构建

城市规划师不会随手乱画箭头。建图有三大原则:第一,圈定重要路口——只保留与你关心的问题相关的变量;第二,根据因果直觉定向——先想清楚“谁是原因、谁是结果”,再画箭头;第三,用数据检验——如果收集到的数据不支持某条箭头,就删掉它。

贝叶斯网络的结构可以由领域专家手工设计,也可以由数据自动学习(结构学习),更常见的是两者结合。结构确定后,条件概率表的数值从数据中统计得到,这叫参数学习。整个过程在贝叶斯视角下被统一写成:看到数据 D 后,结构 G 的后验概率正比于“数据在该结构下的似然”乘“结构本身的先验”。

对新手最实用的启动方式是“专家初稿 + 数据微调”:先请医生画出疾病与症状的箭头,再用病历数据修正箭头方向和填充概率数字。规划师最终锁定了一张可用的交通图。现在真正激动人心的部分来了——图已经画好,如何用它回答实际问题?

P(G∣D)∝P(D∣G) P(G)\displaystyle P(G \mid D) \propto P(D \mid G)\, P(G)
  1. 结构的后验在看到数据后,某个网络结构合理的程度。
    P(G∣D)P(G \mid D)
  2. 似然项如果这个结构是对的,数据 D 出现的可能性有多大。
    P(D∣G)P(D \mid G)
  3. 先验项在没看数据之前,我对这个结构的偏好(比如“箭头越少越好”)。
    P(G)P(G)
  4. 正比符号右边除以归一化常数 P(D) 后就是严格等式。
    ∝\propto

精确推断

调度中心接到电话:“西城发生事故,通勤者想知道自己迟到的概率。”这正是推断要做的事:已知一部分变量的取值(证据 e),计算另一部分变量的后验概率。规划师只需要在证据条件下,对所有未知变量做“求和消去”。

最直接的方法是枚举推理:把所有没观测到的隐变量 z₁…zₘ 的可能取值全部列出来,逐一套入联合分布公式,再把与证据一致的情况累加。概率论中的条件概率告诉我们,这等价于一个带归一化的求和。

枚举法虽然直观,却会随隐变量数量爆炸式增长。工程上更常用的精确推断是变量消去:把求和符号尽量往乘法里挪,边乘边消,避免一次性展开全部组合。更进一步的消息传播算法则让每个节点沿有向边向邻居传递“局部信念”。这些方法的时间复杂度主要取决于网络的树宽——节点之间纠缠的最紧程度。

无论哪种推断算法,本质上都是同一个动作:在证据约束下,对全城可能性做条件求和,把“不确定”折算成“概率”。那么,这些概率值到底如何被解释、如何持续更新?下一节,我们围绕推理最常见的三种查询展开。

P(X∣e)=α∑z1∑z2⋯∑zmP(X,e,z1,z2,…,zm)\displaystyle P(X \mid e) = \alpha \sum_{z_1} \sum_{z_2} \cdots \sum_{z_m} P(X, e, z_1, z_2, \dots, z_m)
  1. 查询变量 X要计算后验概率的目标变量,例如“迟到”。
    P(X∣e)P(X \mid e)
  2. 证据 e已经观察到的事实集合,例如“事故 = 发生”。
    ee
  3. 隐变量求和对每个未观测变量穷举所有取值并累加,把这些“不确定因素”边缘化掉。
    ∑z1⋯∑zm\sum_{z_1} \cdots \sum_{z_m}
  4. 归一化常数 α让所有结果之和为 1,它就是 1/P(e)。
    α\alpha

概率查询

调度员的日常工作不只是回答单一问题,还要随时更新信念。比如:“明天下雨的概率原来只有 20%,突然听说有人因雨天迟到,那下雨的概率会变成多少?” 这类“看到证据后更新看法”的运算,就是贝叶斯公式的核心应用。

贝叶斯公式是整张网络运转的引擎:后验概率 = 似然 × 先验 ÷ 证据概率。先验是你看到证据前的信念,似然是“如果假设为真,证据有多大概率出现”,两者相乘再归一化,就得到更新后的信念。对应到图里,证据从子节点出发“逆向”影响父节点,这正是网络推理的方向之一。

在贝叶斯网络中,这三类查询——边缘概率(想了解“迟到”的总体分布)、条件查询(给定证据求后验)、后验更新(新证据连续加入)——构成了推理的用户界面。无论查询多复杂,底层都是我们在上一节学习的精确推断。你现在已经掌握了从建图到推理的完整链路。最后一站,看看这条链路如何在现实中创造价值。

P(H∣E)=P(E∣H) P(H)P(E)\displaystyle P(H \mid E) = \frac{P(E \mid H)\, P(H)}{P(E)}
  1. 后验 P(H|E)看到证据 E 之后,假设 H 成立的概率。
    P(H∣E)P(H \mid E)
  2. 似然 P(E|H)假设 H 为真时,观察到 E 的可能性。
    P(E∣H)P(E \mid H)
  3. 先验 P(H)观察前的初始信念,来自已有知识或历史数据。
    P(H)P(H)
  4. 证据概率 P(E)分母做归一化,保证所有后验加起来为 1。
    P(E)P(E)

工程应用

把交通地图的方法搬到医院的电子病历、工厂的传感器网,同一套“因果推演”在完全不同的城市里重演。在医疗诊断中,贝叶斯网络把“疾病”和“症状”连成图,患者有症状,系统反向推断最可能的疾病。这里经典的贝叶斯公式展开成包含“真阳性”与“假阳性”两项的形式,提醒我们不要被检测结果冲昏头脑。

同样的结构还能用于工业故障检测——传感器读数与部件状态构成网络,异常读数反推最可能失效的部件;金融风控则把用户属性、交易行为与违约风险连接起来,在不确定性下评估贷款决策。主流的工具库如 pgmpy、PyMC 都能快速搭建和推断贝叶斯网络。你只需要记住一个信念:任何“多个因素互相影响、信息零散不完整”的领域,都值得用这张有向无环图再组织一次。

P(D∣+)=P(+∣D) P(D)P(+∣D) P(D)+P(+∣¬D) P(¬D)\displaystyle P(D \mid +) = \frac{P(+ \mid D)\, P(D)}{P(+ \mid D)\, P(D) + P(+ \mid \neg D)\, P(\neg D)}
  1. 目标后验检测结果为阳性时,真正患病的概率。
    P(D∣+)P(D \mid +)
  2. 真阳性分式项确实患病且检测正确的联合概率。
    P(+∣D) P(D)P(+ \mid D)\, P(D)
  3. 假阳性分式项没有患病却被检测为阳性的联合概率,它会把后验拉低。
    P(+∣¬D) P(¬D)P(+ \mid \neg D)\, P(\neg D)

AI 应用场景

医疗症状预筛查

阶段:模型推理与决策支持

解决的问题:传统问诊依赖医生经验,面对多症状组合时容易遗漏罕见病因;贝叶斯网络能将几百个症状与上百种疾病的关系编码为有向图,在输入现有症状后精确计算各疾病的概率排名,协助医生优先排查方向。

具体案例:某互联网问诊平台构建“症状-疾病”贝叶斯网络,患者勾选发热、咳嗽、乏力三项后,系统排出流感、上呼吸道感染、早期肺炎的概率,并提示“若补充血氧数据,可进一步区分后两者”。

工业设备根因定位

阶段:异常检测与根因分析

解决的问题:工厂产线一台机器报警,背后可能是轴承磨损、润滑油不足或电压波动三因素叠加。传统阈值告警只能告诉你“坏了”,不能告诉你“为何坏”。贝叶斯网络把传感器读数、维修记录、环境参数串成一张图,用精确推断定位最可能的根因组合。

具体案例:某风电场的震动传感器数据接入贝叶斯网络后,当齿轮箱温度异常时,系统给出根因概率排序:“齿轮磨损 62%、润滑不足 27%、传感器故障 11%”,并附上推荐检修动作。

信贷违约风险评估

阶段:风险建模与量化决策

解决的问题:传统评分卡模型只能给出一个总分,难以解释“为什么拒绝”。贝叶斯网络将收入水平、历史逾期、负债率、行业景气度等变量结构化为有向图,既能在新数据缺失时做边缘概率推断,又能输出每一步的概率依据,满足监管对可解释性的要求。

具体案例:某消费金融公司用贝叶斯网络替代部分评分卡,审批通过率提升 5%,同时将拒绝原因自动归因到“负债率过高使得违约后验从 4% 升至 19%”这一条因果链。

Python 演示

python78 行
class BayesNet:    def __init__(self):        self.parents_map = {}        self.cpt_map = {}     def add_node(self, name, parents, cpt):        # 注册节点: 父节点列表和条件概率表        self.parents_map[name] = list(parents)        self.cpt_map[name] = cpt     def joint_prob(self, state):        # 计算完整状态的联合概率: 所有CPT相乘        total = 1.0        for node, cpt in self.cpt_map.items():            parents = self.parents_map[node]            pa_vals = tuple(state[p] for p in parents)            total *= cpt[pa_vals][state[node]]        return total     def _all_assignments(self, nodes):        # 生成隐变量所有取值组合        if not nodes:            yield {}            return        head, tail = nodes[0], nodes[1:]        for val in (False, True):            for rest in self._all_assignments(tail):                item = {head: val}                item.update(rest)                yield item     def infer(self, query, evidence):        # 枚举法精确推断 P(query | evidence)        variables = list(self.cpt_map.keys())        hidden = [v for v in variables if v not in evidence and v != query]        probs = {}        for q_val in (False, True):            total = 0.0            for assign in self._all_assignments(hidden):                state = dict(evidence)                state.update(assign)                state[query] = q_val                total += self.joint_prob(state)            probs[q_val] = total        norm = probs[False] + probs[True]        return {k: v / norm for k, v in probs.items()}  def main():    net = BayesNet()    # P(雨) = 0.2    net.add_node("雨", [], {        (): {False: 0.8, True: 0.2}    })    # 事故: 下雨时 8%, 不下雨 2%    net.add_node("事故", ["雨"], {        (False,): {False: 0.98, True: 0.02},        (True,): {False: 0.92, True: 0.08}    })    # 拥堵: 下雨 30%, 事故 40%, 两者齐发概率更高    net.add_node("拥堵", ["雨", "事故"], {        (False, False): {False: 0.90, True: 0.10},        (True, False): {False: 0.70, True: 0.30},        (False, True): {False: 0.60, True: 0.40},        (True, True): {False: 0.40, True: 0.60}    })    # 迟到: 拥堵时 50%, 不拥堵 5%    net.add_node("迟到", ["拥堵"], {        (False,): {False: 0.95, True: 0.05},        (True,): {False: 0.50, True: 0.50}    })     print("P(迟到 | 雨=True) =", net.infer("迟到", {"雨": True}))    print("P(事故 | 拥堵=True) =", net.infer("事故", {"拥堵": True}))  if __name__ == "__main__":    main()
目的:用约 60 行代码实现一个纯 Python 的贝叶斯网络,用枚举法进行精确概率推断,演示“雨天→事故→拥堵→迟到”的完整推理链条。
  1. total *= cpt[pa_vals][state[node]]每条局部规则都乘进联合概率,这正是“联合概率分解”的代码化身。
  2. pa_vals = tuple(state[p] for p in parents)把父节点当前取值组成元组,作为 CPT 的查表键。
  3. hidden = [v for v in variables if v not in evidence and v != query]找出所有需要被“求和消掉”的隐变量。
  4. for assign in self._all_assignments(hidden):枚举隐变量的所有取值组合,对应精确推断中的全概率求和。
  5. norm = probs[False] + probs[True]计算归一化常数,让后验概率加起来等于 1。
  6. if __name__ == "__main__":保证代码被直接运行时才执行演示,被 import 时不执行。

常见误区

误区“箭头从雨指向事故,那雨就是事故的原因?贝叶斯网络就是因果图吧?”

正解贝叶斯网络的边只表示“概率依赖关系”,不必然表示因果。箭头只说明“知道父节点会让你对子节点的判断更准确”。因果推断需要额外的假设和干预实验,普通贝叶斯网络只是相关性建模工具。就像地图上的单向道可能因施工改道,箭头描述的只是当下的通行关系。

为何常见:箭头天然带有“方向感”,人们容易把方向解读为因果,而忽略了概率图模型的本质是编码条件独立关系。

误区“这两个变量之间没画箭头,它们肯定各管各的,互不影响。”

正解缺边只说明没有“直接依赖”,但两个节点可能通过其他路径间接相关。比如事故和下雨之间没有直接边,但它们都通向拥堵,形成“共同影响”的汇连结构;反之,正确的独立性判断必须用 D 分离,在给定某组节点后看所有路径是否被阻断。

为何常见:初学者容易把“图上没连线”等同于“统计独立”,忽略了路径的间接传导效应。

误区“贝叶斯网络和朴素贝叶斯不是一回事吗?都有'贝叶斯'三个字,都算后验概率。”

正解朴素贝叶斯假定所有特征在给定类别后完全独立,因此网络结构是“一个类别节点指向所有特征”的星形图。贝叶斯网络允许任意有向无环结构,可以表达特征之间复杂的依赖关系。前者是后者的极端特例,就像“所有道路都直通市中心”只是城市路网的一种特殊情况。

为何常见:名字里都带“贝叶斯”,且朴素贝叶斯是入门最常见的分类器,极易造成混淆。

误区“CPT 表格里写着 P(事故)=0.08,不就是事故的总体概率吗?直接用不就行了?”

正解CPT 存的是“给定父节点取值后的条件概率”,必须指明父节点状态才有意义。“下雨时事故概率 8%”和“事故边缘概率”是两个不同的量——后者需要把所有父节点的取值按先验加权平均才能得到。忽略条件直接使用,会算出错误的后验。

为何常见:表格里只有“数字”没有“完整的上下文”,容易让人忘记每一行都隐含着一个“父节点取特定值”的前提。

误区“有那么多结构学习算法,所以贝叶斯网络的结构只能靠机器学习自动发现,人工画图是不专业的。”

正解领域专家知识是构建贝叶斯网络的强大先验。小数据下专家结构往往比纯数据学出来的更稳、更可解释。工业界最常用的流程是“专家定骨架 + 数据估计参数 + 必要时结构微调”。完全依赖结构学习不仅需要海量数据,还可能学到虚假依赖。

为何常见:看到论文里结构学习算法很炫酷,就误以为“数据驱动”一定优于“人工设计”,忽略了先验知识在概率建模中的价值。

面试题

Q1. 贝叶斯网络的图结构本质是什么?

单选题 · easy

  • A.无向连通图
  • B.有向无环图← 正确答案
  • C.有向循环图
  • D.完全二部图

答案:B。贝叶斯网络要求是有向无环图(DAG)。无向图无法表达“谁依赖谁”的方向;有向循环图会导致概率良定义问题;完全二部图是另一类特殊结构,与贝叶斯网络无关。就像城市路网不允许“修路又绕回自己”的循环道。

Q2. 条件概率表 CPT 存储的是什么?

单选题 · easy

  • A.子节点的先验边缘分布
  • B.父节点的联合边缘分布
  • C.子节点的局部条件概率表← 正确答案
  • D.全网络的联合概率分布

答案:C。CPT 记录的是在父节点各种取值组合下,子节点的条件概率分布。它不是边缘概率,也不是父节点的分布,更不是全网联合分布。它就像路口挂的规则牌:“雨 = 真 时,事故概率是多少”。

Q3. 联合概率如何由贝叶斯网络分解?

单选题 · mid

  • A.每棵子树的概率求和
  • B.各节点条件概率表相乘← 正确答案
  • C.仅根节点概率直接相乘
  • D.寻找最大后验路径输出

答案:B。贝叶斯网络的联合分布等于每个节点的条件概率表连乘:P(X)=∏P(Xᵢ|Pa(Xᵢ)),相乘把所有局部规则组装成全局概率。求和对应的是推断而非分解,C 忽略非根节点,D 是另一类推理任务。

Q4. 下列哪些属于精确推断方法?

多选题 · mid

  • A.全枚举联合概率求和← 正确答案
  • B.变量消去逐因子求和← 正确答案
  • C.拒绝采样随机模拟估计
  • D.消息传递沿图传导信息← 正确答案

答案:ABD。枚举推理、变量消去、消息传递都是精确推断,计算结果确定无随机性。拒绝采样属于近似推断,用随机模拟估计概率,结果有抽样误差——就像用抽查代替全城大普查。

Q5. D 分离主要用于判断什么?

单选题 · hard

  • A.判断网络是否有环路
  • B.估计节点的先验概率
  • C.判断条件独立的关系← 正确答案
  • D.验证条件概率表归一

答案:C。D 分离是图结构上判断“给定某组节点后,两组变量是否条件独立”的机械规则。它不负责查环、算先验或验归一。理解 D 分离才能正确回答“两个没直连的节点是否真的独立”这类的陷阱题。

Q6. 关于贝叶斯网络的描述,正确的有哪些?

多选题 · hard

  • A.有向无环是硬性约束← 正确答案
  • B.缺边代表绝对条件独立
  • C.结构可由专家知识构建← 正确答案
  • D.参数规模随父节点指数增← 正确答案

答案:ACD。DAG 的“无环”约束是硬性的;专家知识确实可以构建结构;CPT 行数随父节点数指数增长。B 错误:缺边只代表没有直接依赖,但节点之间仍可能通过其他路径间接相关。就像城市两条路没有直连,依然可能共享同一个拥堵源头。

Q7. 贝叶斯网络与朴素贝叶斯最本质的区别是什么?

单选题 · easy

  • A.朴素贝叶斯完全省略参数
  • B.朴素假设特征条件独立← 正确答案
  • C.贝叶斯网络无需任何数据
  • D.两种模型结构完全等同

答案:B。朴素贝叶斯的核心假设是给定类别后所有特征条件独立,因此它的图结构是固定的星形。贝叶斯网络允许任意 DAG 结构,能表达更丰富的依赖。A、C、D 都与事实不符。简单模型是复杂模型的极端特例。

Q8. 变量消去算法的复杂度主要受什么因素制约?

单选题 · extreme

  • A.网络树宽大小← 正确答案
  • B.根节点数量多少
  • C.条件概率表总行数
  • D.证据变量的具体取值

答案:A。变量消去的时间复杂度主要取决于消元顺序产生的最大因子规模,也就是网络的树宽。树宽大意味着中间因子巨大无比,计算会指数级膨胀。根节点数、CPT 总行数只是表面量,证据取值不改变复杂度级别。

Q9. 贝叶斯网络的正确构建方式有哪些?

多选题 · hard

  • A.领域专家手工设计结构← 正确答案
  • B.数据驱动结构学习算法← 正确答案
  • C.数据估计条件概率参数← 正确答案
  • D.随机生成边无需检验

答案:ABC。专家知识定结构、结构学习学结构、数据估参数都是合理手段,实践中常组合使用。D 错在随机生成不检验会产生大量虚假依赖,就像随意乱画箭头会让整张路网失去可解释性。

Q10. “给定证据后求某变量的后验分布”属于哪类查询?

单选题 · easy

  • A.计算变量的边缘概率
  • B.极大似然估计参数值
  • C.给定证据求条件概率← 正确答案
  • D.对样本做无监督聚类

答案:C。题干描述正是条件概率查询,又称后验查询,用贝叶斯公式 P(H|E) 计算。边缘概率不给定证据,极大似然是参数估计,聚类是无监督任务——它们和“已知部分路况推迟到概率”完全不是一个动作。