【因果推断与机器学习】Causal Inference: Chapter_3

2023-10-27

Identification

Introduction

在介绍这节的补充内容呢,我想先引进一个著名的**“辛普森悖论”**。
辛普森医生发现了一种新药,这种新药可以降低心脏病发作的风险,于是他开始查找历史的实验数据。他注意到,如果男性患者服用了这种药,心脏病发作的风险反而高了。然后他再转向女性患者,结果大吃一惊:女性患者复用这种药以后心脏病发作的风险也变高了。但是这种药从数据上来说对整个人群来说是有益的。为什么对女性、男性有害,但是对人类有益?
以数据表明这种现象如下。

服药组 未服药组
男性( 357 700 = 0.51 ) \frac {357}{700}=0.51) 700357=0.51) 81 87 = 0.93 \frac {81}{87}=0.93 8781=0.93 234 270 = 0.87 \frac {234}{270}=0.87 270234=0.87
女性( 363 700 = 0.49 \frac {363}{700}=0.49 700363=0.49) 192 263 = 0.73 \frac {192}{263}=0.73 263192=0.73 55 80 = 0.69 \frac {55}{80}=0.69 8055=0.69
总数 273 350 = 0.78 \frac {273}{350}=0.78 350273=0.78 289 350 = 0.83 \frac {289}{350}=0.83 350289=0.83

其中反映了男性和女性服药与不服药的比例是不同的,男性服药的人数远远小于不服药的人数,而女性服药的人数远远大于不服药的人数,因此性别是复用药物和心脏病发作的一个cofunder。辛普森悖论不过是非常简单的数学现象。如果 A / B   >   a / b A/B \: > \: a/b A/B>a/b and C / D   >   c / d C/D \: > \:c/d C/D>c/d, 那么从中不能推出 ( A + C ) / ( B + D )   >   ( a + b ) / ( c + d ) (A +C)/(B+D) \: > \: (a+b)/(c+d) (A+C)/(B+D)>(a+b)/(c+d)

Identification under Graphical Constraints

使用 d o − c a c u l u s do-caculus docaculus我们可以在许多情况下推导出简单的因果识别方法。在本 节中介绍两种方法一个是(1)调整公式,(2)前门路径法则 。

Adjustment Formula

举个例子,让我们考虑一个简单的因果概率分布 P ( B ∣ d o ( A ) ) P(B|do(A)) P(Bdo(A))在某个因果图 G G G中。在这里,我们将展示对这一因果目标的两种简单操作如何为我们提供一种有用的识别方法,称为调整公式:
P ( B ∣ d o ( A ) )   =   ∑ Z P ( B , Z ∣ d o ( A ) ) = ∑ Z P ( B ∣ d o ( A ) , Z ) P ( Z ∣ d o ( A ) ) = ∑ Z P ( B ∣ d o ( A ) , Z ) P ( Z ) i f ( Z ⊥ a ) G d o ( A ) = ∑ Z P ( B ∣ A , Z ) P ( Z ) i f ( B ⊥ A ∣ Z ) G A \begin{aligned} P(B|do(A))\: &=\: \sum_{Z}P(B,Z|do(A)) \\ &= \sum_{Z}P(B|do(A),Z)P(Z|do(A)) \\ &=\sum_{Z}P(B|do(A),Z)P(Z) \quad if (Z\bot a)G_{do(A)} \\ &=\sum_{Z}P(B|A,Z)P(Z) \quad if \quad(B\bot A|Z)_{GA} \end{aligned} P(Bdo(A))=ZP(B,Zdo(A))=ZP(Bdo(A),Z)P(Zdo(A))=ZP(Bdo(A),Z)P(Z)if(Za)Gdo(A)=ZP(BA,Z)P(Z)if(BAZ)GA
第一步其实反映了就算经过干预变量A,变量Z的边缘分布不变。第二步可以通过全概率公式得到,第三步是使用了 d o − c a c u l u s do-caculus docaculus的规则-3,也就是变量Z和变量A是相互独立的。第四步应用 d o − c a c u l u s do-caculus docaculus的规则-2(在变量z,d-分离变量a和变量b)其中变量a的所有出度边都已经被移除。最终得到的这个公式也被称为调整公式 。运算过程也叫作调整 Z Z Z
注意到对于一个成功的因果标识来说 P ( A ∣ Z ) P(A|Z) P(AZ)应该是严格的大于0的。如果在已观测的数据中没有关于变量 A = a A=a A=a的数据,那么就不可能的识别出 P ( B ∣ d o ( A ) ) P(B|do(A)) P(Bdo(A))因为 p ( b ∣ a , z ) ) p(b|a,z)) p(ba,z))是不确定的。这一要求通常被称为因果识别的重叠假设,我们将在第4章的评估中进一步讨论其含义。

