Direct-LiNGAM算法理解

news/2024/5/18 13:59:05 标签: 论文, 因果关系发现

无论是ICA-LiNGAM还是Direct-LiNGAM,都是属于LiNGAM,那什么是LiNGAM呢?首先我们要搞懂这个问题。

问题一:什么是LiNGAM?

答:LiNGAM是Linear Non-Gaussian Acyclic Model的缩写,其是一种估计结构方程模型或线性贝叶斯网络的新方法。它假设(a)数据的生成过程是线性的;(b)不存在未观测到的混淆因子;(c)误差项(扰动项 disturbance variables or 噪声项)是方差非0的非高斯分布。

那为什么LiNGAM可以保证在数据服从其假设的条件下可以做到恢复除数据中的因果结构呢?那为了回答这个问题,我们就要看看再LiNGAM假设下,变量间的因果关系要如何定义了。假设x与y之间存在因果关系,并且x是y的原因,那么其因果关系就可以用结构方程定义如下:

y:=ax+u_{x},因为LiNGAM中假设了误差项u_{x}是非高斯的,所以判断两个变量之间的因果关系方向的时候,因为非高斯具有不对称性,所以利用回归计算两个方向所得的残差时,至少有一个是方向的变量是与残差独立的。举个两个变量的例子,假设真正的因果图如下:

 那么对于上面这个因果图和LiNGAM的假设,我们可以得知,U_1 \perp \!\!\! \perp U_2,X_1 \perp \!\!\! \perp U_2这些独立关系。

那么当然我们一开始无法确定X1与X2之间边的方向,那么LiNGAM是如何利用噪声项的非高斯确定这个方向的呢?

首先我们对于两个方向都做一次回归,也就是说用x1对x2做一次回归,然后再使用x2对x1做一次回归。假设回归方程如下所示:

x_2=ax_1+{\tilde{u_2}} \\ x_1=bx_2+{\tilde{u_{1}}}那么将ax1与bx2移到左边,那么我们可以得到\tilde{u_2},\tilde{u_1},那么我们只要判断x1与x2是否独立于这两个噪声项就可以确定边的方向,因为在真正的因果图中,x1是于u2独立的,而x2与u1是依赖的,所以由此就可以确定边的方向。

但是说到这里,好像并没有体现噪声项的非高斯性在这里有什么帮助,但其实我们能根据这个残差项与变量间的独立性来判断方向就是因为噪声项的非高斯性。因为有了非高斯性,所以即使我们的因果关系的函数是线性的,但是也不存在可以使用逆函数去表达,因为噪声项的非高斯性具有不对称性。

当然在LiNGAM中,其真正的方法不是我上面写的那样,我上面所写的只是为了说明非高斯的帮助,其真正的算法见:http://www.google.com/url?q=http%3A%2F%2Fwww.cs.helsinki.fi%2Fgroup%2Fneuroinf%2Flingam%2FJMLR06.pdf&sa=D&sntz=1&usg=AFQjCNEzI2JLQIYLqffmZ31t0YHOWBRJDw

 在粗略回答了什么是LiNGAM以及其中非高斯的作用是什么后,当然大家可能会想既然非高斯有用,那么非线性大概率也是有帮助的了。的确,非线性也可以为我们识别因果结构提供帮助,这个会在接下来的ANM中讲到。

说完问题一,那么问题二自然就是什么是Direct-LiNGAM咯!

问题二:什么是Direct-LiNGAM?它与LiNGAM有什么区别?

 Direct-LiNGAM与LiNGAM的区别就是在于估计下述公式中的B矩阵的方式不同,其本质都是一样的。

\textbf{x}=B\textbf{x}+\textbf{e},这个表达式其实就是上面公式的矩阵化表达而已,这个B矩阵其实就是一个系数矩阵。

那么在Direct-LiNGAM中,是如何估计这个矩阵B呢?在说明其估计的算法前,首先要给出一个定理与两个引理。

这个定理讲的就是如果一个变量进行了不同的线性组合的结果不是相互依赖的,那就证明该变量是高斯的。

 引理1讲的就是当输入的数据是严格符合LiNGAM的假设时,可以利用两个变量做回归相减后的残差与变量之间独立性检验去寻找一个图中的“可观察的外生变量”(即无父节点,只有子节点的变量)。

 引理2讲的就是当输入的数据是严格符合LiNGAM的假设时,利用引理1发现一个“外生变量”后,从图中剔除该外生变量后,LiNGAM的假设对于残差组成的矩阵依然成立。这里的残差r就相当于一开始的变量x。

在了解上面的定理和引理后,下面就可以介绍Direct-LiNGAM识别矩阵B的方法了。下图就是其算法过程

 

