脑电模型实战系列(三):DEAP 数据集处理与 Russell 环状模型实战(一)

🌟 引言:当深度学习遇见"大脑电流"

在人工智能的众多分支中,情感计算(Affective Computing) 始终是最具挑战性的领域之一。不同于通过面部表情或语音来识别情绪(这些行为可以被人类刻意伪装),脑电信号(EEG) 直接来源于中枢神经系统,被认为是捕捉人类真实情感的"黄金标准"。

本系列博客将带你走进 脑机接口(BCI) 的世界。我们将基于经典的 DEAP 数据集 ,从零开始构建一个能够"读懂人心"的情绪分类器。作为系列的第一篇,我们将完成最基础但也最关键的任务:理解脑电频率理论、解析 DEAP 数据架构、搭建开发环境,并绘制出属于你的第一行脑波图。


1. 脑电理论:解码大脑的"五重奏"

脑电信号(EEG)本质上是大脑皮层神经元群同步放电产生的电位总和。在情绪识别中,我们并不直接分析杂乱的波形,而是将其拆解为五个核心频带:

频带名称 频率范围 (Hz) 生理状态与情感关联
Delta ( \\delta) 0.5 - 4 深度睡眠状态。在清醒情绪识别中通常被视为伪影噪声。
Theta (\\theta) 4 - 8 深度冥想、创造力。关联挫败感、失望或注意力分散。
Alpha (\\alpha) 8 - 13 放松、闭目养神。左侧额叶 Alpha 波减弱通常意味着积极情绪。
Beta (\\beta) 13 - 30 逻辑思考、高度警觉。关联焦虑、压力、兴奋
Gamma (\\gamma) > 30 高级认知、多感官整合。关联极端情绪爆发或心流状态。

2. DEAP 数据集深度拆解:情绪研究的"ImageNet"

DEAP (Database for Emotion Analysis using Physiological signals) 是全球研究者公认的标准库。

2.1 数据采集协议

  • 被试者:32名健康成年人。

  • 刺激物:40段经过预选的音乐视频(Music Video),每段 60 秒。

  • 多模态:除了 32 通道的 EEG,还记录了皮肤电导(GSR)、心电(ECG)、呼吸等外围生理信号。

2.2 数据格式 (The .dat Structure)

当你下载 DEAP 预处理版后,你会得到 32 个 .dat 文件(s01.dat - s32.dat)。每个文件是一个 Python 字典,结构如下:

  • data : 形状为 (40, 40, 8064)

    • 40:试验次数 (Videos)

    • 40:通道数(前 32 个是 EEG,后 8 个是外围信号)

    • 8064:采样点(63秒 \\times 128Hz 采样率)

  • labels : 形状为 (40, 4)

    • 四个维度分别是:Valence (效价) , Arousal (唤醒度), Dominance, Liking。

3. 数学模型:Russell 的情绪坐标系

我们如何定义"快乐"或"愤怒"?本项目采用 Russell 环状模型(Circumplex Model)

3.1 坐标定义

情绪被映射到一个二维直角坐标系中:

  1. Valence (效价):描述情绪的"正负"。

    • V \> 5:愉快、积极。

    • V \< 5:痛苦、消极。

  2. Arousal (唤醒度):描述情绪的"强弱"。

    • A \> 5:兴奋、紧张、激活。

    • A \< 5:平静、疲惫、去激活。

3.2 离散化映射

在后续的 KNN 分类中,我们会将坐标划分为四个象限:

  • HVHA (高唤醒高效价):快乐 (Happy) / 兴奋 (Excited)

  • LVHA (高唤醒低效价):愤怒 (Angry) / 紧张 (Nervous)

  • LVLA (低唤醒低效价):悲伤 (Sad) / 忧郁 (Depressed)

  • HVLA (低唤醒高效价):放松 (Relaxed) / 平静 (Calm)


4. 环境搭建与依赖配置

在开始编码前,请确保你的 Python 环境已经安装了以下核心库:

Bash

复制代码
# 核心计算与处理库
pip install numpy scipy pandas pickle-mixin

# 绘图与可视化
pip install matplotlib seaborn opencv-python

# 脑电专业库 (强烈建议安装)
pip install mne

5. 实战代码:读取数据并可视化脑电波

下面这段代码演示了如何解析 DEAP 的原始文件,并提取第 1 个被试(s01)观看第 1 个视频时的 Fp1(前额极) 通道信号。

Python

复制代码
import pickle
import numpy as np
import matplotlib.pyplot as plt

