ICML24麻省理工提出使用更少的条件独立性测试来发现因果关系新方法

本文主要是介绍ICML24麻省理工提出使用更少的条件独立性测试来发现因果关系新方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【摘要】众多科学领域的核心问题围绕着理解因果关系这一基本问题。然而,大多数基于约束的因果发现算法,包括广受欢迎的PC算法,通常会进行指数级数量的条件独立性(CI)测试,在各种应用中造成局限。为解决这一问题,我们的工作重点是表征在减少CI测试数量的情况下,可以了解潜在因果图的哪些信息。我们证明,学习一个隐藏因果图的更粗糙表示只需多项式数量的测试。该更粗糙表示,称为因果一致分区图(CCPG),包括顶点的分区和在其组件上定义的有向图。CCPG满足方向的一致性以及倾向于更细分区的附加约束。此外,当因果图是可识别的时,它会退化为潜在的因果图。因此,我们的结果提供了第一个有效的算法,可在特殊情况下仅用多项式数量的测试恢复真实的因果图,其中因果图完全可通过观察数据识别,并可能包含额外的干预。

原文:Causal Discovery with Fewer Conditional Independence Tests
地址:未知
代码:https://github.com/uhlerlab/CCPG
出版:2024 ICML
机构: 布罗德研究所、麻省理工学院
欢迎关注“码农的科研笔记”公众号

1 研究问题

本文研究的核心问题是: 如何在减少条件独立性测试数量的情况下,还原隐藏的因果关系图结构。
::: block-1
在医疗健康领域,人们希望理解各种生物标志物、环境因素、治疗手段等之间的因果关系。传统方法如PC算法,虽然能够还原因果图,但需要进行海量的条件独立性测试,计算开销巨大。假设有1000个变量,即便平均每个变量只与其他10个变量有联系,PC算法也可能需要进行2^10量级的测试。这使得它在处理大规模因果发现问题时捉襟见肘。
:::
本文研究问题的特点和现有方法面临的挑战主要体现在以下几个方面:

  • 条件独立性测试的数量通常随节点度数的增长呈指数爆炸,严重制约了现有因果发现算法的计算效率和可扩展性。
  • 因果方向的确定往往需要借助额外的干预实验数据,进一步增加了算法的数据成本。仅利用观测数据通常只能得到马尔可夫等价类。
  • 在样本量不足的情况下,条件独立性测试的结果容易出现偏差,导致因果图的学习产生错误。测试次数越多,总体的错误风险也就越高。

针对这些挑战,本文提出了一种高效且鲁棒的"因果一致分区图(CCPG)"思路:
::: block-1
CCPG通过适当放松学习目标,用多项式数量的测试还原一个因果图的粗粒度近似。它将变量划分为若干个不相交的组,并学习这些组之间的因果关系。组内部的因果结构则暂时忽略。这种做法就像先画出国家之间的关系图,而将省市内部的连接抽象掉。通过聚焦组层面的因果关系,CCPG 极大地减少了所需的条件独立性测试数量。同时,CCPG 中的每个组仍保留了一定的因果方向信息,避免完全退化为无向图。这些性质使得 CCPG 在计算效率和信息丰富性之间取得了很好的平衡。此外,当真实的因果图能够从观测数据中唯一确定时,CCPG 会自动退化为它,确保了结果的准确性。若再辅以适当的干预数据,CCPG 同样能用多项式数量的测试学得完整的因果图。CCPG 巧妙地利用因果图的稀疏性进行化简,同时又能充分利用干预数据的信息,为大规模因果结构学习开辟了一条新的道路。
:::

2 研究方法

本文提出了一种通过学习因果一致性划分图(Causally Consistent Partition Graph, CCPG)表示来揭示因果结构的方法。该方法能够在进行较少的条件独立性检验的情况下,有效地发现因果关系。下面将详细介绍构造CCPG表示的整个过程。

2.1 前缀顶点集的构造

