关注微信公众号:脑机接口研习社
了解脑机接口最近进展
系列文章目录
Python专栏 | 脑电图和脑磁图(EEG/MEG)的数据分析方法之载入数据
Python专栏 | MNE脑电数据(EEG/MEG)可视化
预处理(Preprocessing)
MNE-Python支持多种预处理的方法和技术,如麦克斯韦滤波,信号空间投影,独立成分分析,滤波,降噪采样等(maxwell filtering, signal-space projection, independent components analysis, filtering, downsampling, etc)。
下文将详细介绍通过执行**独立成分分析(ICA)**清理数据。
首先,简单介绍一下ICA。
ICA :Independent component analysis,独立成分分析
PCA(主成分分析)和ICA(独立成分分析)都是统计理论当中的概念,在机器学习当中应用很广,比如图像,语音,通信的分析处理。
两者常用于机器学习中提取特征后的降维操作。
ICA最早是从神经网络领域开始研究的,应用于信号分离、特征提取。为了简单,比较经典的一个ICA应用情境的例子是**“鸡尾酒宴会问题(cocktail party problem)”**。
假设在一个开party的房间里有两个人同时说话,房间里在两个不同的位置上各放一个麦克风,麦克风记录下两段声音(时间信号):x1(t)和x2(t),
这两段声音都记录了两个人说的话,那么我们怎样将两段声音分离,纯粹得到两个人分别说了什么话呢?
记源信号是s1(t)和s2(t),这个问题可以用以下等式描述:
四个参数aij,和说话者(x1和x2),与麦克风(s1和s2)的距离有关。
示意图如下:
接收到的信号x1,x2是:
而需要我们去还原的信号是s1,s2:
研究表明,如果s1,s2是统计独立的随机信号,那么就可以用x1,x2去还原。
信号可分为确定性信号和随机信号。若信号被表示为一确定的时间函数,对于指定的某一时刻,可确定一相应的函数值,这种信号称为确定性信号或规则信号。对于随机信号,不能给出确切的时间函数,只可能知道它的统计特性,如在某时刻取某一数值的概率。
ICA正是利用统计上的独立性从混合信号中分解出源信号的。
类比到EEG / MEG的数据分析问题:
EEG和MEG设备有许多“传感器通道(Sensor channels)”,相当于“麦克风”,传感器通道可以同时记录许多“活动”产生的信号,如眨眼、心跳、大脑不同区域的活动、吞咽等活动,只要这些源信号在统计上是独立且非高斯的,就可以使用ICA分离这些源,接着在排除不需要的源之后还可以重塑(reconstruct)信号。
ICA和PCA的差异:
- PCA是一种数据降维的方法,但是只对符合高斯分布的样本点比较有效,而ICA的模型假设之一是信号源si服从非高斯分布。ICA相比与PCA更能刻画变量的随机统计特性,且能抑制高斯噪声。
- PCA主要用于数据的降维,将原本相关的数据映射到一个新的空间中,在这个空间中,数据的各个维度是不相关的。ICA是一种找到数据可能存在的各组成分量的方法,主要应用于信号解混,特征提取。
ICA的处理过程:
使用ICA时往往对数据存在几点假设:源信号独立,且服从非高斯分布,甚至要假设源信号的概率分布和个数。
首先要对对输入数据进行中心化(scaled to unit variance)和白化处理(whitening)。
白化:一般情况下,所获得的数据都具有相关性,所以通常都要求对数据进行初步的白化或球化处理,因为白化处理可去除各观测信号之间的相关性,从而简化了后续独立分量的提取过程,而且,通常情况下,数据进行白化处理与不对数据进行白化处理相比,算法的收敛性较好。
对于白化的作用的描述主要有两个方面:1,减少特征之间的相关性;2,特征具有相同的方差(协方差阵为1)
如上图所示,白化分为两个过程:
为了处理具有不同单位的不同通道类型(例如,EEG以伏特为单位(V),MEG以特斯拉(T)为单位),数据必须进行白化预处理(pre-whitening)。
如果noise_cov = None(默认),则给定通道类型的所有数据均按所有通道上的标准差按比例缩放。如果noise_cov等于协方差,则使用协方差对通道进行白化预处理。
然后,再使用PCA对白化预处理后的数据进行分解。由此可见,PCA是ICA预处理的一部分。
用PCA对观测信号进行白化的预处理使得原来所求的解混合矩阵退化成一个正交阵,减少了ICA的工作量。此外,PCA本身具有降维功能,当观测信号的个数大于源信号个数时,经过白化可以自动将观测信号数目降到与源信号维数相同。
如果n_components是整数,则从生成的主成分(principal components,PC)中将n_components直接传递给ICA算法。
n_components也可能是0到1之间的浮点数,这时,n_components详细阐述了PC捕获的可解释方差的分数;同时,适当数量的PC(即与解释总方差的给定分数所需的PC数量一样)也可传递给ICA。
将独立分量(Independent Components,IC)可视化并排除任何要修复的**干扰信号(artifacts)**后,即可使用ICA.apply()方法重塑传感器捕捉的信号。
关于干扰信号的修复方法详见:
https://mne.tools/stable/auto_tutorials/preprocessing/plot_10_preprocessing_overview.html#heartbeat-artifacts-ecg
如上图所示,默认情况下,信号重塑会使用所有减去ICA.exclude的Retained ICs(Retained ICs=n_components-len(ICA.exclude)),再加上未包含在ICA分解中的所有PC,即“PCA残差”(PCA residual=n_pca_components-n_components)。
Reconstructed sensor data=Retained ICs+PCA residual
如果要减少在重塑阶段使用的分量数量(components),可以通过改变n_pca_components参数的大小来实现,但这样反过来会降低数据的排列;默认情况下,n_pca_components = None不会导致额外的维数减少。
下期将讲解关于ICA过程的代码示例。
参考链接
https://mne.tools/stable/auto_tutorials/intro/plot_10_overview.html#preprocessing
https://blog.csdn.net/u014485485/article/details/78452820
https://blog.csdn.net/yffhhffv/article/details/86710898
https://mne.tools/stable/auto_tutorials/preprocessing/plot_40_artifact_correction_ica.html#tut-artifact-ica