compute_v_structures#

compute_v_structures(G)[source]#

生成表示图 G 中V结构的三节点元组。

碰撞节点是指在有向无环图(DAG)中,两个父节点指向同一个子节点的三元组。V结构是碰撞节点的一种,其中两个父节点不相邻。在因果图设置中,父节点之间没有直接依赖关系,但以子节点为条件会提供一种关联。

Parameters:
G

一个 networkx DiGraph

Yields:
一个V结构的3元组表示

每个V结构是一个3元组,包含父节点、碰撞节点和其他父节点。

Raises:
NetworkXNotImplemented

如果 G 是无向图。

Notes

此函数旨在用于DAG,但它也适用于循环图。由于碰撞节点在循环因果图文献[2]中被提及,我们允许此函数中的循环图。建议您在需要该属性时,如示例中所示测试输入图是否为无环图。

References

[1]

Pearl的PRIMER Ch-2 第50页:V结构定义。

[2]

A Hyttinen, P.O. Hoyer, F. Eberhardt, M J ̈arvisalo, (2013) “Discovering cyclic causal models with latent variables: a general SAT-based procedure”, UAI’13: Proceedings of the Twenty-Ninth Conference on Uncertainty in Artificial Intelligence, pg 301–310, doi:10.5555/3023638.3023669

Examples

>>> G = nx.DiGraph([(1, 2), (0, 4), (3, 1), (2, 4), (0, 5), (4, 5), (1, 5)])
>>> nx.is_directed_acyclic_graph(G)
True
>>> list(nx.compute_v_structures(G))
[(0, 4, 2), (0, 5, 4), (0, 5, 1), (4, 5, 1)]