概述与定位
一句话定位: 本笔记提供因果图模型和因果发现算法的系统性实验配置指南,包括合成数据生成和基准测试设计。
** prerequisites **
- 概率图模型基础(贝叶斯网络、DAG)
- 因果推断基础(因果图、d-分离)
- 统计基础(条件独立性测试)
- Python数据分析基础(numpy, pandas)
核心直觉
因果发现算法的评估需要 ground truth 因果图,但真实数据的因果结构未知。合成数据生成通过指定因果图结构和噪声参数,产生已知的因果数据,是评估因果发现算法的标准方法。
为什么需要合成数据配置的核心直觉:真实世界的因果结构是不可观测的,无法验证因果发现算法的准确性。合成数据通过显式定义 DAG 和条件分布,提供 ground truth,使算法评估成为可能。
Benchmark设计的核心直觉:因果发现算法的性能受多种因素影响:变量数量、边密度、数据样本量、线性vs非线性、离散vs连续等。系统性 benchmark 需要覆盖这些因素的不同配置。
数学推导
因果图的形式化
设变量集合
因果机制由结构方程模型描述:
其中
线性高斯模型
最常用的合成数据模型:
参数:
: 因果效应强度 : 噪声标准差
非线性模型
常用函数形式:
- 多项式:
- 神经网络:
- 高斯过程:
数据生成算法
Algorithm: Generate Causal Data
Input: DAG G, sample size N, noise scale σ
Output: Data matrix D ∈ R^{N×n}
1. Topological sort nodes of G to get ordering π
2. Initialize D = zeros(N, n)
3. for each node X_i in topological order π:
a. Compute parent values D[:, Pa(X_i)]
b. Sample X_i = f_i(Pa(X_i)) + σ * ε, ε ~ N(0,1)
c. Store D[:, i] = X_i
4. Return D
训练与估计
关键参数配置
| 参数 | 说明 | 典型值范围 |
|---|---|---|
| n_samples | 样本数量 | 100 - 10000 |
| n_vars | 变量数量 | 5 - 50 |
| edge_prob | 边存在概率 | 0.05 - 0.3 |
| edge_weight | 因果效应强度 | 0.5 - 2.0 |
| noise_std | 噪声标准差 | 0.1 - 1.0 |
| graph_type | 图类型 | ER, SF, B |
图类型配置
Erdos-Renyi (ER) 图:
- 每个边独立以概率
存在 - 参数:
控制稀疏性
Scale-Free (SF) 图:
- 度分布遵循幂律
- 模拟真实网络的异质性
Bipartite (B) 图:
- 节点分为两组,组内无连边
- 模拟混杂结构
gcastle 配置示例
from castle.datasets import DAG, IIDSimulation
# 配置ground truth DAG
n_vars = 10
n_edges = 15
graph_type = 'ER'
# 生成DAG
adj_matrix = DAG(n_vars, n_edges, graph_type).to_adjacency_matrix()
# 生成线性高斯数据
data = IIDSimulation(
adj_matrix,
n_samples=1000,
noise_type='gauss',
noise_scale=1.0
).databnlearn 配置示例
from bnlearn import structure_learning, parameter_learning
# 定义网络结构
model = {
'A': [],
'B': [],
'C': ['A', 'B'],
'D': ['C'],
'E': ['C']
}
# 参数学习
df = parameter_learning.fit(model, data)
# 结构学习
model_learned = structure_learning.fit(data, method='hc')实验设计
Benchmark 配置表
| 配置ID | n_vars | edge_prob | n_samples | nonlinear | 用途 |
|---|---|---|---|---|---|
| B1 | 10 | 0.1 | 500 | No | 基础评估 |
| B2 | 10 | 0.1 | 500 | Yes | 非线性鲁棒性 |
| B3 | 20 | 0.1 | 1000 | No | 大规模 |
| B4 | 10 | 0.3 | 500 | No | 密集图 |
| B5 | 10 | 0.05 | 500 | No | 稀疏图 |
评估指标
结构恢复:
- SHD (Structural Hamming Distance): 错误边数
- SHD-C: 仅计算方向错误的边
- TPR/FPR: 真阳性率/假阳性率
参数估计:
- MAE: 平均绝对误差
- MSE: 均方误差
复现注意事项
关键实现点
- 拓扑排序: 生成数据前必须对DAG拓扑排序
- 噪声独立: 确保噪声变量独立同分布
- 参数范围: 确保因果效应显著大于噪声
- 随机种子: 固定所有随机种子
常见问题
- 循环检测: 生成DAG后验证无环
- 过稀疏/过密集: 检查边数量是否符合预期
- 数值不稳定: 因果效应太大导致数值问题
超参数参考
| 参数 | 典型值 | 注意事项 |
|---|---|---|
| n_vars | 10-50 | 变量太多计算量大 |
| edge_prob | 0.1-0.2 | 保证足够边且不过密 |
| n_samples | 500-5000 | 样本太少因果发现不准 |
| noise_std | 0.5-1.0 | 噪声太大因果信号弱 |
本章要点总结
- 合成数据是评估因果发现算法的标准方法
- 线性高斯模型是最常用的基准模型
- ER图和Scale-Free图模拟不同网络结构
- 拓扑排序确保数据生成顺序正确
- gcastle和bnlearn是主流因果实验库
- SHD是评估结构恢复的主要指标
- 参数范围需平衡信号强度和噪声
- 固定随机种子确保可复现性
- Benchmark需要覆盖多种配置
- 非线性模型测试算法鲁棒性
关键词
因果图模型 合成数据 因果发现benchmark DAG生成 gcastle bnlearn 结构评估 参数估计 SHD 实验配置