结合matlab代码案例解释ICA独立成分分析原理「建议收藏」

结合matlab代码案例解释ICA独立成分分析原理「建议收藏」目录介绍什么是ICA?对数据进行白化ICA算法ICA特性本分享为脑机学习者Rose整理发表于公众号:脑机接口社区(微信号:Brain_Computer).QQ交流群:941473018关于ICA,可以查看Rose小哥之前分享的《ICA独立成分分析去除EEG伪影》以及Scott等大神关于ICA的原理与应用的文献汇总《Scott等大神的33篇ICA独立成分分析论文汇总》。介绍独立分量分析是一…

大家好,又见面了,我是你们的朋友全栈君。

本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 QQ交流群:941473018
结合matlab代码案例解释ICA独立成分分析原理「建议收藏」

关于ICA,可以查看Rose小哥之前分享的《ICA独立成分分析去除EEG伪影》以及Scott等大神关于ICA的原理与应用的文献汇总《Scott等大神的33篇ICA独立成分分析论文汇总》。

介绍

独立分量分析是一种将多个传感器中的独立源线性混合分离的信号处理方法。例如,当在头皮上记录脑电图(EEG)时,ICA可以分离出嵌入在数据中的伪像(因为它们通常彼此独立)。

什么是ICA?

ICA是一种分离线性混合源的技术。例如,我们可以尝试混合然后分开两个源。

下面,我们定义两个独立源A(顶部)和B(底部)的时间过程(matlab代码在后文中有提供)
在这里插入图片描述
然后,我们将这两个源线性混合。顶部曲线等于A减去B的两倍,而底部线性组合为1.73 * A + 3.41 * B。
在这里插入图片描述
然后,将这两个信号输入ICA算法(在本例中为fastICA),该算法能够发现A和B的原始激活。
在这里插入图片描述
请注意,该算法无法恢复源活动的确切振幅(稍后可以看到原因)。建议尝试使用不同程度的噪音进行测试,看看它是相当稳健。值得注意的是,从理论上讲,ICA只能提取线性组合的源。

对数据进行白化

不过在使用ICA算法之前,需要说明一下大多数ICA算法在实际应用ICA之前需要执行的预处理。

许多ICA算法的第一步是白化数据。这意味着我们删除了数据中的所有相关性,即不同的通道(矩阵Q)必须保证不相关。

为什么这样做呢?一个几何解释是,它恢复数据的初始“形状”,然后ICA必须只旋转结果矩阵(见下文)。

下面,再次将两个随机的源A和B混合。在下图中,A的值是数据点的横坐标,B的值是它们的纵坐标。(见代码 ica_test2.m)
在这里插入图片描述
取A和B的两个线性混合物,并绘制这两个新变量
在这里插入图片描述
然后,如果我们把这两种线性混合物白化,就得到下面的图
在这里插入图片描述
两个轴上的方差现在是相等的,数据在两个轴上的投影的相关性是0(意味着协方差矩阵是对角的,所有对角线上的元素都是相等的)。然后应用ICA仅意味着将这个表示“旋转”回原始的A和B轴空间。

白化过程只是混合数据坐标的线性变化。一旦在这个“白化”的坐标系中找到ICA解决方案,我们就可以轻松地将ICA解决方案重新投影到原始的坐标系中。

ICA算法

直观地,您可以想象ICA将白化的矩阵旋转回原始(A,B)空间(上面的第一个散点图)。它通过最小化投影在两个轴(固定点ICA)上的数据的高斯性来实现旋转。例如,在上面的例子中,
在这里插入图片描述
在两个轴上的投影是类似于高斯的(即看起来像一个钟形曲线)。相比之下,投影在原A、B空间中远离高斯分布。
在这里插入图片描述
通过旋转轴并在第一个散点图最小化投影Gaussianity,ICA可以恢复统计上独立的原始源(这个属性来自于中心极限定理,该定理指出在满足某种条件时,独立随机变量的和趋于高斯分布,从而使得独立随机变量的和比任何一个原始随机变量都更接近于高斯分布)。在Matlab中,函数峰度(在EEGLAB工具箱中的kurt();在Matlab统计工具箱中的kurtosis())指示了分布的高斯性(但是定点ICA算法使用了一个稍微不同的度量,称为负熵)。

EEGLAB工具箱中的Infomax ICA (Infomax ICA)并没有那么直观,它涉及到最小化投影在两个轴上的数据的相互信息。当然,即使ICA算法在数值上有所不同,但在理论上都是等价的。

ICA处理n维数据
上面只处理了二维空间。但是ICA可以处理任意数量的维。让我们以128个脑电图电极为例。在每个时间点记录在所有电极上的信号构成一个128维空间中的数据点。在白化数据之后,ICA将“旋转128轴”,以最小化投影在所有轴上的高斯性(注意,与PCA不同,轴不必保持正交)。

我们所称的ICA分量是一个矩阵,它允许将初始空间中的数据投影到ICA找到的轴上。权重矩阵是原始空间的完整变换。

下面使用一个例子来说明:
S = W X S=WX S=WX
X是原始空间中的数据,S是源活动。
对于脑电图数据来说:
在这里插入图片描述
对于fMRI数据来说:
在这里插入图片描述
在脑电图中:伪影时间过程或大脑中一个紧凑域的时间过程
在这里插入图片描述
在fMRI中:伪影地形或统计上最大独立激活模式的地形图

W是从S空间到X空间的权重矩阵。