为了解释以上公式我们以因果图来表示上述关系


图1 辛普森悖论因果图

为了找出该药物在人群中到底是有益还是有害,我们利用章节2 中的假设干预的方法计算因果效应:
P ( Y ∣ d o ( x = 1 ) )   −   P ( Y = 1 ∣ d o ( x = 0 ) ) P(Y|do(x=1))\: - \: P(Y=1|do(x=0)) P(Ydo(x=1))P(Y=1∣do(x=0))
由于假设了治疗变量,所以得到新的因果图如图2所示


图2

经过修改后的的因果图概率表示为: P ( Y = y ∣ d o ( X = x ) ) P(Y=y|do(X=x)) P(Y=ydo(X=x))变成 P m ( Y = y ∣ X = x ) P_m{(Y=y|X=x)} Pm(Y=yX=x)。其中m下标表示修改后的概率分布。同时我们知道,经过干预后 Z Z Z的边缘分布是不变的,也就是:
P m ( Z = z )   =   P ( Z = z ) P_m{(Z=z)}\: =\: P(Z=z) Pm(Z=z)=P(Z=z)
同时,经过干预后,以 Z Z Z X X X为条件的 Y Y Y的条件概率是不变的,也就是:
P m ( Y = y ∣ Z = z , X = x ) = P ( Y = y ∣ Z = z , X = x ) P_m{(Y=y|Z=z,X=x)}=P(Y=y|Z=z,X=x) Pm(Y=yZ=z,X=x)=P(Y=yZ=z,X=x)
将以上式子联系在一起就有:
P ( B ∣ d o ( A ) )   = P m ( Y = y ∣ X = x ) = ∑ Z P m ( Y = y ∣ X = x , Z = z ) P m ( Z = z ∣ X = x ) = ∑ Z P m ( Y = y ∣ X = x , Z = z ) P m ( Z = z ) = ∑ Z P ( Y = y ∣ X = x , Z = z ) P ( Z = z ) \begin{aligned} P(B|do(A))\: &= P_m{(Y=y|X=x)} \\ &= \sum_{Z}P_m{(Y=y|X=x,Z=z)}P_m{(Z=z|X=x)} \\ &=\sum_{Z}P_m{(Y=y|X=x,Z=z)}P_m{(Z=z)} \\ &=\sum_{Z}P{(Y=y|X=x,Z=z)}P(Z=z) \end{aligned} P(Bdo(A))=Pm(Y=yX=x)=ZPm(Y=yX=x,Z=z)Pm(Z=zX=x)=ZPm(Y=yX=x,Z=z)Pm(Z=z)=ZP(Y=yX=x,Z=z)P(Z=z)

因此考虑到性别这个混杂因素计算过程如下:
P ( Y = 1 ∣ d o ( X = 1 ) ) = P ( Y = 1 ∣ X = 1 , Z = 1 ) P ( Z = 1 ) + P ( Y = 1 ∣ X = 1 , Z = 0 ) P ( Z = 0 ) P(Y=1|do(X=1))=P(Y=1|X=1,Z=1)P(Z=1)+P(Y=1|X=1,Z=0)P(Z=0) P(Y=1∣do(X=1))=P(Y=1∣X=1,Z=1)P(Z=1)+P(Y=1∣X=1,Z=0)P(Z=0)
进而得到:
P ( Y = 1 ∣ d o ( X = 1 ) ) = 0.832 P(Y=1|do(X=1))=0.832 P(Y=1∣do(X=1))=0.832
P ( Y = 1 ∣ d o ( X = 0 ) ) = 0.781 P(Y=1|do(X=0))=0.781 P(Y=1∣do(X=0))=0.781

