PC
算法介绍
执行 Peter-Clark (PC [1]) 算法进行因果发现。我们也支持带有缺失值的数据集,并包含了按测试删除的PC (选择 'MV-Fisher_Z' 作为测试名称)。
如果您想使用缺失值 PC [2],请将 'mvpc' 设为 True。
用法
from causallearn.search.ConstraintBased.PC import pc
# default parameters
cg = pc(data)
# or customized parameters
cg = pc(data, alpha, indep_test, stable, uc_rule, uc_priority, mvpc, correction_name, background_knowledge, verbose, show_progress)
# visualization using pydot
cg.draw_pydot_graph()
# or save the graph
from causallearn.utils.GraphUtils import GraphUtils
pyd = GraphUtils.to_pydot(cg.G)
pyd.write_png('simple_test.png')
# visualization using networkx
# cg.to_nx_graph()
# cg.draw_nx_graph(skel=False)
推荐使用 pydot 进行可视化。如果需要特定的标签名称,请参考此用法示例(例如,‘cg.draw_pydot_graph(labels=[“A”, “B”, “C”])’ 或 ‘GraphUtils.to_pydot(cg.G, labels=[“A”, “B”, “C”])’)。
高级用法
如果您想为(条件)独立性检验指定参数(如果可用),您可以直接将参数传递给
pc
调用。例如:from causallearn.search.ConstraintBased.PC import pc from causallearn.utils.cit import kci cg = pc(data, 0.05, kci, kernelZ='Polynomial', approx=False, est_width='median', ...)
如果您的图很大和/或独立性检验很慢(例如 KCI),您可能希望将 p 值结果缓存到本地检查点。然后通过从本地检查点读取值,就不会浪费重复计算来恢复检查点/仅微调一些 PC 参数。这可以通过指定
cache_path
来实现。例如:citest_cache_file = "/my/path/to/citest_cache_dataname_kci.json" # .json file cg1 = pc(data, 0.05, kci, cache_path=citest_cache_file) # after the long run # just finetune uc_rule. p-values are reused, and thus cg2 is done in almost no time. cg2 = pc(data, 0.05, kci, cache_path=citest_cache_file, uc_rule=1)
如果本地文件系统中不存在
cache_path
,将创建一个新的。否则,缓存将首先从 json 文件加载到 CIT 类并在运行时使用。请注意 1) 加载时会首先检查数据哈希和参数哈希以确保一致性,并且 2) 在运行时,缓存将每 30 秒保存到本地文件。上述高级用法也适用于其他基于约束的方法,例如 FCI 和 CDNOD。
参数
data: numpy.ndarray, 形状为 (样本数, 特征数)。数据,其中 n_samples 是样本数,n_features 是特征数。
alpha: 期望的显著性水平(浮点数),范围在 (0, 1) 之间。默认值: 0.05。
- indep_test: 字符串,独立性检验方法的名称。默认值: ‘fisherz’。
“fisherz”: Fisher's Z 条件独立性检验。
“chisq”: 卡方条件独立性检验。
“gsq”: G 方条件独立性检验。
“kci”: 基于核的条件独立性检验。(作为一种核方法,其复杂度与样本大小的三次方成正比,因此如果样本大小不小,可能会很慢。)
“mv_fisherz”: 缺失值 Fisher's Z 条件独立性检验。
(对于更有效的非参数检验,您可以尝试 FastKCI 和 RCIT。两种实现都还处于初步阶段,可能存在一些问题。)
stable: 如果为 True,则运行稳定的骨架发现 [4]。默认值: True。
- uc_rule: 如何定向非屏蔽碰撞点。默认值: 0。
- uc_priority: 解决非屏蔽碰撞点之间冲突的规则。默认值: 2。
-1: uc_rule 中的默认设置。
0: 覆盖。
1: 定向为双向边。
2: 优先现有碰撞点。
3: 优先较强的碰撞点。
4: 优先更强的*碰撞点。
mvpc: 是否使用缺失值 PC。默认值: False。
correction_name. 如果使用缺失值 PC,则进行缺失值校正。默认值: ‘MV_Crtn_Fisher_Z’
background_knowledge: class BackgroundKnowledge. 根据指定的因果连接添加先验边。默认值: None。有关详细用法,请参阅其用法示例。
verbose: 如果应打印详细输出,则为 True。默认值: False。
show_progress: 如果应在控制台显示算法进度,则为 True。默认值: True。
返回值
cg : 一个 CausalGraph 对象,其中 cg.G.graph[j,i]=1 且 cg.G.graph[i,j]=-1 表示 i –> j;cg.G.graph[i,j] = cg.G.graph[j,i] = -1 表示 i — j;cg.G.graph[i,j] = cg.G.graph[j,i] = 1 表示 i <-> j。