【Python实战因果推断】69_图因果模型4

ops/2024/11/12 8:17:31/

目录

Querying a Graph in Python


Querying a Graph in Python

在接下来的时刻,你将把这个图输入到一个Python库中,这将使得回答关于它的问题变得相当容易。但在你这样做之前,作为一项练习,为了更好地理解你刚刚学到的概念,试着独立回答以下问题:

  • D和C是否相互依赖?
  • 在给定A的情况下,D和C是否相互依赖?
  • 在给定G的情况下,D和C是否相互依赖?
  • A和B是否相互依赖?
  • 在给定C的情况下,A和B是否相互依赖?
  • G和F是否相互依赖?
  • 在给定E的情况下,G和F是否相互依赖?

现在,为了验证你的答案是否正确,你可以将这个图输入到networkx中的DiGraph。networkx是一个处理图形模型的库,它包含了许多有用算法,可以帮助你检查这个图

python"> import networkx as nxmodel = nx.DiGraph([("C", "A"),("C", "B"),("D", "A"),("B", "E"),("F", "E"),("A", "G"),])

作为开始,让我们以D和C为例。它们构成了你之前看到的不道德结构(immorality structure),其中A是碰撞点(collider)。根据在不道德结构中关于独立性的规则,你知道D和C是独立的。你也知道,如果你在碰撞点A上进行条件化,那么它们之间开始产生关联d_separated 方法可以告诉你在图中两个变量间是否存在关联流动(d-分离是表达图中两个变量间独立性的另一种方式)。为了对某个变量进行条件化,你可以将其添加到观察集合中。例如,为了检查在给定A的情况下D和C是否相关,你可以使用 d_separated 并传递第四个参数 z={"A"}。 

python"> print("Are D and C dependent?")print(not(nx.d_separated(model, {"D"}, {"C"}, {})))print("Are D and C dependent given A?")print(not(nx.d_separated(model, {"D"}, {"C"}, {"A"})))print("Are D and C dependent given G?")print(not(nx.d_separated(model, {"D"}, {"C"}, {"G"})))Are D and C dependent?FalseAre D and C dependent given A?TrueAre D and C dependent given G?True

接下来,注意D、A和G形成了一个链式结构。你知道在链式结构中关联会流动,因此D与G并非独立。然而,如果你在中间变量A上进行条件化,你就会阻断关联的流动:

python"> print("Are G and D dependent?")print(not(nx.d_separated(model, {"G"}, {"D"}, {})))print("Are G and D dependent given A?")print(not(nx.d_separated(model, {"G"}, {"D"}, {"A"})))Are G and D dependent?TrueAre G and D dependent given A?False

最后一个需要回顾的结构是叉状结构。可以看到A、B和C形成了一个叉状结构,其中C是A和B的共同原因。你知道关联会通过叉状结构流动因此A和B不是独立的。但是,如果你在共同原因上进行条件化,关联的路径就被阻断了

python"> print("Are A and B dependent?")print(not(nx.d_separated(model, {"A"}, {"B"}, {})))print("Are A and B dependent given C?")print(not(nx.d_separated(model, {"A"}, {"B"}, {"C"})))Are A and B dependent?TrueAre A and B dependent given C?False

最后,让我们将所有内容结合起来,讨论G和F。两者之间是否有关联流动?我们从G开始。你知道因为G和E处于叉状结构中,所以两者间存在关联。然而,关联会在碰撞点E处停止,这意味着G和F是独立的。但如果在E上进行条件化,关联就开始通过碰撞点流动,路径被打开,连接了G和F:

python"> print("Are G and F dependent?")print(not(nx.d_separated(model, {"G"}, {"F"}, {})))print("Are G and F dependent given E?")print(not(nx.d_separated(model, {"G"}, {"F"}, {"E"})))Are G and F dependent?FalseAre G and F dependent given E?True

这真是太好了。你不仅学到了图中三种基本结构,还看到了如何使用现成的算法来检查图中的独立性。但这与因果推断有什么关系呢?现在是时候回到开头探讨的问题了。回想一下,我们试图理解聘请昂贵的一流顾问对公司业绩的影响,我们用以下图来描绘这个问题:

你可以利用新学到的技能来看为什么在这个图中关联并不等同于因果。注意到在这个图中有一个叉状结构。因此,在顾问和公司未来业绩之间存在两种关联流动:一条直接的因果路径和一条由共同原因混淆的非因果路径。后者被称为后门路径。在这个图中后门路径的存在表明,观察到的顾问与公司业绩之间的关联不能仅仅归因于因果关系。

理解关联如何通过非因果路径在图中流动,将使你在谈论关联与因果的区别时更加精确。出于这个原因,重新审视识别概念,现在在图形模型的新视角下,将是值得的。


http://www.ppmy.cn/ops/87360.html

相关文章

【机器学习】逻辑损失函数的基本概念和探索为什么平方误差损失函数不适用于逻辑回归以及探索逻辑损失函数

引言 在机器学习中,逻辑损失函数(Logistic Loss Function)是用于训练逻辑回归模型的一种损失函数。逻辑回归是一种广泛用于分类问题的模型,特别是用于二分类问题,它的目标是预测一个实例属于两个类别中的一个的概率 文…

随堂测小程序的设计

管理员账户功能包括:系统首页,个人中心,学生管理,教师管理,试题信息管理,标签类型管理,系统管理 微信端账号功能包括:系统首页,考试成绩,试题信息&#xff0…

【Kylin使用心得的介绍】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 👻Kylin 👻Kylin是一款Linux发行版,由中国国内的开发者团队…

Http高级interview

1、Http https区别 1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。 2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。 3、http和https使用的是完全不同的连接方式&#xf…

杭州网络安全等级保护测评认证的基本流程

杭州网络安全等级保护测评认证,作为守护数字边界的重大责任,其流程科学而严谨。以下是概述,引领您洞悉杭州地区等级保护的认证之道: 1. 系统识别与定级 通过对系统的识别,根据企业的性质和重要程度,准确地…

代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙

代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙 文章目录 代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙17.太平洋大西洋水流问题一、DFS二、BFS三、本题总结 82…

【python的语法特点,如注释规则、代码缩进、编写规范等】

介绍一下python的语法特点,如注释规则、代码缩进、编写规范等 Python 是一种广泛使用的高级编程语言,以其简洁易读的语法、丰富的标准库和强大的第三方库而闻名。下面我将详细介绍 Python 的一些基本语法特点,包括注释规则、代码缩进、以及编…

SA后缀数组

基础概念&#xff1a; 子串&#xff1a; 在一个字符串s中&#xff0c;取任意i<j,那么从i到j的这一段就叫做s的一个子串 后缀&#xff1a; 从字符串s的某个位置i到字符串末尾的子串&#xff0c; suff[i]: 以s的第i个字符为第一个元素的后缀 后缀数组&#xff1a; 现有字符…