运动想象 BCI IV-2a 数据集介绍

本文介绍了BCI竞赛数据集的详细信息,包括9名被试的数据分布、实验流程与记录方式。每名被试进行了两个session,每个session包含6个run,每个run含有48次试验。文章还提供了数据集的下载链接。

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

一、数据集介绍及下载链接
http://www.bbci.de/competition/iv/#download
二、数据格式
1、数据一共有9名被试,每个被试在不同天做了两个session,每个session有6个runs,每个runs有48个trials(12个左手,12个右手,12个双脚,12个舌头)。
2、在每个session开始,记录5分钟的基准信号。记录分划分为3块,第一块是两分钟的注视十字架记录;第二块是一分钟闭眼记录;第三块是一分钟的眼动记录。(A04TEOG只包含眼动)
3、实验范式:0-2s的十字架,2s之后是1.25s的左、右、下、上的箭头提示,分别对应想象的类为左手、右手、双脚、舌头。3-6s运动想象,6s十字架消失开始短暂休息。

请添加图片描述
请添加图片描述

4、实验的记录
1)一共有25个电极,其中有23个EEG通道,3个EOG通道。采用频率为250HZ,带通滤波0.5-100HZ。
2)文件存储格式为GDF。*T.gdf是训练文件,*E.gdf是测试文件。这里可以使用mne包的mne.io.read_raw_gdf()函数
3)官方使用Biosig读取数据,但是我在python版本的Biosig读取上出现了错误,因此建议使用.mat文件格式读取。

首先需要了解一下BCIIV2a数据集是什么,以及它的数据格式。BCIIV2a是一个用于脑机接口研究的数据集,包含9个受试者的EEG数据,每个受试者有5次实验,每次实验包含2个类别的运动想象任务(左手或右手运动想象)。数据集的格式为MATLAB格式,包含训练集和测试集。每个数据文件包含三部分:标志(stimulus),EEG数据和通道位置信息。标志用于标记每个时间点的事件类型,EEG数据包含每个时间点的脑电信号,通道位置信息包含每个通道的位置。 接下来,我们需要将ARMA用于图卷积神经网络的Python代码与BCIIV2a数据集结合起来。这个过程的具体步骤如下: 1. 首先,需要将BCIIV2a数据集导入Python中。可以使用Python中的scipy.io.loadmat函数来加载MATLAB格式的数据文件。具体代码如下: ```python import scipy.io as sio data = sio.loadmat('BCI_IV_2a_train.mat') ``` 2. 加载数据后,需要进行预处理。首先,需要将EEG数据和标志分别存储在两个变量中。其次,需要将EEG数据标准化,使每个通道的数据都具有相同的尺度。标准化可以使用scikit-learn库中的StandardScaler函数实现。最后,需要将EEG数据转换为图形格式,以便进行图卷积神经网络的训练。这个过程可以使用PyG库中的Data类实现。具体代码如下: ```python import numpy as np from sklearn.preprocessing import StandardScaler from torch_geometric.data import Data eeg_data = data['cnt'].transpose((2, 0, 1)) # (n_trials, n_channels, n_samples) labels = data['mrk_class'] # Standardize EEG data scaler = StandardScaler() eeg_data = scaler.fit_transform(eeg_data.reshape(-1, eeg_data.shape[-1])).reshape(eeg_data.shape) # Convert EEG data to graph format edge_index = np.array([[0, 1, 2, ...], [1, 2, 3, ...]]) # Define edge connections between channels x = eeg_data.reshape(-1, eeg_data.shape[-1]) # Flatten EEG data y = labels.squeeze() - 1 # Convert labels to 0-indexed integers data = Data(x=x, edge_index=edge_index, y=y) ``` 3. 数据预处理完成后,可以将图卷积神经网络的训练代码与数据集结合起来。具体代码如下: ```python import torch import torch.nn.functional as F from torch_geometric.nn import ARMAConv class Net(torch.nn.Module): def __init__(self, num_channels, num_classes): super(Net, self).__init__() self.conv1 = ARMAConv(num_channels, 32, 2) self.conv2 = ARMAConv(32, 64, 2) self.fc = torch.nn.Linear(64, num_classes) def forward(self, data): x, edge_index = data.x, data.edge_index x = F.relu(self.conv1(x, edge_index)) x = F.dropout(x, training=self.training) x = F.relu(self.conv2(x, edge_index)) x = F.dropout(x, training=self.training) x = self.fc(x) return F.log_softmax(x, dim=1) device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model = Net(num_channels=22, num_classes=2).to(device) optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4) def train(epoch): model.train() optimizer.zero_grad() out = model(data.to(device)) loss = F.nll_loss(out[data.train_mask], data.y[data.train_mask]) acc = (out.argmax(dim=1)[data.train_mask] == data.y[data.train_mask]).sum().item() / data.train_mask.sum().item() loss.backward() optimizer.step() return loss.item(), acc for epoch in range(1, 201): loss, acc = train(epoch) print(f'Epoch {epoch:03d}, Loss: {loss:.4f}, Train Acc: {acc:.4f}') ``` 这个代码将BCIIV2a数据集转换为图形格式,并使用ARMA卷积实现了简单的图卷积神经网络。在训练过程中,使用了Adam优化器和负对数似然损失函数。每个epoch的训练结果包括损失和训练准确率。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值