CSDN 叶庭云:https://yetingyun.blog.csdn.net/
gCastle 是华为诺亚方舟实验室自研的因果结构学习工具链,主要的功能和愿景包括:
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 获取和安装。相关的依赖库如下:
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,请考虑引用如下论文:
@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}
}
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
参考链接: