CausalDiscoveryToolbox:因果建模、因果图代码实现

CausalDiscoveryToolbox:因果建模、因果图代码实现Cdt工具包实现了端到端的因果建模方法,支持从观测数据中恢复直接依赖关系(因果图的骨架)和变量之间的因果关系。基于python实现了许多用于图结构恢复的算法,接口简单,易于上手。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

最近在分析观测数据的因果关系时,发现一个很好用的工具包——CausalDiscoveryToolbox(以下简称Cdt),功能齐全,轻松上手因果发现。
下面简单整理下该工具包的原理+用法。

CausalDiscoveryToolbox简介

[Github] [论文] [文档]

  • 用于在从数据的联合概率分布样本中学习因果图和相关的因果机制。
  • 实现了端到端的因果发现方法,支持从观测数据中恢复直接依赖关系(因果图的骨架)和变量之间的因果关系。
  • 实现了许多用于图结构恢复的算法(包括来自bnlearn1,pcalg2包的算法)。
  • 基于Numpy,Scikit-learn,Pytorch和R开发。
  • 支持GPU硬件加速。

因果建模的过程

Cdt工具包对一般的因果建模流程进行了概括:

:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}

观测数据

因果发现算法

图恢复算法

无向图

因果有向图

Cdt工具包可以直接从观测数据中进行因果发现(获得因果有向图),也可以先恢复图结构(获得无向依赖图)之后,再进行因果发现(获得因果有向图)。

图恢复算法 Graph recovery algorithms

在Cdt工具包中实现了两种从原始数据中恢复无向依赖图的方法:

  • 二元依赖 (Bivariate dependencies)

  • 用于确定因果图中的(无向)边。

  • 依赖于统计检验,例如皮尔逊相关性(Pearson’s correlation)或互信息分数(mutual information scores)3。在第一阶段中可以使用二元依赖关系来建立因果图骨架。

  • 多元方法 (Multivariate methods)

  • 目的是恢复全因果图。即为图的所有变量选择父、子和配偶节点(子的父母)。

  • 输出一个networkx.Graph图对象。

因果发现算法 Causal Discovery algorithms

Cdt包的主要焦点是从观测数据中发现因果关系,从成对设置到全图建模。

  • 成对建模(The pairwise setting)

  • 把每一对变量作为因果对问题(CEP4,cause-effect pair problem)进行处理,从而确定这些变量之间的因果关系。
    比如识别X→Y还是Y→X,或者X与Y没有关系。因果对参考教程
  • 成对建模的两个经典方法:加性噪声模型(ANM)5和IGCI6 (Information-Geometric Causal Inference),在有篇因果对的综述里有详细介绍,后面有空梳理下。
  • 成对建模的前提假设是:这两个变量已经受到其他协变量的制约,并且剩余的潜在协变量几乎没有影响,可以被认为是“噪声”。
  • 全图建模(The graph setting)

  • 基于贝叶斯或基于分数的方法,输出有向无环图或部分有向无环图
  • ①依赖于条件独立性测试,称为基于约束的方法,如PC7或FCI8
  • ②依赖于基于分数的方法,通过图搜索启发式方法(如GES9或CAM10)找到使似然分数最大化的图。
  • ③利用著名的对抗生成网络,例如CGNN11或SAM12

安装Cdt工具包

直接使用pip安装:

pip install cdt

使用示例

import cdt
from cdt import SETTINGS
SETTINGS.verbose=True
#SETTINGS.NJOBS=16
#SETTINGS.GPU=1
import networkx as nx
import matplotlib.pyplot as plt
plt.axis('off')

# Load data
data = pd.read_csv("lucas0_train.csv")
print(data.head())

# Finding the structure of the graph
glasso = cdt.independence.graph.Glasso()
skeleton = glasso.predict(data)

# Pairwise setting
model = cdt.causality.pairwise.ANM()
output_graph = model.predict(data, skeleton)

# Visualize causality graph
options = { 
   
        "node_color": "#A0CBE2",
        "width": 1,
        "node_size":400,
        "edge_cmap": plt.cm.Blues,
        "with_labels": True,
    }
nx.draw_networkx(output_graph,**options)

上述代码输出的因果图:
在这里插入图片描述
示例数据:
https://download.csdn.net/download/Bit_Coders/16241408

网络结构的绘制参考networkx文档:
https://networkx.org/documentation/stable/index.html

工具包模块

