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

news2025/1/11 14:01:59

目录

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是一个处理图形模型的库,它包含了许多有用算法,可以帮助你检查这个图

 import networkx as nx
 model = 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"}。 

 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?
 False
 Are D and C dependent given A?
 True
 Are D and C dependent given G?
 True

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

 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?
 True
 Are G and D dependent given A?
 False

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

 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?
 True
 Are A and B dependent given C?
 False

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

 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?
 False
 Are G and F dependent given E?
 True

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1969082.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(七)Appdesigner-初步入门及常用组件的使用方法说明

目录 前言 一、Appsesigner初步入门 (一)Appsesigner简介 (二)功能布局 二、常用组件 (一)基础知识 (二)实际操作 1.HTML 2.下拉框 3.切换按钮组 4.列表框 5.单选按钮组…

ShardingSphere实战(4)- 广播表和默认数据源

上篇博客,我们讲了 ShardingSphere实战(3)- 快速实现分库分表 ,这篇博客,我们解决分库分表以后遗留的两个小问题。 一、广播表 1. 广播表介绍 广播表(Broadcast Table)是一种特殊的表类型&am…

SSM学习10:整合MyBatis、MyBatisPlus

SpringBoot整合MyBatis 与创建spring web项目类型,添加上相应依赖 实体类 public class Account {private int id;public int getId() {return id;}public void setId(int id) {this.id id;}public String getName() {return name;}public void setName(String …

word打印---doc转html后进行打印,window.print、print-js、vue-print-nb

提示&#xff1a;word预览方式—插件 文章目录 [TOC](文章目录) 前言一、vue-office-docx把docx转换html二、调取window.print三、print-js四、vue-print-nb总结 前言 word预览 一、vue-office-docx把docx转换html npm install vue-office-docx -S-DofficeDocx.vue <templ…

Meta发布最新图形分割模型SAM 2:实时视频分割性能大幅提升

Meta发布最新图形分割模型SAM 2:实时视频分割性能大幅提升 在人工智能领域,图形分割是一项重要的技术,它能够识别和提取图像或视频中的目标对象。Meta近期发布的SAM 2(Segment Anything 2)模型在这一领域取得了重大突破。本文将详细介绍SAM 2的创新之处及其在视频对象实时…

vue3学习day02-组合式API-setup选项、reactive(将非响应式数据变为响应式数据)、computed(基本思想和vue2一致)、watch

6、setup选项 &#xff08;1&#xff09;setup选项的执行时机&#xff08;获取不到this&#xff0c;this是undefined&#xff09;&#xff1a;beforeCreate函数之前&#xff0c;自动执行 &#xff08;2&#xff09;写法 1&#xff09;原始写法 需要返回 ①在script中导出s…

【DeepSeek-V2 技术要点介绍】

DeepSeek-V2 是一款基于 Transformer 架构的先进模型&#xff0c;其中每个Transformer块由一个注意力模块和一个前馈网络&#xff08;FFN)组成。然而&#xff0c;对于注意力模块和 FFN&#xff0c;研究团队设计并采用了创新的架构。旨在通过创新的设计提升推理和训练效率。以下…

行为验证码的分类推荐

行为验证码 行为验证码是一种用于确认用户身份或验证用户行为的技术手段&#xff0c;通常用于防止自动化程序&#xff08;例如机器人&#xff09;对网站或应用程序进行恶意操作。它的核心思想是通过要求用户执行特定的交互动作来验证其为真实的人类 是一种通过用户的操作行为…

SDK 多版本管理控制利器 SDKMAN 介绍及使用

一、SDKMAN 假如你同时参与了一个使用JDK 8的项目和一个采用JDK 17特性的项目。每次在两个项目之间切换时&#xff0c;你都面临着版本冲突的问题。如果有那么一个工具类似于 Python 中的 anaconda 工具&#xff0c;可以帮助你管理不同版本的 SDK &#xff0c;是不是非常有用&a…

【32单片机篇】项目:LCD实时显示温湿度

一、项目需求 使用 ESP8266 连接 OneNET 云平台&#xff0c;并通过 MQTT 协议上传 DHT11 获取的温湿度值。 二、项目框图 三、硬件部分 四、项目源码及实现 1.项目源码 https://gitee.com/GeekerGao/upload-the-temperature-and-humidity-to-OneNET 2.项目实现

C语言 之 理解数组(8)数组和指针相关的题目 详细解答 快来观看

文章目录 1. 数组和指针相关题1.1 一维数组1.2 字符数组代码1代码2代码3代码4代码5代码6 1.3 二维数组 1. 数组和指针相关题 这里主要讲解的是通过sizeof和strlen来对数组和指针进行更深入的一些了解&#xff0c;建议有兴趣与初学者可以先尝试自己思考来完成。 1.1 一维数组 …

GPT-Pilot —— 让AI来写代码

1.概述 什么是GPT-Pilot&#xff1f; 一个AI开发者伴侣&#xff0c;可以从0开始构建应用程序&#xff0c;可以自己编写代码、配置开发环境、管理开发任务、调试代码。 项目地址&#xff1a;https://github.com/Pythagora-io/gpt-pilot 不仅仅是一个自动完成功能或 PR 消息的助…

CSP-J 2022 读程题16.答案与解析

知识点 普及 逻辑运算 16. 01 #include <iostream> 02 03 using namespace std; 04 05 int main() 06 { 07 unsigned short x, y; 08 cin >> x >> y; 09 x (x | x << 2) & 0x33; 10 x (x | x << 1) & 0x55; 11 y (y …

常见离线语音识别模块功能说明——天问ASR;机芯智能;海凌科;轻语音

本文章从开发方式及功能等方面上进行说明&#xff0c;便于开发者进行选择与开发。 本文章依据截至2024年8月1日各网站资料进行整理编写。 总结&#xff1a; 开发方式上&#xff1a; 天文ASR 有着最灵活的开发方式&#xff0c;可完全按照程序员意愿进行开发&#xff0c;同时有…

零基础进程最详解:进程状态、僵尸进程、孤儿进程、阻塞态、挂起态、进程切换、进程常用命令、进程创建、队列优先级

目录 强烈建议全文阅读&#xff01;&#xff01;&#xff01; 强烈建议全文阅读&#xff01;&#xff01;&#xff01; 强烈建议全文阅读&#xff01;&#xff01;&#xff01; 一、进程状态 二、僵尸和孤儿进程 1、僵尸进程 Z&#xff08;zombie&#xff09; 2、孤儿进…

[012-1].第12节:Mysql的配置文件的使用

6.配置文件的使用 6.1.配置文件的格式 1.查看配置文件&#xff1a;vim /etc/my.cnf 2.在配置文件中华定义了很多组&#xff0c;组名就分别是server&#xff0c;mysqld&#xff0c;mysqld_safe,client,mysql,mysqladmin&#xff0c;每个组下面就可以定制很多启动项&#xff1b…

scrapy框架2

scrapy框架2 一、中间件 &#xff08;下载中间件&#xff09; 利用中间件加cookie 案例&#xff1a;登录以后下载豆瓣的电影信息 def get_cookie_dict():cookie_str登陆后的cookiecookie_dict{}for item in cookie_str.split(";"):key,valueitem.split(""…

遇到缓存问题

问题&#xff1a;在事务中在进行数据库查询所有的数据后&#xff0c;将其中的数据更改几个后&#xff0c;重新进行查询。发现此时返回的数据并不是修改之后的数据。 经过学习后发现是Mybatis的一级缓存问题,同时也了解的Mybatis的二级缓存&#xff1a; Mybatis一级缓存: 当在…

SpringCloud网关 SpringBoot服务 HTTP/HTTPS路由/监听双支持

背景 一般来说SpringCloud Gateway到后面服务的路由属于内网交互&#xff0c;因此路由方式是否是Https就显得不是那么重要了。事实上也确实如此&#xff0c;大多数的应用开发时基本都是直接Http就过去了&#xff0c;不会一开始就是直接上Https。然而随着时间的推移&#xff0c…

WebGoC题解(16) 386.山洞

题目描述 小C和弟弟一起参观影视城&#xff0c;发现里面有m个圆形排列的“小山洞”&#xff0c;山洞用半径20、颜色号为编号的圆表示&#xff0c;由边长是100的线连接&#xff0c;均匀的发布一圈&#xff08;1号洞在正上方&#xff09;。m为8时如下图&#xff1a; 小C跟弟弟提议…