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. 巧妙利用问题的特殊结构(如文中的可识别因果图),设计出理论保证的高效算法,这一思路值得借鉴。
    :::

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/28161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Explain Python Machine Learning Models with SHAP Library

Explain Python Machine Learning Models with SHAP Library – Minimatech &#xff08;能翻墙直接看原文&#xff09; Explain Python Machine Learning Models with SHAP Library 11 September 2021Muhammad FawiMachine Learning Using SHapley Additive exPlainations …

用户管理相关命令(修改sudoer文件添加用户权限)visudo: /etc/sudoers: 权限不够

1.useradd <用户名>&#xff1a;用来新建一个用户&#xff08;-m&#xff1a;创建用户的家目录 -s&#xff1a;指定/bin/bash&#xff09; 2.userdel <用户名>&#xff1a;删除一个用户&#xff0c;还会存在家目录&#xff08;-r&#xff1a;删除用户的同时&…

jeecg在线表单开发模式保存表时报The jdbcUrl is Null, Cannot read database type

报错信息如图 原因分析 使用jeecg框架 数据库使用的是DM数据库&#xff0c;在JeecgSystemApplication中&#xff0c;使用了注解过滤DruidDataSourceAutoConfigure&#xff0c;配置文件使用的是多数据源的方式 会出现这种情况 源码分析 getOnlineDataBaseConfig方法的dataBa…

Gson的常见用法

一引入依赖 <!-- json解析的工具包 --> <dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.6</version> </dependency> <!-- 主要为了代码简洁和日志打印 --> <…

怎么找抖音视频素材?在哪里找爆款热门的素材呢?

在短视频时代&#xff0c;拍摄和分享短视频已经成为一种潮流。但是&#xff0c;许多人都会面临一个问题&#xff0c;那就是——视频素材从哪里来&#xff1f;今天&#xff0c;我将为大家介绍几个优质的网站&#xff0c;让你的视频素材不再愁。 蛙学府&#xff1a;https://www.…

STM32项目分享:智慧农业(机智云)系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板打样焊接图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; https://www.bilibili.c…

C++ 54 之 继承中同名的静态成员处理

#include <iostream> using namespace std;// 父类 class Base07{ public:static int m_a; // 静态成员&#xff0c;类内定义static void fun(){cout << "Base中的fun"<< endl;}static void fun(int a){cout << "Base中的fun(int a)&qu…

几个小创新模型,KAN组合网络(LSTM、GRU、Transformer)时间序列预测,python预测全家桶...

截止到本期&#xff0c;一共发了8篇关于机器学习预测全家桶Python代码的文章。参考往期文章如下&#xff1a; 1.终于来了&#xff01;python机器学习预测全家桶 2.机器学习预测全家桶-Python&#xff0c;一次性搞定多/单特征输入&#xff0c;多/单步预测&#xff01;最强模板&a…

【MySQL】索引(上)

https://www.wolai.com/curry00/fzTPy3kSsMDEgEcdvo4G5w https://www.bilibili.com/video/BV1Kr4y1i7ru/?p69 https://jimhackking.github.io/%E8%BF%90%E7%BB%B4/MySQL%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/#%E7%B4%A2%E5%BC%95 索引是一种用于快速查询和检索数据的数据结构…

AI大模型探索之路-实战篇:智能化IT领域搜索引擎之知乎网站数据获取(流程优化)

系列篇章&#x1f4a5; No.文章1AI大模型探索之路-实战篇&#xff1a;智能化IT领域搜索引擎的构建与初步实践2AI大模型探索之路-实战篇&#xff1a;智能化IT领域搜索引擎之GLM-4大模型技术的实践探索3AI大模型探索之路-实战篇&#xff1a;智能化IT领域搜索引擎之知乎网站数据获…

linux笔记8--安装软件

文章目录 1. PMS和软件安装的介绍2. 安装、更新、卸载安装更新ubuntu20.04更新镜像源&#xff1a; 卸载 3. 其他发行版4. 安装第三方软件5. 推荐 1. PMS和软件安装的介绍 PMS(package management system的简称)&#xff1a;包管理系统 作用&#xff1a;方便用户进行软件安装(也…

【深度学习】解析Vision Transformer (ViT): 从基础到实现与训练

之前介绍&#xff1a; https://qq742971636.blog.csdn.net/article/details/132061304 文章目录 背景实现代码示例解释 训练数据准备模型定义训练和评估总结 Vision Transformer&#xff08;ViT&#xff09;是一种基于transformer架构的视觉模型&#xff0c;它最初是由谷歌研究…

blender bpy将顶点颜色转换为UV纹理vertex color to texture

一、关于环境 安装blender的bpy&#xff0c;不需要额外再安装blender软件。在python控制台中直接输入pip install bpy即可。 二、关于代码 本文所给出代码仅为参考&#xff0c;禁止转载和引用&#xff0c;仅供个人学习。 本文所给出的例子是https://download.csdn.net/downl…

BerkeleyDB练习

代码; #include <db.h> #include <stdio.h>int main() {DB *dbp;db_create(&dbp, NULL, 0);printf("Berkeley DB version: %s\n", db_version(NULL, NULL, NULL));dbp->close(dbp, 0);return 0; } 编译运行

4-异常-log4j配置日志滚动覆盖出现日志丢失问题

4-异常-log4j配置日志打印滚动覆盖出现日志丢失问题(附源码分析) 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;CodeZeng1998&#xff08;纯纯技术文&…

XGBoost预测及调参过程(+变量重要性)--血友病计数数据

所使用的数据是血友病数据&#xff0c;如有需要&#xff0c;可在主页资源处获取&#xff0c;数据信息如下&#xff1a; 读取数据及数据集区分 数据预处理及区分数据集代码如下&#xff08;详细预处理说明见上篇文章--随机森林&#xff09;&#xff1a; import pandas as pd im…

异常封装类统一后端响应的数据格式

异常封装类 如何统一后端响应的数据格式 1. 背景 后端作为数据的处理和响应&#xff0c;如何才能和前端配合好&#xff0c;能够高效的完成任务&#xff0c;其中一个比较重要的点就是后端返回的数据格式。 没有统一的响应格式&#xff1a; // 第一种&#xff1a; {"dat…

探索开源世界:2024年值得关注的热门开源项目推荐

文章目录 每日一句正能量前言GitCode成立背景如何使用GitCode如何把你现有的项目迁移至 GitCode&#xff1f;热门开源项目推荐actions-poetry - 管理 Python 依赖项的 GitLab CI/CD 工具项目概述技术分析应用场景特点项目地址 Spider - 网络爬虫框架项目简介技术分析应用场景项…

【RabbitMQ】异步消息及Rabbitmq安装

https://blog.csdn.net/weixin_73077810/article/details/133836287 https://www.bilibili.com/video/BV1mN4y1Z7t9/ 同步调用和异步调用 如果我们的业务需要实时得到服务提供方的响应&#xff0c;则应该选择同步通讯&#xff08;同步调用&#xff09;。 如果我们追求更高的效…

Jupyter Notebook简介

目录 1.概述 2.诞生背景 3.历史版本 4.安装 5.卸载 6.如何使用 7.菜单和菜单项 8.示例 9.未来展望 10.总结 1.概述 Jupyter Notebook是一种基于Web的交互式计算环境&#xff0c;主要用于数据分析、数据科学、机器学习以及探索性编程等领域。允许用户在单个文档中编写…