The Front-door Criterion

谈到 F r o n t − d o o r   C r i t e r i o n Front-door \: Criterion FrontdoorCriterion就不得不提及后门法则。举个例子,以上内容提到的辛普森悖论的例子里含有一个性别的混杂因素,而后门路径法则的作用就是为了消除混杂因素的。在这里我们必须要明白什么是后门路径,什么是前门路径。以图1中变量X和变量Y为例,变量 X 和 Y之间的后门路径就是连接 X 和 Y 但箭头不从变量 X 出发的路径,即路径 X ← Z → Y X\leftarrow Z \rightarrow Y XZY称为X和Y之间的后门路径。从 X → Y X\rightarrow Y XY的路径就是前门路径。
总结一下后门路径法则就是:假如变量Z阻断了所有变量X和变量Y之间的路径,这个路径连接了X且指向变量X,也就是说变量Z中的节点都不是X的后代节点,称变量Z满足(X,Y)的后门路径准则。
根据上一节所写到的内容就可以写出调整公式:
P ( Y ∣ d o ( X = x ) ) = ∑ Z P ( Y = y ∣ X = x , Z = z ) P ( Z = z ) P(Y|do(X=x))=\sum_ZP(Y=y|X=x,Z=z)P(Z=z) P(Ydo(X=x))=ZP(Y=yX=x,Z=z)P(Z=z)
进入正题,到底什么是前门路径法则?
调整公式是可以仅从图形假设和do-calculus导出的识别方法之一。有时,有效调整集所需的一个或多个变量未被观察到(比如说辛普森悖论中的性别变量)在这种情况下,我们不能在调整公式中使用该特定的调整集。如果没有有效的调整集,其变量都被观察到,那么我们不能使用调整公式进行识别得到因果公式。
然而,应用do-calculus的规则可以产生其他策略。前门路径法则就是这样一种方法,当应用调整公式所必需的混杂变量未被观察到时,用于识别因果效应。考虑图3,该图示出了未观察到的混杂因素 U 使得无法应用调整公式。在这个简单的示例中,唯一有效的调整集是 U。 因此,没有观察 U,我们无法计算调整公式来识别 P ⁡ ( C ∣ d o ⁡ ( A ) ) P⁡(C|do⁡(A)) P(Cdo(A))直接。
考虑图3中的节点B,由于节点A不是直接作用于节点C而是通过节点B,而且并不具有相同的混杂因素。这种特殊的结构将使我们应用前门路径法则,而不能应用调整公式来识别目标因果效应。
前门路径法则的关键是我们可以分解变量A和C之间的因果关系,对于图3来说分解的因果效应式子为:
P ( C ∣ d o ( A ) ) = ∑ B P ( C ∣ d o ( B ) ) P ( B ∣ d o ( A ) ) P(C|do(A))=\sum_B{P(C|do(B))P(B|do(A))} P(Cdo(A))=BP(Cdo(B))P(Bdo(A))


图3