该软件包分为5个模块:

  • 因果关系:cdt.causality在成对设置或图形设置中实施因果发现算法。
  • 独立性:cdt.independence包括恢复数据依赖关系图的方法。
  • 数据:cdt.data为用户提供生成数据和加载基准数据的工具。
  • 实用程序:cdt.utils为用户提供用于模型构建,图形实用程序和设置的工具。
  • 指标:cdt.metrics包括图表的评分指标,以输入为准 networkx.DiGraph
    用于计算的所有方法,接口与Scikit-learn类似,在这里.predict() 发动对给定的数据到工具箱中的算法,.fit()使得训练学习算法大部分的算法是类,它们的参数可以在自定义.init()中设置。

程序包及其算法的结构:

   cdt package
   |
   |- independence
   |  |- graph (Infering the skeleton from data)
   |  |  |- Lasso variants (Randomized Lasso[1], Glasso[2], HSICLasso[3])
   |  |  |- FSGNN (CGNN[12] variant for feature selection)
   |  |  |- Skeleton recovery using feature selection algorithms (RFECV[5], LinearSVR[6], RRelief[7], ARD[8,9], DecisionTree)
   |  |
   |  |- stats (pairwise methods for dependency)
   |     |- Correlation (Pearson, Spearman, KendallTau)
   |     |- Kernel based (NormalizedHSIC[10])
   |     |- Mutual information based (MIRegression, Adjusted Mutual Information[11], Normalized mutual information[11])
   |
   |- data
   |  |- CausalPairGenerator (Generate causal pairs)
   |  |- AcyclicGraphGenerator (Generate FCM-based graphs)
   |  |- load_dataset (load standard benchmark datasets)
   |
   |- causality
   |  |- graph (methods for graph inference)
   |  |  |- CGNN[12]
   |  |  |- PC[13]
   |  |  |- GES[13]
   |  |  |- GIES[13]
   |  |  |- LiNGAM[13]
   |  |  |- CAM[13]
   |  |  |- GS[23]
   |  |  |- IAMB[24]
   |  |  |- MMPC[25]
   |  |  |- SAM[26]
   |  |  |- CCDr[27]
   |  |
   |  |- pairwise (methods for pairwise inference)
   |     |- ANM[14] (Additive Noise Model)
   |     |- IGCI[15] (Information Geometric Causal Inference)
   |     |- RCC[16] (Randomized Causation Coefficient)
   |     |- NCC[17] (Neural Causation Coefficient)
   |     |- GNN[12] (Generative Neural Network -- Part of CGNN )
   |     |- Bivariate fit (Baseline method of regression)
   |     |- Jarfo[20]
   |     |- CDS[20]
   |     |- RECI[28]
   |
   |- metrics (Implements the metrics for graph scoring)
   |  |- Precision Recall
   |  |- SHD
   |  |- SID [29]
   |
   |- utils
      |- Settings -> SETTINGS class (hardware settings)
      |- loss -> MMD loss [21, 22] & various other loss functions
      |- io -> for importing data formats
      |- graph -> graph utilities

使用感想

  • 接口简单,文档清晰,易于上手。
  • 不过目前还不支持使用干预措施
  • Cdt工具包是在观察环境进行因果发现的软件包,所以相当于还是在因果科学的第一层级“关联”。不过从当前的实际应用角度来说,“干预”和“反事实”的实施难度较大,“关联”层级的因果发现和推理已经能起到一定的作用。

  1. Marco Scutari. Package ‘bnlearn’, 2018. ↩︎

  2. Markus Kalisch, Alain Hauser, et al. Package ‘pcalg’. 2018. ↩︎

  3. Nguyen Xuan Vinh, Julien Epps, and James Bailey. Information theoretic measures for clusterings comparison: Variants, properties, normalization and correction for chance. Journal of Machine Learning Research, 11(Oct):2837–2854, 2010. ↩︎

  4. Isabelle Guyon. Chalearn cause effect pairs challenge, 2013. URL http://www.causality.inf.ethz.ch/cause-effect.php. ↩︎

  5. Patrik O Hoyer, Dominik Janzing, Joris M Mooij, Jonas Peters, and Bernhard Sch¨olkopf. Nonlinear causal discovery with additive noise models. In Neural Information Processing Systems (NIPS), pages 689–696, 2009. ↩︎

  6. Janzing, D., Mooij, J., Zhang, K., Lemeire, et al… (2012). Information-geometric approach to inferring causal directions. Artificial Intelligence, 182, 1-31. ↩︎

  7. Peter Spirtes, Clark N Glymour, and Richard Scheines. Causation, prediction, and search.MIT press, 2000 ↩︎

  8. Eric V Strobl, Kun Zhang, and Shyam Visweswaran. Approximate kernel-based conditional independence tests for fast non-parametric causal discovery. 2017 ↩︎

  9. David Maxwell Chickering. Optimal structure identification with greedy search. Journal
    of machine learning research, 3(Nov):507–554, 2002. ↩︎

  10. Peter B¨uhlmann, Jonas Peters, Jan Ernest, et al. Cam: Causal additive models, highdimensional order search and penalized regression. The Annals of Statistics, 2014. ↩︎

  11. Olivier Goudet, Diviyan Kalainathan, et al. Learning functional causal models with generative neural networks. 2017. ↩︎

  12. Diviyan Kalainathan, Olivier Goudet, et al. Sam: Structural agnostic model, causal discovery and penalized adversarial learning. 2018. ↩︎

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170417.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月14日 上午6:46
下一篇 2022年8月14日 上午6:46


