前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >gCastle | 华为诺亚方舟实验室自研的因果结构学习工具链

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

作者头像
叶庭云
发布2023-01-07 09:45:59
9140
发布2023-01-07 09:45:59
举报
文章被收录于专栏:Python进阶之路Python进阶之路

文章目录

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。已实现的算法,如下列表所示:

算法

分类

说明

状态

PC

IID/Constraint-based

一种基于独立性检验的经典因果发现算法

v1.0.3

ANM

IID/Function-based

一种非线性的加性噪声因果模型

v1.0.3

DirectLiNGAM

IID/Function-based

一种线性非高斯无环模型的直接学习方法

v1.0.3

ICALiNGAM

IID/Function-based

一种线性非高斯无环模型的因果学习算法

v1.0.3

GES

IID/Score-based

一种经典的基于贪婪等价搜索的结构学习算法

v1.0.3

PNL

IID/Funtion-based

一种基于后非线性假设的因果发现方法

v1.0.3

NOTEARS

IID/Gradient-based

一种基于梯度、针对线性数据模型的因果结构学习算法

v1.0.3

NOTEARS-MLP

IID/Gradient-based

一种深度可微分、基于神经网络建模的因果结构学习算法

v1.0.3

NOTEARS-SOB

IID/Gradient-based

一种深度可微分、基于 Sobolev 空间建模的因果结构学习算法

v1.0.3

NOTEARS-lOW-RANK

IID/Gradient-based

基于low rank假定、针对线性数据模型的因果结构学习算法

v1.0.3

DAG-GNN

IID/Gradient-based

一种基于 GNN 的因果结构学习算法

v1.0.3

GOLEM

IID/Gradient-based

一种基于 NOTEARS、通过减少优化循环次数提升训练效率的因果结构学习算法

v1.0.3

GraNDAG

IID/Gradient-based

一种深度可微分、针对非线性加性噪声数据模型的因果结构学习算法

v1.0.3

MCSL

IID/Gradient-based

一种基于掩码梯度的因果结构学习算法

v1.0.3

GAE

IID/Gradient-based

一种基于图自编码器的因果发现算法

v1.0.3

RL

IID/Gradient-based

一种基于强化学习的因果发现算法

v1.0.3

CORL

IID/Gradient-based

一种基于强化学习搜索因果序的因果发现方法

v1.0.3

TTPM

EventSequence/Function-based

一种针对时空事件序列的基于时空 Hawkes Process 的因果结构学习算法

v1.0.3

HPCI

EventSequence/Hybrid

一种针对时序事件序列的基于 Hawkes Process 和 CI tests 的因果结构学习算法

开发中

gCastle 工作流程图如下示意:

在这里插入图片描述
在这里插入图片描述

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

代码语言:javascript
复制
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 如下:

代码语言:javascript
复制
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”。

代码语言:javascript
复制
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,请考虑引用如下论文:

代码语言:javascript
复制
@misc{zhang2021gcastle,
  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 代码示例如下:

代码语言:javascript
复制
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


参考链接:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、简介和安装
  • 二、算法使用实践
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档