要构造CCPG表示,首先需要找到图中的前缀顶点集。直观上,前缀顶点集是图中排在前面的一些节点的集合,这些节点不能被后面的节点所指向。形式化地,节点集 S S S是前缀顶点集,当且仅当对于任意 v ∈ S v\in S vS,都有 Anc ( v ) ∩ S ‾ = ∅ \text{Anc}(v)\cap\overline{S}=\emptyset Anc(v)S=,其中 S ‾ \overline{S} S表示节点集 V ∖ S V\setminus S VS

为了构造前缀顶点集,文中提出了一种启发式的方法。具体来说,就是先找到一个前缀顶点集 S S S(初始时可以为空集),然后通过排除以下三类节点来得到一个更大的前缀顶点集 S ′ S' S

  1. D S D_S DS:通过条件独立性检验 u ⊥ v ∣ S u\perp v|S uvS u ⊥̸ v ∣ S ∪ { w } u\not\perp v|S\cup\{w\} uvS{w}可以推断 v v v不是 w w w的后代。 D S D_S DS就是所有这样的节点 w w w的集合。直观上, D S D_S DS中的节点有可能是 S ‾ \overline{S} S中某个节点的后代,因此将其排除。
  2. E S E_S ES:类似地,通过条件独立性检验 u ⊥ v ′ ∣ S ∪ { v } u\perp v'|S\cup\{v\} uvS{v} u ⊥̸ v ′ ∣ S ∪ { v , w } u\not\perp v'|S\cup\{v,w\} uvS{v,w}可以推断 w w w在学习因果关系时可能引入错误。 E S E_S ES就是所有这样的节点 w w w的集合。
  3. F S F_S FS:通过条件独立性检验 u ⊥̸ v ∣ S u\not\perp v|S uvS u ⊥ w ∣ S ∪ { v } u\perp w|S\cup\{v\} uwS{v} v ⊥̸ w ∣ S v\not\perp w|S vwS可以推断 v v v不是 w w w的后代。 F S F_S FS就是所有这样的节点 w w w的集合。排除 F S F_S FS是为了避免 S ′ S' S中包含太多节点。

通过排除上述三类节点,就可以得到一个更大的前缀顶点集 S ′ S' S。此外,文中还证明了 S ′ S' S中包含了 S ‾ \overline{S} S中所有的源节点(即入度为0的节点)。排除法这个可以借鉴。

2.2 CCPG表示的构造

有了前缀顶点集的构造方法,我们就可以进一步地构造CCPG表示了。CCPG表示由两部分组成:

  1. 将节点划分为若干个不相交的组件 V 1 , … , V k V_1,\dots,V_k V1,,Vk
  2. 构造组件之间的有向无环图 D D D,其中 D D D中的边 V i → V j V_i\rightarrow V_j ViVj表示 V i V_i Vi中存在节点指向 V j V_j Vj中某个节点。

构造CCPG表示的过程如下。首先,从空集开始,通过前缀顶点集的构造方法来不断扩大前缀顶点集,直到其为整个节点集 V V V。这样,我们就得到了一个前缀顶点集序列 ∅ ⊊ S 1 ⊊ S 2 ⊊ ⋯ ⊊ S m = V \emptyset\subsetneq S_1\subsetneq S_2\subsetneq \dots \subsetneq S_m=V S1S2Sm=V

接下来,对于每个 S i ∖ S i − 1 S_i\setminus S_{i-1} SiSi1,我们将其进一步划分为几个不相交的组件。直观上,如果 S i ∖ S i − 1 S_i\setminus S_{i-1} SiSi1中的两个节点在给定 S 1 ∪ ⋯ ∪ S i − 1 S_1\cup\dots\cup S_{i-1} S1Si1的条件下不独立,那么它们就属于同一个组件。通过这种方式,我们就得到了节点的一个划分 V 1 , … , V k V_1,\dots,V_k V1,,Vk。可以证明,每个组件要么只包含一个节点,要么包含一条需要通过干预才能确定方向的边。