现在让我们来看一下这些个公式中的因子,我们在仅使用我们能够观察到的数据的情况下有什么办法来解决识别出 P ( C ∣ d o ( B ) ) P(C|do(B)) P(Cdo(B)) P ( B ∣ d o ( A ) ) P(B|do(A)) P(Bdo(A)),在这种情况下每个因果公式在使用调整公式和 d o − c a c u l u s do-caculus docaculus规则2的条件下很容易识别出来。
首先根据调整公式得到 P ( C ∣ d o ( B ) ) = ∑ A P ( C ∣ B , A ) P ( A ) P(C|do(B))=\sum_AP(C|B,A)P(A) P(Cdo(B))=AP(CB,A)P(A)
根据do运算的规则2可以得到 P ( B ∣ d o ( A ) ) = P ( B ∣ A ) P(B|do(A))=P(B|A) P(Bdo(A))=P(BA)
结合在一起就有了:
P ( C ∣ d o ( A ) ) = ∑ B ∑ A P ( C ∣ B , A ) P ( A ) P ( B ∣ A ) P(C|do(A))=\sum_B\sum_AP(C|B,A)P(A)P(B|A) P(Cdo(A))=BAP(CB,A)P(A)P(BA)

Parametric Assumptions and Instrumental Variables


图4

考虑图4所示的因果图。如果我们的目标是确定 P ( B ∣ d o ( A ) ) P(B|do(A)) P(Bdo(A)),我们可以很容易地看出,调整公式不适用,因为混淆特征U未被观察到。由于A和B之间没有中介变量,我们也不能应用前门标准。事实上,A对B的影响仅基于图形假设是无法识别的。

这种因果图很常见。例如,我们经常处于这样的情况:我们有能力进行部分随机化的实验,我们可以随机化Z,但不能直接控制我们主要关注的因子A。例如,这可能发生在对人的实验中,我们可能通过推荐、鼓励或奖励来影响个人的决定,但在其他方面无法完全控制。这也可能发生在许多自然环境中,其中一些可观察到的独立因素,如天气,在确定a中起部分作用。

然而,Z对A的影响有一个有趣的机会。因为在这条路径上Z和B被结点A给d分离了,我们可以很容易的识别出 P r ( A ∣ d o ( Z ) ) = P r ( A ∣ Z ) Pr(A|do(Z))=Pr(A|Z) Pr(Ado(Z))=Pr(AZ),同样的我们可得出 P r ( B ∣ d o ( z ) ) = P r ( B ∣ d o ( z ) ) Pr(B|do(z))=Pr(B|do(z)) Pr(Bdo(z))=Pr(Bdo(z))
工具变量法是一种利用辅助变量Z来分离因果效应的识别方法。遵循图4的图形结构的变量称为工具变量。工具变量设置满足几个标准2:

  • Z和B是独立的,如果不是A。更正式地说,Z和B在图Gnull(A)中是d-分离的。这意味着Z仅通过通过A的路径影响B,并且Z和B由于共同原因而不相关。
  • Z影响A。Z和A不是d分离的,P(A|do(Z))是可识别的。
  • Z对A和A对B的影响对于未观察变量U是均匀的。

