解决cdt.causality.graph.GES()报错的问题

        最近在做因果推断的一些东西,在做因果图发现的时候无意中找到了cdt这个库,发现它集成了很多因果推断相关的算法,打算学习一下。在装好这个库之后(pip install cdt),跑了一下官网里的demo,在跑到model=cdt.causality.graph.GES()这一句的时候出现了一些问题,最后发现和R语言的依赖有关系,费了不少劲才解决,在这里记录一下。

        首先,直接跑demo的话会报错:

demo.py:

import cdt
import networkx as nx
import matplotlib.pyplot as plt

if __name__ == '__main__':

    data, graph = cdt.data.load_dataset('sachs')
    print(data.head())

    glasso = cdt.independence.graph.Glasso()

    skeleton = glasso.predict(data)
    new_skeleton = cdt.utils.graph.remove_indirect_links(skeleton, alg='aracne')

    model = cdt.causality.graph.GES()
    output_graph = model.predict(data, new_skeleton)

报错信息如下:

这个报错信息很模糊,我初步判断是找不到R的相关依赖,在网上找到了这篇博客https://blog.csdn.net/qq_41365630/article/details/115186063,它是通过直接修改Lib\site-packages\cdt\utils\Settings.py文件来设置与Rscript.exe的链接的,我这里通过在demo的最前面添加一句

cdt.SETTINGS.rpath = 'C:/Program Files/R/R-3.6.2/bin/Rscript.exe'

来得到同样的效果,其中rpath改成自己电脑上装的位置 。

加上这句之后,再次跑demo文件,报错信息有变化,提示我找不到“pcalg”这个包

我尝试直接打开RStudio,install.packages("pcalg"),结果提示我缺少graph和RBGL两个包,并且这两个包也无法直接通过install.packages的方式进行安装,因此我想通过bioconductor这个网站直接下载这两个包的源文件手动安装(bioconductor和CRAN是两个最常用的R依赖包下载网址,但是graph我在CRAN里没找到)

然而当我进了bioconductor尝试直接下载的时候,点了下载链接没反应。。。于是我又在网上找了另一篇博客(很遗憾链接我现在找不到了),在Rstudio里先后运行了以下代码:

if (!requireNamespace("BiocManager", quietly = TRUE))
+     install.packages("BiocManager")
BiocManager::install("graph")

 成功将graph包安装好

然后再运行

install.packages("RBGL")

将RBGL包也装好

最后直接运行

install.packages("pcalg")

成功将pcalg包装好了!!!

最后,再次运行demo文件,不再报错,问题解决!

最后的demo.py

import cdt
import networkx as nx
import matplotlib.pyplot as plt

if __name__ == '__main__':
    cdt.SETTINGS.rpath = 'C:/Program Files/R/R-3.6.2/bin/Rscript.exe'
    data, graph = cdt.data.load_dataset('sachs')
    print(data.head())

    glasso = cdt.independence.graph.Glasso()

    skeleton = glasso.predict(data)
    new_skeleton = cdt.utils.graph.remove_indirect_links(skeleton, alg='aracne')

    model = cdt.causality.graph.GES()
    output_graph = model.predict(data, new_skeleton)

    nx.draw_networkx(output_graph)
    plt.show()

(其中我加了output_graph的可视化,结果是下面这样的)

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值