最后,我们再来构造组件之间的有向无环图 D D D。对于两个组件 V i V_i Vi V j V_j Vj i < j i<j i<j),如果 V i ⊥̸ V j ∣ V 1 ∪ ⋯ ∪ V j − 1 V_i\not\perp V_j|V_1\cup\dots\cup V_{j-1} ViVjV1Vj1,那么我们就在 D D D中连一条边 i → j i\rightarrow j ij。可以证明,通过这种方式构造出的 D D D是一个有向无环图,且与原图的因果关系是一致的。

综上,通过上述过程,我们就构造出了图 G G G的CCPG表示 ( V 1 , … , V k , D ) (V_1,\dots,V_k,D) (V1,,Vk,D)

举个例子,假设有一个5个节点的有向无环图,其中节点1,2,3为源节点。通过前缀顶点集的构造过程,我们可以依次找到前缀顶点集 { 1 } , { 1 , 2 } , { 1 , 2 , 3 } , { 1 , 2 , 3 , 4 } , { 1 , 2 , 3 , 4 , 5 } \{1\},\{1,2\},\{1,2,3\},\{1,2,3,4\},\{1,2,3,4,5\} {1},{1,2},{1,2,3},{1,2,3,4},{1,2,3,4,5}。然后我们对每个 S i ∖ S i − 1 S_i\setminus S_{i-1} SiSi1进行划分,可以得到 { { 1 } , { 2 } , { 3 } , { 4 } , { 5 } } \{\{1\},\{2\},\{3\},\{4\},\{5\}\} {{1},{2},{3},{4},{5}}。最后,通过条件独立性检验,我们得到 D D D中的边 { 1 , 2 , 3 } → 4 \{1,2,3\}\rightarrow 4 {1,2,3}4 { 1 , 2 , 3 } → 5 \{1,2,3\}\rightarrow 5 {1,2,3}5。这就是该图的CCPG表示。

2.3 引入干预的扩展

