Python 中MNE库去伪迹(ICA)案例的逐句解析

本文详细介绍了如何使用MNE-Python库进行独立成分分析(ICA)来去除EEG/MEG数据中的眼动和心跳伪迹。首先,通过可视化原始数据中的伪迹,然后使用ICA进行预处理,包括高通滤波。接着,演示了如何设置和拟合ICA,以及如何选择和排除捕获伪迹的ICA组件。此外,还探讨了使用EOG和ECG通道选择ICA组件,以及通过模板匹配来识别相似伪迹模式的方法。最后,讨论了使用corrmap函数进行跨被试的模板匹配以选择相应的IC。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文是在阅读博主zhoudapeng01的文章Python 中MNE库去伪迹(ICA)_zhoudapeng01的博客-CSDN博客_ica mne后做的一个翻译工作。

主要介绍的还是ICA,需要了解的前置知识为MNE库和PCA(实际上知道概念就行)

# -*- coding: utf-8 -*-
"""
.. _tut-artifact-ica:
利用ICA去除伪迹
============================
本教程涵盖了独立分量分析 (ICA) 的基础知识,并展示了如何使用 ICA 进行去除伪迹;
一个扩展示例说明了眼部和心跳伪影的修复。 有关 ICA 的概念背景,请参阅 scikit-learn 教程。
.. contents:: Page contents
   :local:
   :depth: 2
我们一如既往地导入必要的 Python 模块并加载一些“示例数据 <sample-dataset>”。
由于 ICA 的计算量很大,我们还将数据裁剪为 60 秒;
为了避免重复导入 mne.preprocessing ,我们将直接从该子模块导入一些函数和类:
"""

import os
import mne
from mne.preprocessing import (ICA, create_eog_epochs, create_ecg_epochs,
                               corrmap)
# 获取data数据的文件夹名
sample_data_folder = mne.datasets.sample.data_path()
sample_data_raw_file = os.path.join(sample_data_folder, 'MEG', 'sample',
                                    'sample_audvis_raw.fif')
# 创建raw对象
raw = mne.io.read_raw_fif(sample_data_raw_file)
# 数据裁剪为60s
raw.crop(tmax=60.)

###############################################################################
# .. note::
#     在应用 ICA(或其他任何去除伪迹策略)之前,请务必观察数据中的伪迹,以确保选择正确的去除工具。
#     有时,正确的方法就是不用这些工具——如果伪迹足够小,您甚至可能不需要修复它们以获得良好的分析结果
#     因为此时已经可以直接在源数据上获得良好的分析结果了
#     有关检测和可视化各种类型的伪迹的指南,请参阅 :ref:`tut-artifact-overview`。
#
# 什么是ICA ?
# ^^^^^^^^^^^^
#
# 独立分量(或者叫成分)分析 (ICA) 是一种从一组记录中估计独立源信号的技术,其中源信号以未知的比率混合在一起。
# 一个常见的例子是“盲源分离”的问题:
# 3 个乐器在同一个房间里演奏,3 个麦克风记录表演(每个麦克风拾取所有 3 个乐器,但电平不同)
# 你能以某种方式“解混”由 3 个麦克风记录的信号,
# 以便最终得到一个单独的“录音”,录音中每个乐器的声音被分隔起来
#
# 不难看出这种类比如何适用于 EEG/MEG 分析:
# 有许多“麦克风”(传感器通道)同时记录许多“乐器”(眨眼、心跳、大脑不同区域的活动、咬紧下巴的肌肉活动) 或吞咽等)。
# 只要这些各种源信号在统计上是独立且非高斯分布的,通常可以使用 ICA 分离源,然后在排除不需要的源后重新构建传感器信号。
#
#
# ICA in MNE-Python
# ~~~~~~~~~~~~~~~~~
#
# .. sidebar:: ICA and 降维
#
#     如果你想执行 ICA 时 *不要* 降维(除了 n_components 中给出的独立成分(IC)的数量,以及你在
#     ICA.exclude 中指定的任何后续排除 IC),
#     通过设置``max_pca_components=None`` 和 ``n_pca_components=None``(这些是默认值)来实现。
#
#     但是,如果您 *要* 降低维度,请考虑以下示例:
#     如果您有 300 个传感器通道并且设置了“max_pca_components=200”、“n_components=50”和
#     “n_pca_components=None”,
#     那么 PCA 步骤产生 200 个 PC,前 50 个 PC 被发送到 ICA 算法(产生 50 个 IC),
#     在重建期间:方法:`~mne.preprocessing.ICA.apply` 将使用 50 个 IC 加上编号为 51-200 的 PC
#     (完整的 PCA 残差)。
#     如果改为指定 ``n_pca_components=120``,则 :方法:`~mne.preprocessing.ICA.apply`
#     将使用 50 个 IC 加上 PCA 残差中的前 70 个 PC(编号 51-120)进行重构。
#
#     **如果您以前一直在使用 EEGLAB** 的 ``runica()`` 并且正在寻找其
#     ``'pca', n`` 选项的等效项以在 ICA 步骤之前通过 PCA 降低维度,
#     请设置 ` `max_pca_components=n`,同时将 ``n_components`` 和 ``n_pca_components``
#     保留为默认值(即 ``None``)。
#
# MNE-Python 实现了三种不同的 ICA 算法:“fastica”(默认)、“picard”和“infomax”。
# FastICA 和 Infomax 都得到了相当广泛的使用;
# Picard 是一种较新的(2017 年)算法,预计收敛速度比 FastICA 和 Infomax 更快,
# 并且在源不完全独立的情况下比其他算法更稳健,这通常发生在真实的 EEG/MEG 数据中。
# 有关详细信息,请参阅 [1]_。
#
# MNE-Python中的ICA接口类似于
# `scikit-learn`_: 一些通用参数在创建如下类时被指定
# :class:`~mne.preprocessing.ICA` object, 然后
# :class:`~mne.preprocessing.ICA` object 使用其自身的如下方法来拟合数据
# :meth:`~mne.preprocessing.ICA.fit` method. 拟合的结果被添加到如下
# :class:`~mne.preprocessing.ICA` object 作为属性, 使用一个下划线作为结尾 (``_``),
# 比如 ``ica.mixing_matrix_`` 和``ica.unmixing_matrix_``.
# 拟合后,你想要移除的ICA component(s)必须被选中, 然后ICA拟合必须被应用到如下
# :class:`~mne.io.Raw` or :class:`~mne.Epochs` object 通过使用
# :class:`~mne.preprocessing.ICA` object的 :方法:`~mne.preprocessing.ICA.apply`
# 方法。
#
# 正如通常使用 ICA 所做的那样,在执行 ICA 分解之前,首先将数据缩放到单位方差并使用主成分分析 (PCA) 进行白化。
# 您可以在这一步通过指定“max_pca_components”来强制进行可选的降维。
# 从保留的主成分 (PC) 中,第一个“n_components”然后被传递给 ICA 算法
# (“n_components”可能是要使用的整数个成分,或者使用的成分应该捕获的解释方差的一部分 )。
#
# 在可视化独立组件 (IC) 并排除任何要修复的捕获伪迹后,可以使用
# ~mne.preprocessing.ICA 对象的:meth:`~mne.preprocessing.ICA.apply` 方法重建传感器信号。
# 默认情况下,信号重建使用所有 IC(减去 ``ICA.exclude`` 中列出的任何 IC)
# 加上所有未包含在 ICA 分
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值