现在,W的行是向量,通过它,可以计算一个独立成分的活动。为了计算,公式S = W X中的分量活度,权重矩阵W定义为
在这里插入图片描述
例如,要计算第二个源或第二个独立分量的活动(以矩阵乘法格式),您可以简单地用行向量乘以矩阵X。
在这里插入图片描述
现在有了第二个分量的活动,但是活动是没有单位的。如果听说过逆建模,那么在偶极子定位软件中与EEG/ERP源的类比是最容易理解的。每个偶极子都有一个活动(线性地投射到所有电极上)。除非将其投射到电极上,否则大脑源的活动(偶极子)是无单位的。

现在我们将看到如何将一个分量重新投影到电极空间。
W − 1 W^{-1} W1是从源空间 S S S到数据空间 X X X的逆矩阵。
X = W − 1 S X=W^{-1}S X=W1S
在Matlab中,只需要输入inv(W)就可以得到一个矩阵的逆。
在这里插入图片描述
如果S是一个行向量(例如上面计算的分量2的活动),我们将它乘以上面逆矩阵中的列向量.
在这里插入图片描述
我们将得到分量2的投影活动(分量2的逆权值(列向量;左下)乘以组件2的活动(行向量;右上)引出分量投影(矩阵;右下角)。
在这里插入图片描述
现在,如果想要从数据中删除分量2(例如,如果分量2被证明是伪迹),在可以简单地从原始数据X中减去上面的矩阵(XC2)。

注意,在上面计算的矩阵(XC2)中,所有列都是成比例的,这意味着头皮活动只是按比例缩放。

因此,我们表示W-1矩阵的列,即各成分的头皮形貌。

这个矩阵的每一列都是一个分量的地形,它随时间由该分量的活度缩放。每个分量的头皮形貌可用于估计该组件的等效偶极子位置(假设该分量不是伪迹)。

综上所述,当我们讨论独立分量时,我们通常会提到两个概念
矩阵的行是分量活动的时间过程
矩阵的列是分量的头皮投影

ICA特性

从前面的介绍可以看出ICA的几个特性:

  • ICA只能分离线性混合的源。
  • 由于ICA处理的是点云,因此改变点的绘制顺序(EEG中的时间点顺序)对算法的结果几乎没有影响。
  • 改变通道顺序(例如在EEG中交换电极位置)也不会影响算法的结果。对于脑电信号来说,该算法对电极位置没有先验知识,ICA分量在大多数情况下可以被解析为一个等效偶极子,这证明了ICA能够分离出皮层同步化的致密区域。
  • 由于独立分量分析通过最大化源的非高斯性来分离源,所以完美的高斯源是不能被分离的。
  • 即使信息源不是独立的,独立分量分析也能找到一个最大独立空间。

请在关注公众号,在公众号后台留言”ICA code”获取包括FastICA、ica_test1.m、ica_test2.m等代码案例

参考文献
Jung T-P, Makeig S, Humphries C , Lee TW, McKeown MJ, Iragui V, and Sejnowski TJ, “Removing Electroencephalographic Artifacts by Blind Source Separation,” Psychophysiology, 37:163-78, 2000 (.pdf, 1.3Mb).
Jung T-P, Makeig S, Westerfield W, Townsend J, Courchesne E, and Sejnowski TJ, “Removal of eye activity artifacts from visual event-related potentials in normal and clinical subjects,”Clinical Neurophysiology 111:1745-58, 2000 (.pdf, 4.9Mb).

参考
结合matlab代码案例解释ICA独立成分分析原理

本文章由脑机学习者Rose笔记分享,QQ交流群:941473018
更多分享,请关注公众号
结合matlab代码案例解释ICA独立成分分析原理「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/145646.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 快速上手Linux玩转典型应用

    快速上手Linux玩转典型应用

  • 软件性能测试知识汇总[通俗易懂]

    软件性能测试知识汇总[通俗易懂]一软件性能概述1.软件性能的概念:软件性能是与软件功能相对应的一种非常重要的非功能特性,表明了软件系统对时间及时性及资源经济性的要求。2.不同角色对软件性能的理解(1)从系统用户角度看软件性

  • SQL查询左连接、右连接、内连接[通俗易懂]

    1、左连接的定义:是以左表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足的部分。左连接全称为左外连接,是外连接的一种。下边以A表和B表为例子,A、B之间的左连接条件为:ano=bno;查询语句为:SELECT*FROM`A`LEFTJOINB ONano=bno;eg1:A表中的只有1条记录,B表中2条记录…

  • traceroute详解[通俗易懂]

    traceroute详解[通俗易懂]traceroute详解1.traceroute基本概念traceroute(Windows系统下是tracert)命令利用ICMP协议定位您的计算机和目标计算机之间的所有路由器。TTL值可以反映数据包经过的路由器或网关的数量,通过操纵独立ICMP呼叫报文的TTL值和观察该报文被抛弃的返回信息,traceroute命令能够遍历到数据包传输路径上的所有路由器。traceroute是一条缓慢…

  • QtreeView 树形结构「建议收藏」

    QtreeView 树形结构「建议收藏」QtreeView是ui中最常用的控件,Qt中QTreeWidget比QTreeView更简单,但没有QTreeView那么灵活(QTreeWidget封装的和MFC的CTreeCtrl很类似,没有mvc的特点)。1.QStandardItemModel在QTreeView中的使用使用QTreeView的对应模型是QStandardItemModel,这个是Qt对应ui界面最有用的模型,…

  • c语言findwindow函数_findwindow函数

    c语言findwindow函数_findwindow函数转自:http://blog.csdn.net/coolszy/article/details/5523486[DllImport(“User32.dll”,EntryPoint=”FindWindow”)]句柄,是整个Windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类中的不同的指针,程序不能利用句柄来…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号