本节摘要:分数型因果发现给每张候选 DAG 打一个拟合优度减复杂度惩罚的分,搜索分最高的图。本节讲 BIC/BDeu 分数的构成、GES 的贪心两阶段(前向加边、后向删边)及其一致性、与约束型的优劣对比,以及搜索空间爆炸的现实应对。
约束型方法的检验是局部的、逐对的;分数型方法换一个视角:把"图 + 数据"整体映射为一个数——分数,然后搜索分数最优的图。通用形式:
score(G) = 拟合优度(G) − 惩罚(复杂度(G))
最常用的是 BIC(贝叶斯信息准则):score_BIC = 极大对数似然 − (参数量/2)·ln n。第二项随样本量对数增长,惩罚每个额外参数,天然抑制多余边。贝叶斯版本 BDeu 在离散数据上给参数加先验,避免空单元导致的似然退化。两者的关键性质是分数等价性(score equivalence):同马尔可夫等价类的 DAG 得到相同分数——与第 6.1 节的可辨识边界一致,BIC 天生只会指向等价类,不会在数据无法分辨的方向上自欺。
搜索空间是超级指数的(10 个节点的 DAG 数量级在 4×10^18),精确搜索只到几十节点。**GES(Greedy Equivalence Search,Chickering 2002)**在等价类空间而非单图空间上做贪心,两阶段:
前向阶段:从空图开始,每步尝试"合并"当前等价类与某个相邻类(等价于加一条边),取分数增益最大者,直到无正增益。
后向阶段:从所得图出发,每步尝试删除一条边(分裂等价类),仍取分数增益最大者,直到无正增益。
在"分布忠实 + 样本充分"的常规条件下,GES 一致收敛到真实的马尔可价等价类。它的可爱之处在于把搜索空间换到等价类上——天然避免在等价类内部做无意义的翻转;比约束型对单次检验误差更鲁棒(分数对整图负责,不因一次检验失手而级联)。代价是:每步增益计算依赖局部分数分解(某条边的增益只涉及马尔可夫毯内的节点),实现复杂;且对"惩罚系数"敏感,样本中等、真模型复杂时容易欠拟合(边被惩罚掉)或过拟合。
# 概念流程:BIC 打分的局部分解(示意) import numpy as np rng = np.random.default_rng(21) n = 5000 A = rng.normal(0, 1, n) B = 1.2 * A + rng.normal(0, 1, n) # 真结构 A→B # 空模型 vs 一条边 A→B:似然用线性高斯的解析式 def bic_linear(y, X): beta, *_ = np.linalg.lstsq(X, y, rcond=None) rss = np.sum((y - X @ beta) ** 2) ll = -n/2 * (np.log(2*np.pi*rss/n) + 1) k = X.shape[1] + 2 # 系数、截距、方差 return ll - k/2 * np.log(n) score_empty = bic_linear(B, np.ones((n, 1))) score_edge = bic_linear(B, np.column_stack([np.ones(n), A])) print(round(score_edge - score_empty, 1)) # 正增益→GES 前向阶段将加这条边
| 维度 | 约束型(PC) | 分数型(GES) |
|---|---|---|
| 核心操作 | 逐对条件独立检验 | 整图打分与搜索 |
| 对检验误差 | 敏感且级联 | 较鲁棒 |
| 假设 | 马尔可夫 + 忠实 | 忠实 + 分数一致(BIC 型) |
| 超参 | 显著性水平 α | 惩罚系数/先验 |
| 数据规模 | 大样本下检验更稳 | 中样本易受惩罚失谐 |
| 可解释中间物 | 分离集(可人工审查) | 分数表(较难人工审查) |
| 先验融入 | 禁边/强制边 | 分数先验(如知识驱动的边奖励) |
实践共识:两套都跑,看输出的等价类是否吻合——吻合时可信度大增;不吻合时优先怀疑共同前提(忠实性、混杂完备性),而不是挑顺眼的结果。
节点上百时的三板斧:分组分层(先用领域知识把变量分组、组间先验排序,把搜索约束成部分序下的空间);分治(按变量簇分别学局部图再拼接,接受拼接处的方向模糊);启发式增强(精确搜索在子空间内、贪心在层间移动;或用 NOTEARS 类的把图结构连续化后跑梯度优化——它属分数型的新分支,把"无环性"写成可微约束,后面第 6.3 节顺带提及)。任何情况下,因果发现的输出都应作为"假设候选"而非"结论"交给领域专家复核——这一条在第 8.2 节的工作流程里会再次出现。
中样本下常见。两个旋钮:惩罚系数从 ln n 手动调低(换 L1 型系数,如 2ln n→2,等价 AIC 化),代价是稀疏性变差;或改用自适应版本(对每条边按其边际似然贡献调惩罚)。无论怎么调,报告都要附"惩罚系数敏感性"——不同惩罚下骨架稳定的核心边才是可信边。
表格数据、变量数十级、需要可审查的中间过程——GES(或其精确版带缓存版本)。变量上千、想要端到端可微管线——NOTEARS 族。但 NOTEARS 的输出同样只是等价类(线性高斯设定下),把它当"方向全能"是营销话术不是数学。
| 分数 | 数据类型 | 特点 |
|---|---|---|
| BIC | 连续/离散皆可 | 惩罚随 ln n 增,大样本下趋于俭省 |
| BDeu | 离散 | 贝叶斯先验,对空单元稳;先验等效强度是敏感参数 |
| 广义似然+交叉验证 | 任意 | 用预测分数替代解析惩罚,更灵活但计算贵 |
BDeu 的一个坑值得点名:等效样本量参数取值不同,学出的图可能差很多,汇报结果时应附该参数的敏感性——这是离散数据上 GES 最常见的不稳定来源,比算法本身的贪心误差更常背锅。