上面介绍的方法都是在没有干预的情况下,即只根据观测数据来构造CCPG表示。而在引入干预的情况下,我们其实可以进一步细化CCPG表示。这是因为一个干预操作会切断某些因果边,使得一些原本不确定方向的边变得确定。(干预方法带来更好的因果发现

为了将CCPG表示的构造方法扩展到引入干预的情况,文中对前缀顶点集的构造方法进行了一些改进。除了排除 D S , E S , F S D_S,E_S,F_S DS,ES,FS这三类节点外,文中还引入了第四类节点 J S I J_S^I JSI。直观上, J S I J_S^I JSI中的节点要么是干预集 I I I中节点的后代,要么虽然是 I I I中某个节点 v v v但存在某个不属于 S S S的节点 u u u使得 u u u v v v在给定 V ∖ Des ( I ∖ S ) V\setminus \text{Des}(I\setminus S) VDes(IS)的条件下不独立。通过排除这四类节点,我们就得到了引入干预情况下的前缀顶点集 S ′ S' S

有了新的前缀顶点集构造方法,我们就可以类似地构造引入干预情况下的CCPG表示了,记为I-CCPG。与CCPG表示类似,I-CCPG表示也由节点的一个划分 V 1 , … , V k V_1,\dots,V_k V1,,Vk和组件之间的有向无环图 D D D组成,且满足每个组件要么只包含一个节点,要么包含一条不受干预影响的需要通过干预才能确定方向的边。此外,图 D D D也与原图的因果关系是一致的。

继续上面的例子,假设我们在节点4上进行干预。根据新的前缀顶点集构造方法,我们可以依次找到前缀顶点集 { 1 } , { 1 , 2 } , { 1 , 2 , 3 } , { 1 , 2 , 3 , 4 } , { 1 , 2 , 3 , 4 , 5 } \{1\},\{1,2\},\{1,2,3\},\{1,2,3,4\},\{1,2,3,4,5\} {1},{1,2},{1,2,3},{1,2,3,4},{1,2,3,4,5}。与未引入干预的情形不同的是,节点5不再属于 J { 1 , 2 , 3 } I J_{\{1,2,3\}}^I J{1,2,3}I,因此 S 4 S_4 S4 { 1 , 2 , 3 , 5 } \{1,2,3,5\} {1,2,3,5}。然后我们对每个 S i ∖ S i − 1 S_i\setminus S_{i-1} SiSi1进行划分,可以得到 { { 1 } , { 2 } , { 3 } , { 5 } , { 4 } } \{\{1\},\{2\},\{3\},\{5\},\{4\}\} {{1},{2},{3},{5},{4}}。最后在 D D D中连边,得到 { 1 , 2 , 3 } → { 5 } , { 5 } → { 4 } , { 1 , 2 , 3 } → { 4 } \{1,2,3\}\rightarrow\{5\},\{5\}\rightarrow\{4\},\{1,2,3\}\rightarrow\{4\} {1,2,3}{5},{5}{4},{1,2,3}{4}。这就是引入干预情况下的I-CCPG表示,可以看到其比未引入干预情况下的CCPG表示更加精细。

以上就是本文提出的在较少条件独立性检验情况下构造CCPG表示的方法,以及将其扩展到引入干预情况下的I-CCPG表示的方法。通过CCPG表示,我们可以揭示原因果图的很多结构信息。当原因果图可以被观测数据或额外的干预完全确定时,所构造的CCPG表示将退化为原因果图本身。此外,所提出的构造方法的样本复杂度和计算复杂度都是原因果图规模的多项式,远低于已有的因果结构学习方法。

3 实验

3.1 实验场景介绍

该论文提出了一个高效的因果发现算法CCPG,可以用多项式数量级的条件独立性检验来恢复因果图的一个粗粒度表示。实验部分主要验证CCPG在合成和实际数据集上的运行效率和性能。

3.2 实验设置

  • Datasets:
    • 合成数据:线性高斯加性噪声模型生成的可识别因果图,特别是星形DAG,节点数10到100
    • 实际数据:6变量Airfoil数据集
  • Baseline: 基于条件独立性检验的因果发现方法PC、FCI、RFCI(约束)、GSP(混合)
  • Implementation details:
    • PC、GSP用Python实现,FCI、RFCI用R和C++加速实现
    • 合成数据上对比实验中,每个规模运行5次取平均
  • metric:
    • 运行时间
    • 恢复真实因果图所需的最少样本数

3.3 实验结果

3.3.1 实验一、不同图规模下运行时间对比

目的:评估CCPG在不同规模因果图上相比其他方法的计算效率优势
涉及图表:图6
实验细节概述:在节点数从20到100的星形DAG上,用10万样本对比CCPG与基线方法的运行时间
结果:

  • CCPG与混合方法GSP速度相当,远快于约束方法PC、FCI等
  • 约束方法在节点数超过20时耗时剧增,难以应用于更大规模

3.3.2 实验二、样本复杂度对比

目的:评估CCPG恢复真实因果图所需的样本数与其他方法的优劣
涉及图表:图7
实验细节概述:在10节点星形DAG上,计算每个方法需要的最少样本数才能恢复出真实图,重复5次
结果:

  • CCPG所需样本数最少,约束方法次之,混合方法最多
  • CCPG在保证多项式数量级条件独立性检验的同时,样本复杂度和计算复杂度均优于其他方法

3.3.3 实验三、实际数据集上CCPG与PC学习因果图的对比

目的:在Airfoil实际数据集上对比CCPG学到的粗粒度因果表示与PC学到的更细粒度但不完整的因果图
涉及图表:图8、图9
实验细节概述:在6变量Airfoil数据集上运行CCPG和PC,并对比学到的因果图
结果:

  • 尽管CCPG学到的是更粗粒度的因果表示,但更符合已知的部分因果关系
  • PC学到的因果图包含更多细节,但缺失了一些重要的因果边

4 总结后记

本论文针对因果结构学习中条件独立性测试开销过高的问题,提出了一种高效的算法,通过多项式数量级的条件独立性测试,学习一个因果图的粗粒度表示(CCPG)。该表示由顶点的一个划分以及定义在划分组件上的有向无环图组成,并满足一定的一致性和优先更细粒度划分的性质。论文证明了在特定情况下,所提算法能够通过多项式数量级的条件独立性测试准确恢复真实的因果图。
::: block-2
疑惑和想法:

  1. CCPG表示在一般情况下能在多大程度上近似真实的因果图?是否存在理论上的近似界?
  2. 除了文中考虑的干预数据,是否可以将算法拓展至存在隐变量、选择偏差等更一般的假设?
  3. 在样本数量有限的情况下,如何权衡条件独立性测试的数量和CCPG表示的细粒度,以达到最优的学习效果?
    :::
    ::: block-2
    可借鉴的方法点:
  4. 通过牺牲表示的细粒度来换取计算开销的降低,这一思想可以应用于其他需要进行组合优化的统计学习问题。
  5. 利用顶点划分得到粗粒度的图表示,并在划分的组件之间定义合理的关系,这一技术可以推广至一般的图学习任务。
  6. 巧妙利用问题的特殊结构(如文中的可识别因果图),设计出理论保证的高效算法,这一思路值得借鉴。
    :::

这篇关于ICML24麻省理工提出使用更少的条件独立性测试来发现因果关系新方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1066918

相关文章

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

python 3.8 的anaconda下载方法

《python3.8的anaconda下载方法》本文详细介绍了如何下载和安装带有Python3.8的Anaconda发行版,包括Anaconda简介、下载步骤、安装指南以及验证安装结果,此外,还介... 目录python3.8 版本的 Anaconda 下载与安装指南一、Anaconda 简介二、下载 An

如何使用CSS3实现波浪式图片墙

《如何使用CSS3实现波浪式图片墙》:本文主要介绍了如何使用CSS3的transform属性和动画技巧实现波浪式图片墙,通过设置图片的垂直偏移量,并使用动画使其周期性地改变位置,可以创建出动态且具有波浪效果的图片墙,同时,还强调了响应式设计的重要性,以确保图片墙在不同设备上都能良好显示,详细内容请阅读本文,希望能对你有所帮助...

Rust中的注释使用解读

《Rust中的注释使用解读》本文介绍了Rust中的行注释、块注释和文档注释的使用方法,通过示例展示了如何在实际代码中应用这些注释,以提高代码的可读性和可维护性... 目录Rust 中的注释使用指南1. 行注释示例:行注释2. 块注释示例:块注释3. 文档注释示例:文档注释4. 综合示例总结Rust 中的注释

Java中将异步调用转为同步的五种实现方法

《Java中将异步调用转为同步的五种实现方法》本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownL... 目录异步与同步的核心区别方法一:使用wait/notify + synchronized代码示例关键

Linux使用cut进行文本提取的操作方法

《Linux使用cut进行文本提取的操作方法》Linux中的cut命令是一个命令行实用程序,用于从文件或标准输入中提取文本行的部分,本文给大家介绍了Linux使用cut进行文本提取的操作方法,文中有详... 目录简介基础语法常用选项范围选择示例用法-f:字段选择-d:分隔符-c:字符选择-b:字节选择--c

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring

Java使用Tesseract-OCR实战教程

《Java使用Tesseract-OCR实战教程》本文介绍了如何在Java中使用Tesseract-OCR进行文本提取,包括Tesseract-OCR的安装、中文训练库的配置、依赖库的引入以及具体的代... 目录Java使用Tesseract-OCRTesseract-OCR安装配置中文训练库引入依赖代码实

Python使用Pandas对比两列数据取最大值的五种方法

《Python使用Pandas对比两列数据取最大值的五种方法》本文主要介绍使用Pandas对比两列数据取最大值的五种方法,包括使用max方法、apply方法结合lambda函数、函数、clip方法、w... 目录引言一、使用max方法二、使用apply方法结合lambda函数三、使用np.maximum函数