gCastle | 华为诺亚方舟实验室自研的因果结构学习工具链

Posted 叶庭云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gCastle | 华为诺亚方舟实验室自研的因果结构学习工具链相关的知识,希望对你有一定的参考价值。

文章目录

CSDN 叶庭云https://yetingyun.blog.csdn.net/


一、简介和安装

gCastle 是华为诺亚方舟实验室自研的因果结构学习工具链,主要的功能和愿景包括:

  • 数据生成及处理:包含各种模拟数据生成算子,数据读取算子,数据处理算子(如先验注入,变量选择)。
  • 因果图构建:提供了一个因果结构学习 Python 算法库,包含了主流的因果学习算法以及最近兴起的基于梯度的因果结构学习算法。
  • 因果评价:提供了常用的因果结构学习性能评价指标,包括 F1、SHD、FDR、TPR、FDR、NNZ 等。

Github 地址:https://github.com/huawei-noah/trustworthyAI/tree/master/gcastle
论文地址:gCastle: A Python Toolbox for Causal Discovery

目前最新版本为:1.0.3。已实现的算法,如下列表所示:

算法分类说明状态
PCIID/Constraint-based一种基于独立性检验的经典因果发现算法v1.0.3
ANMIID/Function-based一种非线性的加性噪声因果模型v1.0.3
DirectLiNGAMIID/Function-based一种线性非高斯无环模型的直接学习方法v1.0.3
ICALiNGAMIID/Function-based一种线性非高斯无环模型的因果学习算法v1.0.3
GESIID/Score-based一种经典的基于贪婪等价搜索的结构学习算法v1.0.3
PNLIID/Funtion-based一种基于后非线性假设的因果发现方法v1.0.3
NOTEARSIID/Gradient-based一种基于梯度、针对线性数据模型的因果结构学习算法v1.0.3
NOTEARS-MLPIID/Gradient-based一种深度可微分、基于神经网络建模的因果结构学习算法v1.0.3
NOTEARS-SOBIID/Gradient-based一种深度可微分、基于 Sobolev 空间建模的因果结构学习算法v1.0.3
NOTEARS-lOW-RANKIID/Gradient-based基于low rank假定、针对线性数据模型的因果结构学习算法v1.0.3
DAG-GNNIID/Gradient-based一种基于 GNN 的因果结构学习算法v1.0.3
GOLEMIID/Gradient-based一种基于 NOTEARS、通过减少优化循环次数提升训练效率的因果结构学习算法v1.0.3
GraNDAGIID/Gradient-based一种深度可微分、针对非线性加性噪声数据模型的因果结构学习算法v1.0.3
MCSLIID/Gradient-based一种基于掩码梯度的因果结构学习算法v1.0.3
GAEIID/Gradient-based一种基于图自编码器的因果发现算法v1.0.3
RLIID/Gradient-based一种基于强化学习的因果发现算法v1.0.3
CORLIID/Gradient-based一种基于强化学习搜索因果序的因果发现方法v1.0.3
TTPMEventSequence/Function-based一种针对时空事件序列的基于时空 Hawkes Process 的因果结构学习算法v1.0.3
HPCIEventSequence/Hybrid一种针对时序事件序列的基于 Hawkes Process 和 CI tests 的因果结构学习算法开发中

gCastle 工作流程图如下示意:

gCastle 获取和安装。相关的依赖库如下:

python (>= 3.6, <=3.9)
tqdm (>= 4.48.2)
numpy (>= 1.19.1)
pandas (>= 0.22.0)
scipy (>= 1.7.3)
scikit-learn (>= 0.21.1)
matplotlib (>=2.1.2)
networkx (>= 2.5)
torch (>= 1.9.0)

我安装配置环境的 requirements.txt 如下:

typer==0.7.0
pyvis==0.3.1
loguru==0.6.0
pandas==1.5.2
gcastle==1.0.3
numpy==1.21.2
scipy==1.9.3
networkx==2.7.1
numexpr==2.8.3
scikit-learn==1.1.2
tqdm==4.61.2

cd 切换到指定目录,pip install -r requirements.txt 即可安装好所有依赖库和 gCastle。并且可以指定 backend 为 “pytorch”。

You can use `os.environ['CASTLE_BACKEND'] = backend` to set the backend(`pytorch` or `mindspore`).

去找到 miniconda3/lib/python3.8/site-packages/castle/__init__.py

加入这一行并保存:os.environ['CASTLE_BACKEND'] = "pytorch"

合作和贡献:欢迎大家使用 gCastle,该项目尚处于起步阶段,欢迎各个经验等级的贡献者,近期官方将公布具体的代码贡献规范和要求。当前有任何疑问及建议,包括修改 Bug、贡献算法、完善文档等,请在社区提交 Issues,官方会及时回复交流。

如果您想在公开的研究成果中使用 gCastle,请考虑引用如下论文:

@misczhang2021gcastle,
  title=gCastle: A Python Toolbox for Causal Discovery, 
  author=Keli Zhang and Shengyu Zhu and Marcus Kalander and Ignavier Ng and Junjian Ye and Zhitang Chen and Lujia Pan,
  year=2021,
  eprint=2111.15155,
  archivePrefix=arXiv,
  primaryClass=cs.LG

GB/T 7714:Zhang K, Zhu S, Kalander M, et al. gCastle: A Python Toolbox for Causal Discovery[J]. arXiv preprint arXiv:2111.15155, 2021.


二、算法使用实践

Python 代码示例如下:

from castle.common import GraphDAG
from castle.metrics import MetricsDAG
from castle.datasets import IIDSimulation, DAG
from castle.algorithms import PC

# data simulation, simulate true causal dag and train_data.
weighted_random_dag = DAG.erdos_renyi(n_nodes=10, n_edges=10, 
                                      weight_range=(0.5, 2.0),
                                      seed=2023)
dataset = IIDSimulation(W=weighted_random_dag,
                        n=2000, method='linear', 
                        sem_type='gauss')

true_causal_matrix, X = dataset.B, dataset.X

# PC methods  structure learning
pc = PC()
pc.learn(X)

# plot predict_dag and true_dag
GraphDAG(pc.causal_matrix, true_causal_matrix, 'result')

# calculate metrics
mt = MetricsDAG(pc.causal_matrix, true_causal_matrix)
print(mt.metrics)

'fdr': 0.0, 'tpr': 1.0, 'fpr': 0.0, 'shd': 0, 'nnz': 7, 'precision': 0.5833, 'recall': 1.0, 'F1': 0.7368, 'gscore': 0.2857

结果如下:

gCastle 简洁易用,是很好的 Python 语言的因果结构学习工具链。

还可以学习官方给出的更多示例:https://github.com/huawei-noah/trustworthyAI/tree/master/gcastle/example


参考链接:

以上是关于gCastle | 华为诺亚方舟实验室自研的因果结构学习工具链的主要内容,如果未能解决你的问题,请参考以下文章

VEGA:诺亚AutoML高性能开源算法集简介

AI简报20220114期AI for Science催生科研新范式华为诺亚Transformer后量化技术...

谷歌中止华为更新安卓!华为自研的操作系统或出世

华为自研编程语言或正式启用,再次打破海外的垄断,进入无人区

1亿组图文对,填补中文开源多模态数据集空白!还附带基础模型,来自华为诺亚方舟实验室...

优秀!华为诺亚方舟实验室联合中山大学发布新一代2D基准数据集