def load_deap_file(file_path):
    """
    读取DEAP数据文件
    """
    with open(file_path, 'rb') as f:
        # Python 3 必须指定 encoding='latin1'
        data_dict = pickle.load(f, encoding='latin1')
    return data_dict['data'], data_dict['labels']

# 1. 加载第一个受试者数据
file_path = 's01.dat'  # 请确保文件在当前目录下
data, labels = load_deap_file(file_path)

# 2. 提取数据
# 形状: (40试验, 40通道, 8064采样点)
# 我们取: 第1个视频, 第1个通道(Fp1), 全部时间点
trial_idx = 0
channel_idx = 0
signal = data[trial_idx, channel_idx, :]
label = labels[trial_idx]

# 3. 绘制波形图
fs = 128  # 采样率
time = np.arange(len(signal)) / fs

plt.figure(figsize=(15, 5))
plt.plot(time, signal, color='#1f77b4', lw=0.8)
plt.title(f'Subject 01 - Trial {trial_idx+1} - Channel Fp1\n'
          f'Valence: {label[0]:.2f}, Arousal: {label[1]:.2f}')
plt.xlabel('Time (seconds)')
plt.ylabel('Amplitude ($\mu$V)')
plt.grid(alpha=0.3)
plt.show()

print(f"该试验的情绪标签: Valence={label[0]}, Arousal={label[1]}")

💡 核心逻辑解析:

  • 前 3 秒去基线:你会发现信号的前 384 个点(3秒 \\times 128Hz)波形可能比较特殊,那是基线测量期。在后续特征提取中,我们通常需要将其减去。

  • 单位:DEAP 数据通常已经过微伏(\\muV)单位缩放和 0.4-45Hz 的带通滤波,可以直接进行频域分析。


6. 深度前瞻:为什么选择 KNN 分类?

在本项目的后续环节,我们将面临特征工程。原始数据维度太高(8064点),直接分类会遭遇"维度灾难"。

我们将采用以下策略:

  1. FFT 转换:将 1D 时域信号转为频域。

  2. 特征压缩:计算 5 个频带的标准差(Standard Deviation),将 8064 个点降维成 5 个核心特征。

  3. KNN 分类器

    • Canberra 距离:相较于欧氏距离,它对特征值之间的比例变化更敏感,非常适合处理 EEG 这种个体差异巨大的数据。

    • 参数 K 的选择:我们将通过实验证明,当 K=3 时,模型在 DEAP 数据集上的表现最为稳健。


7. 结语与下一步

本篇文章我们完成了脑电情绪识别的"理论筑基"。你已经了解了大脑如何通过电磁波表达情感,并亲手绘制出了大脑的原始信号。

下一篇预告:

我们将深入探讨 《脑电信号预处理:FFT 频域转换与特征提取实战》。届时,我们将把这些杂乱的波形转化为 160 维的特征向量,真正开始机器学习的训练。

动手挑战:

尝试修改代码,循环打印出 40 个视频的标签,看看受试者 s01 观看哪一个视频时 Valence(效价)最高?欢迎在评论区贴出你的发现!


关注专栏,第一时间获取代码更新!

数据集下载地址:machalKing/neuro-data-learn-main

相关推荐
CoovallyAIHub3 小时前
从“模仿”到“进化”!华科&小米开源MindDrive:在线强化学习重塑「语言-动作」闭环驾驶
深度学习·算法·计算机视觉
OpenBayes3 小时前
Open-AutoGLM 实现手机端自主操作;PhysDrive 数据集采集真实驾驶生理信号
人工智能·深度学习·机器学习·数据集·文档转换·图片生成·蛋白质设计
CoovallyAIHub4 小时前
SAM 真的开始「分割一切」,从图像到声音,Meta 开源 SAM Audio
深度学习·算法·计算机视觉
五月底_4 小时前
GRPO参数详解
人工智能·深度学习·nlp·rl·grpo
hopsky4 小时前
经典Transformer的PyTorch实现
pytorch·深度学习·transformer
会挠头但不秃5 小时前
深度学习(5)循环神经网络
人工智能·rnn·深度学习
哥布林学者5 小时前
吴恩达深度学习课程四:计算机视觉 第二周:经典网络结构 课后习题和代码实践
深度学习·ai
Lun3866buzha7 小时前
【深度学习】【目标检测】改进YOLOv11香烟包装识别与分类_CSP-PTB优化
深度学习·yolo·目标检测