前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nilearn教程系列(4)-fMRI解码入门教程(一)

Nilearn教程系列(4)-fMRI解码入门教程(一)

作者头像
脑机接口社区
发布2022-08-18 11:30:41
6460
发布2022-08-18 11:30:41
举报
文章被收录于专栏:脑机接口

这是使用Nilearn解码的教程,它以Haxby 2001研究中猫辨别任务的数据为基础。

fMRI解码入门教程

功能性磁共振成像(FMRI,functional magnetic resonance imaging)是一种新兴的神经影像学方式,其原理是利用磁振造影来测量神经元活动所引发之血液动力的改变。由于fMRI的非侵入性、没有辐射暴露问题与其较为广泛的应用,从1990年代开始就在脑部功能定位领域占有一席之地。目前主要是运用在研究人及动物的脑或脊髓。

主要内容包括:

1.从Haxby研究中检索并加载fMRI数据

2.利用SVM解码

3.使用交叉验证测量预测分数

4.检查模型权重

1

下载数据

代码语言:javascript
复制
from nilearn import datasets
import warnings
warnings.filterwarnings("ignore")
"""
调用fetch_haxby()下载Haxby研究数据集,
如果数据集已经存在本地了,就直接加载本地的,
否则会从网上下载
"""
haxby_dataset = datasets.fetch_haxby()
#由于数据集有很多组,我们只是用其中一组
fmri_filename = haxby_dataset.func[0]
# 打印数据集的基本信息
print('First subject functional nifti images (4D) are at: %s' %
      fmri_filename)  # 4D data

2

将fMRI数据转换为数据矩阵

代码语言:javascript
复制
"""
以受检者的解剖图像为背景对其进行可视化
"""
mask_filename = haxby_dataset.mask_vt[0]
from nilearn import plotting
plotting.plot_roi(mask_filename, bg_img=haxby_dataset.anat[0],
                 cmap='Paired')
代码语言:javascript
复制
"""
利用 nilearn.input_data.NiftiMasker来提取mask上的fMRI数据,
并将其转换为数据序列
"""
from nilearn.input_data import NiftiMasker
masker = NiftiMasker(mask_img=mask_filename, standardize=True)

# 根据 filename检索二维数据
fmri_masked = masker.fit_transform(fmri_filename)

# 打印frmi_masked
print(fmri_masked)
代码语言:javascript
复制
# 查看其形状
print(fmri_masked.shape)

(1452, 464)

3

加载行为标签

行为标签存储在csv文件中,用空格分隔,这里用pandas将其排列成一个数组

代码语言:javascript
复制
import pandas as pd
# 加载行为信息
behavioral = pd.read_csv(haxby_dataset.session_target[0], sep=" ")
print(behavioral
代码语言:javascript
复制
conditions = behavioral['labels']
print(conditions

4

只对猫和面孔脸部进行分析

根据上面的labels可以看出,有多种条件,本次实验只需猫和脸部的数据

代码语言:javascript
复制
"""
只需要face和cat数据
"""
condition_mask = conditions.isin(['face', 'cat'])

fmri_masked = fmri_masked[condition_mask]
# 打印其形状
print(fmri_masked.shape)

(216, 464)

代码语言:javascript
复制
conditions = conditions[condition_mask]
print(conditions.shape
代码语言:javascript
复制
(216,)

5

利用SVM进行解码

我们使用scikit-learn机器学习工具对fmri_masked数据进行分析。

这里使用线性核的支持向量机分类器。

代码语言:javascript
复制
"""
创建线性核的SVM
"""
from sklearn.svm import SVC
svc = SVC(kernel='linear')
print(svc
代码语言:javascript
复制
"""
训练数据
训练集:fmri_masked
标签为:conditions
"""
svc.fit(fmri_masked, conditions)
代码语言:javascript
复制
"""
预测数据
对fmri_masked数据进行预测,
得到其对应的标签
"""
prediction = svc.predict(fmri_masked)
print(prediction)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 脑机接口社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • fMRI解码入门教程
    • 5
    相关产品与服务
    TI-ONE 训练平台
    TI-ONE 训练平台(以下简称TI-ONE)是为 AI 工程师打造的一站式机器学习平台,为用户提供从数据接入、模型训练、模型管理到模型服务的全流程开发支持。TI-ONE 支持多种训练方式和算法框架,满足不同 AI 应用场景的需求。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档