简单的来说就是,首先根据引理1,利用残差与变量的独立性找到图中存在的“外生变量”,然后通过讲残差向量与残差矩阵对变量集合x与数据矩阵X重新赋值来剔除这个外生变量对其余变量的影响。然后不断重复该步骤,直至剩下最后一个变量,这样我们就可以得到一个在某种程度上代表了因果关系放心的Causal Order列表。举个例子,如果现在得到的Causal Order列表是[x1,x3,x2],那么我们就可以认为可能存在这种路径:x1->x3,x1->x2,x3->x2。这就是Causal Order所隐含的意义。

那么再得到Causal Order列表后怎么去估计矩阵B呢?这就很简单了,我们在最开始的数据X上使用Causal Order列表中的前一批变量对后一个变量做回归,然后将回归系数做为矩阵B中元素的值。那么什么叫做用前一批变量对后一个变量做回归呢?还是上面的例子,我们的Causal Order列表为:[x1,x2,x3],那么B矩阵就为3×3的矩阵,那么首先用x1对x2做回归确定b_{21}的值,然后使用x1,x2对x3做回归,确定b_{31},b_{32} 的值,当然,由于数据中一般都会存在误差,所以在估计完B矩阵后,还有对B矩阵进行剪枝,就是将那些非常小的值置为0,可以认为相应的变量之间不存在因果关系。

在Direct-LiNGAM中,我们还可以利用先验知识来减少我们算法的运行时间,在论文中,它是这样说的:

使用的引理如下所示:

 在使用了先验知识后,Direct-LiNGAM算法的步骤在第二步就发生了改变了,其变化如下:

 在这里U_c代表的是图中可能的“外生变量集”(即无父节点的变量),在添加了先验知识后,寻找“外生变量”就只需要从U_c中寻找即可,相比原先的步骤可以减少一定的搜索时间。

所以添加先验知识的目的就是为了减少算法所需时间,以及更准确的寻找“外生变量”。

以上就是Direct-LiNGAM算法的核心内容分享,如果想要详细了解,见:DirectLiNGAM: A direct method for learning a linear non-Gaussian structural equation model.

 那么对于Direct-LiNGAM而言,有没有什么缺点呢?答案是当然有的,第一点就是其计算效率慢,比ICA-LiNGAM要慢。第二点就是其假设比较严格,因为现实世界中,数据产生的机制大多数是非线性的且不符合其假设。

以上就是所有有关Direct-LiNGAM的内容,谢谢大家抽时间阅读,如果哪些写的不对、不好可以指出来,万分感谢!


http://www.niftyadmin.cn/n/1060877.html

相关文章

不允许保存更改您所做的更改要求删除

工具菜单----选项----Designers(设计器)----阻止保存要求重新创建表的更改 取消勾选即可转载于:https://www.cnblogs.com/wuyujie/p/8308794.html

【SICP练习】48 练习:2.7-2.16【待添加】

待添加 版权声明:本文为 NoMasp柯于旺 原创文章,如需转载请联系本人。 转载于:https://www.cnblogs.com/NoMasp/p/4786171.html

js日期计算及快速获取周、月、季度起止日,获取指定日期周数以及星期几的小例子...

JS获取日期时遇到如下需求,根据某年某周获取一周的日期。如开始日期规定为星期四到下一周的星期五为一周。 格式化日期: function getNowFormatDate(theDate) { var day theDate; var Year 0; var Month 0; var Day 0; var CurrentDate "…

ANM(Nonlinear causal discovery with additive noise models)

在上一篇文章我们讲了当数据背后的生成机制是线性的时候,我们如何从数据中恢复出其背后的因果结构。那么当数据背后生成的机制是非线性的时候,我们该如何从数据中恢复出其背后的因果结构呢? 本篇文章分享的论文就是提出了一个方法&#xff0…

openssl与java(读取加密码的密钥)

openssl与java(读取加密码的密钥) 最近在研究java security方面的东西,java自带可以使用各种加密解密算法(rsa,dsa,des3,aes,md5...),但往往一些密钥是第三方给我们的,我们需要用java装载这些密…

[原]Jenkins(十七) jenkins再出发之配置SVN

创建一个demo project 配置SVN: 配置build project 转载于:https://www.cnblogs.com/horizonli/p/8316528.html

Redis与Memcached区别解析

传统MySQL Memcached架构遇到的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我…

记录有关假设检验方面的学习。

什么是零假设(Null hypothesis)? 零假设是做统计检验时的一类假说,一般零假设的内容是希望能证明为错误的假设。比如,在相关性的检验中,一般会取”两者之间无关联“作为零假设,而在独立检验中&a…