相关推荐

  • pycharm远程连接服务器运行代码加调试

    pycharm远程连接服务器运行代码加调试由于计算环境都在 linux 服务器上 本地电脑太烂 但是 linux 服务器上直接又无法使用 pycharm 这款工具 所以解决办法是利用 windows 中安装的 pycharm 远程连接 linux 服务器 1 设置远程连接配置依次打开这三个箭头的指向 打开配置面板 在配置面板中可以为你当前的连接起一个名称 这个名称是用于给你区分你连接的是哪台服务器的 下面依次有三个选项卡 connecti

    2026年3月27日
    2
  • H264 编码简介

    H264 编码简介nbsp nbsp nbsp nbsp nbsp nbsp H264 是新一代的编码标准 以高压缩高质量和支持多种网络的流媒体传输著称 在编码方面 我理解的他的理论依据是 参照一段时间内图像的统计结果表明 在相邻几幅图像画面中 一般有差别的像素只有 10 以内的点 亮度差值变化不超过 2 而色度差值的变化只有 1 以内 所以对于一段变化不大图像画面 我们可以先编码出一个完整的图像帧 A 随后的 B 帧就不编码全

    2026年3月16日
    3
  • nginx最全教程_nginx使用教程

    nginx最全教程_nginx使用教程location[=|~|~*|^~]patt{}中括号可以不写任何参数,此时称为一般匹配也可以写参数因此,大类型可以分为3种location=patt{}[精准匹配]locationpatt{}[一般匹配]location~patt{}[正则匹配]——————————————–如何发挥作用?:首先看有没有精准匹配…

    2025年5月23日
    4
  • 分组加密模式 ECB、CBC、PCBC、CFB、OFB、CTR

    在分组加密算法中,有几种不同的工作模式,分别是ECB(Electronic CodeBook,电子密码本模式)、CBC(Cipher-blockchaining,密码块连接模式)、PCBC(Propagatingcipher-blockchaining,填充密码块链接模式)、CFB(Cipherfeedback,密文反馈模式)、OFB(Outputfeedback,输出反馈模式)、CTR…

    2022年4月8日
    53
  • 闰年计算方法

    闰年计算方法编程中经常遇到这样的问题 给定一个数字 其值的含义是距离 1970 01 01 或 1900 01 01 的天数 求这个数字对应的是哪年哪月哪天 问题的难处在于并不是每一年都是 365 天 有些年份是 366 天 比如今年 2016 科学上把一年中有 366 天的年份 定义为闰年 那么哪些年份是闰年 怎样计算 公式如下满足下列两个条件之一的 即为闰年 1 nbsp 年份能被 4 整除 且不能被 1

    2026年3月19日
    2
  • OllyDBG 激活成功教程入门教程「建议收藏」

    OllyDBG 激活成功教程入门教程「建议收藏」原链接:https://www.cnblogs.com/ECJTUACM-873284962/p/7653285.html一、OllyDBG的安装与配置OllyDBG版的发布版本是个ZIP压缩包,只要解压到一个目录下,运行OllyDBG.exe就可以了。汉化版的发布版本是个RAR压缩包,同样只需解压到一个目录下运行OllyDBG.exe即可:OllyDBG中各个窗口的功能如上图。简单解释一下各个窗口的功能,更详细的内容可以参考TT小组翻译的中文帮助:反汇编窗口:显示被调试

    2026年2月6日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号