前两个条件可以从因果图中读取,而第三个条件是附加的参数约束。第一个条件确保,无论Z对B有什么影响,它只能流过A。Z对B的直接影响不可能不经过A。此外,Gnull(A)中Z和B的d分离意味着Z独立于路径A→B上的混杂因子U。
第二个条件表明Z对a具有非零影响,并且该影响是可识别的。从直觉上讲,Z对B的影响可以被认为是Z对A的影响和A对B的作用的组合,因此,如果Z对A没有影响,它将不会给我们提供关于A的有用信息。在所示的特定图表中,我们可以看到, P ( A ∣ d o ( Z ) ) = P ( A ∣ Z ) P(A|do(Z))=P(A | Z) P(Ado(Z))=P(AZ)是很容易识别的,因为Z和A没有共同的原因(在我们的示例中,Z是随机的)。
最后一个条件是,假设Z对A的影响是均匀的(即,U不修改Z对A影响),并且A对B的影响也是均匀的(U不修改A对B影响)。这将使我们能够确保我们对Z对A的影响以及Z对B的间接影响的观察不会与未观察到的因素U的任何相互作用纠缠在一起。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【因果推断与机器学习】Causal Inference: Chapter_3 的相关文章

  • 在Python中,如何将矩阵逆时针旋转90度?

    gt gt gt def rotate matrix k List List int For example if I have m 1 2 3 2 3 3 5 4 3 rotate matrix m should give me 3 3
  • 键入的完整命令行

    我想获得输入时的完整命令行 This join sys argv 在这里不起作用 删除双引号 另外 我不想重新加入已解析和拆分的内容 有任何想法吗 你太迟了 当键入的命令到达 Python 时 您的 shell 已经发挥了它的魔力 例如 引
  • Flask 中“缺少 CSRF 令牌”,但它在模板中呈现

    问题 当我尝试登录 使用 Flask login 时 我得到Bad Request The CSRF session token is missing但令牌正在呈现 在模板中 secret key 已设置 并且我在本地运行localhost
  • 为什么在访问 Python 对象属性时使用 getattr() 而不是 __dict__ ?

    在具有一定程度的 Python 对象自省的源代码示例和 SO 答案中 常见的模式是 getattr some object attribute name string 是否有理由优先选择这种模式 some object dict attri
  • 来自 pandas 数据帧的烛台图,用日期替换索引

    此代码给出了带有移动平均线的烛台图 但 x 轴位于索引中 我需要 x 轴位于日期中 需要做什么改变 import numpy as np import pandas as pd import matplotlib pyplot as plt
  • 使用 NumPy 编写一个函数来计算具有特定公差的积分

    我想编写一个自定义函数来以特定容差对表达式 python 或 lambda 函数 进行数字积分 我知道与scipy integrate quad人们可以简单地改变epsabs但我想使用 numpy 自己编写该函数 From 这篇博文 htt
  • 使用pathlib获取主目录

    翻看新的pathlib在 Python 3 4 中 我注意到没有任何简单的方法来获取用户的主目录 我能想到的获取用户主目录的唯一方法是使用旧的os path像这样的库 import pathlib from os import path p
  • 用 Python 绘制直方图

    我有两个列表 x 和 y x 包含字母表 A Z Y 包含它们在文件中的频率 我尝试研究如何在直方图中绘制这些值 但在理解如何绘制它方面没有成功 n bins patches plt hist x 26 normed 1 facecolor
  • ValueError:数据必须为正(boxcox scipy)

    我正在尝试将我的数据集转换为正态分布 0 8 298511e 03 1 3 055319e 01 2 6 938647e 02 3 2 904091e 02 4 7 422441e 02 5 6 074046e 02 6 9 265747e
  • 在 Linux 上使用多处理时,TKinter 窗口不会出现

    我想生成另一个进程来异步显示错误消息 同时应用程序的其余部分继续 我正在使用multiprocessingPython 2 6 中的模块来创建进程 我试图用以下命令显示窗口TKinter 这段代码在Windows上运行良好 但在Linux上
  • 在请求中设置端口

    我正在尝试利用cgminer使用 Python 的 API 我对利用requests图书馆 我了解如何做基本的事情requests but cgminer想要更具体一点 我想缩小 import socket import json sock
  • 高级描述熊猫

    有没有像 pandas 那样更高级的功能 通常我会继续这样 r pd DataFrame np random randn 1000 columns A r describe 我会得到一份很好的总结 就像这样 A count 1000 000
  • python Recipe:列出最接近等于值的项[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 考虑像这样的列表 0 3 7 10 12 15 19 21 我想获得最接近任何值的最近的最小数字 所以如果我通过4 我会得到3 如果我
  • 无法导入QUERY_TERMS

    我正在运行一个网站Python and Django Django filters 2 1 installed Django 2 1 installed 当我运行时 我收到以下错误 importError Could not import
  • 从 wxPython 事件处理程序中调用函数

    我正在努力寻找一种在 wxPython 事件处理函数中使用函数的方法 假设我有一个按钮 单击该按钮时 它会使用事件处理程序运行一个名为 OnRun 的函数 但是 用户忘记单击 OnRun 按钮之前的 RadionButton 我想弹出一个
  • 如何创建用于霍夫曼编码和解码的树?

    对于我的作业 我将对霍夫曼树进行编码和解码 我在创建树时遇到问题 并且陷入困境 不要介意打印语句 它们只是让我测试并查看函数运行时的输出是什么 对于第一个 for 循环 我从主块中用于测试的文本文件中获取了所有值和索引 在第二个 for 循
  • 无需访问 Internet 即可部署 Django 的简单方法?

    我拥有的是使用 Django 开发的 Intranet 站点的开发版本以及放置在 virtualenv 中的一些外部库 它运行良好 我可以在任何具有互联网连接的计算机上使用相同的参数 使用 pip 轻松设置 virtualenv 但是 不幸
  • UnicodeDecodeError:部署到 Heroku 时,“utf-8”编解码器无法解码位置 0 中的字节 0xff

    我尝试在heroku上部署我的简单django项目 但我不明白如何解决这个问题 这是git push heroku master remote Traceback most recent call last remote File tmp
  • Python 读取未格式化的直接访问 Fortran 90 给出不正确的输出

    这是数据的写入方式 它是一个二维浮点矩阵 我不确定大小 open unit 51 file rmsd nn output form unformatted access direct status replace recl Npoints
  • 如何使用 Python/Django 在 Facebook 中获取(和使用)扩展权限

    我正在尝试编写一个简单的应用程序 让用户授予我的代码写入其页面的 Facebook 流的权限 据我了解 它应该很简单 让用户单击一个按钮 启动一个弹出窗口 其中包含我的 Facebook 应用程序中的页面 在该页面中 他们单击授予的内容流发

随机推荐

  • 关于解决win10的 tencent qqmail plugin 卸载不了的问题

    问题出现场景 我也是偶然一次在搜索我电脑里面下载的程序时 发现有个叫做tencent qqmail plugin的程序怎么也删除不掉 经过的我不断的尝试 欸 我终于找到解决方法了 问题描述 我之前使用的方法的是在 设置 应用 应用程序 中卸
  • 在VMware里克隆出来的CentOSLinux。。 ifconfig...没有看到eth0.。然后重启网卡又报下面错误。

    原文地址 http www 51testing com html 90 360490 846295 html 故障现象 service network restart Shutting down loopback insterface OK
  • 流程图中的虚线含义_流程图图形符号标准含义简介

    流程图是我们工作中经常会用到的一种工具 形象直观 便于理解 直观地描述一个工作过程的具体步骤 流程图对准确了解事情是如何进行的 以及决定应如何改进过程极有帮助 这一方法可以用于整个企业 以便直观地跟踪和图解企业的运作方式 流程图中有很多图形
  • 数据挖掘初探(skleran)

    1 使用sklearn进行数据挖掘 1 1 数据挖掘的步骤 数据挖掘通常包括数据采集 数据分析 特征工程 训练模型 模型评估等步骤 我们使用sklearn进行虚线框内的工作 sklearn也可以进行文本特征提取 通过分析sklearn源码
  • RT-Thread记录(十一、I/O 设备模型之UART设备 — 源码解析)

    深入理解 RT Thread I O 设备模型 分析 UART设备源码 目录 前言 一 初识 UART 操作函数 应用程序 二 UART 的初始化 2 1 UART 设备初始化位置 2 2 UART 设备初始化函数分析 stm32 uart
  • 华为IP的考试费要好几千,想问一下这个证书的含金量怎么样?

    虽然华为认证HCIP考试只考笔试 题库稳 运气好的话刷题库就有可能会过 但是其实学的时候还是好好学的 要不然只为了考试而去背题 但是实际操作能力不行的话一样会被企业拒绝的 最重要的还是掌握华为认证HCIP的技能 证书只是找工作的一个敲门砖
  • 服务器系统这么做,服务器怎么做系统

    服务器怎么做系统 内容精选 换一换 无法直接从云备份控制台查看备份中的数据 您可以通过以下几种方式进行查看 云服务器备份使用云服务器备份创建镜像后 再使用镜像创建云服务器 登录云服务器 查看服务器中的数据 云硬盘备份使用云硬盘备份创建新的云
  • 算法题:完全二叉树的权值

    问题描述 给定一棵包含 N 个节点的完全二叉树 树上每个节点都有一个权值 按从 上到下 从左到右的顺序依次是 A1 A2 AN 如下图所示 现在要把相同深度的节点的权值加在一起 他想知道哪个深度的节点 权值之和最大 如果有多个深度的权值和同
  • 代理模式,以及Java的动态代理

    定义 为其他对象提供一种代理以控制对这个对象的访问 可以提供额外不同的操作 UML类图 Subject类 定义了RealSubject和Proxy的共用接口 这样就在任何使用RealSubject的地方都可以使用Proxy RealSubj
  • UNIX环境高级编程 学习笔记 第十八章 终端I/O

    20世纪70年代后期 系统 UNIX System III 发展出一套不同于V7 Version 7 Unix 的终端IO例程 使得UNIX终端IO处理分立为两种不同风格 一种是系统 风格 它延续到了System V 另一种是V7风格 它成
  • 暴力破解Windows、Linux登录密码

    Windows密码破解 使用hydra离线破解windows密码 使用getpass内存提取windows用户密码 使用quarkpwdump导出windows用户密码hash值 Linux密码破解 使用hydra离线破解linux密码 将
  • idea启动java项目卡住问题

    当遇到 Method breakpoints may dramatically slow down debugging时 这时有可能可以进行下面步骤解决 Ctrl Shift F8 打开Breakpoints面板 然后可以测试是否可行
  • 记录好项目D21

    记录好项目 你好呀 这里是我专门记录一下从某些地方收集起来的项目 对项目修改 进行添砖加瓦 变成自己的闪亮项目 修修补补也可以成为毕设哦 本次的项目是个基于Springboot的教务管理系统 学生管理系统 课表查询系统 一 系统介绍 本项目
  • 使用EventEmitter构建基础的生命周期模型

    使用EventEmitter构建基础的生命周期模型 比如onCreate onUpdate onDestroy 分别在每个阶段console log一条消息 比如说 我们构建一个便签管理的EventEmitter 在onCreate时初始化
  • 献给面试学生 关键字const是什么意思 ESP(译者:Embedded Systems Programming) --Dan Saks概括了const的所有用法

    关键字const是什么含意 答 我只要一听到被面试者说 const意味着常数 我就知道我正在和一个业余者打交道 去年Dan Saks已经在他的文章里完全概括了const的所有用法 因此ESP 译者 Embedded Systems Prog
  • 商品期货的模拟盘能打印交易记录吗(商品期货的模拟盘能打印交易记录吗为什么)

    商品期货模拟盘可以打印交易记录吗 仿真盘没有实际测试过 大家可以自己试试 股指期货模拟交易和股指期货模拟交易有什么区别 您好 开展模拟交易的目的是为了深化对股指期货合约 规则和制度的检验 开展投资者教育活动 在模拟的交易过程中 交易过程 结
  • 【4-3】多彩的声音

    设计和实现一 个Soundable发声接口 该接口具有发声功能 同时还能调节声音大小 Soundable接口的这些功能将由有3种声音设备来实现 他们分别是收音机Radio 随身听Walkman 手机MobilePhone 最后还需设计 个应
  • mac查看电脑ip(在终端输入命令)

    在终端输入命令 ipconfig getifaddr en0
  • 科普:你该认识的四种常见开源许可证

    为什么80 的码农都做不了架构师 gt gt gt 开源早已成为很多科技企业关注的焦点 我们也常会发现部分开源技术后面标注了某种协议 这意味着这些开源代码被框上了某种束缚 或者说这些代码将必须遵循这些规则 否则可能会触及法律 总的来看 如今
  • 【因果推断与机器学习】Causal Inference: Chapter_3

    Identification Introduction 在介绍这节的补充内容呢 我想先引进一个著名的 辛普森悖论 辛普森医生发现了一种新药 这种新药可以降低心脏病发作的风险 于是他开始查找历史的实验数据 他注意到 如果男性患者服用了这种药