Amigos数据集新手入门指南:从数据加载到模型训练的全流程解析

1次阅读
没有评论

共计 1770 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

Amigos 数据集概述

Amigos 是一个公开的多模态情感识别数据集,包含 EEG 信号、外周生理信号和面部视频数据。该数据集通过观看视频片段诱发情感状态,记录了 32 名被试的生理响应。主要特点包括:

Amigos 数据集新手入门指南:从数据加载到模型训练的全流程解析

  • 数据组成
  • 14 通道 EEG(采样率 128Hz)
  • 4 种基础情感标签(valence, arousal, dominance, liking)
  • 每个被试约 40 分钟数据

  • 典型应用

  • 情感状态分类
  • 生理信号跨被试分析
  • 多模态融合实验

常见痛点与解决方案

1. 数据格式处理

原始.edf 文件需要特殊工具读取,建议使用 MNE-Python 库:

import mne

def load_edf(file_path):
    """加载 EDF 文件并转换为 MNE 对象"""
    try:
        raw = mne.io.read_raw_edf(file_path, preload=True)
        return raw
    except FileNotFoundError:
        print(f"文件 {file_path} 未找到")
        return None

2. 预处理流程

标准 EEG 预处理包含以下关键步骤:

  1. 频带滤波(0.5-45Hz)
  2. 降采样至 64Hz
  3. 伪迹去除(ICA 或回归方法)
from mne.preprocessing import ICA

def preprocess(raw: mne.io.Raw) -> mne.io.Raw:
    """执行基础预处理"""
    # 带通滤波
    raw.filter(0.5, 45., fir_design='firwin')

    # 降采样
    raw.resample(64)

    # ICA 去眼电
    ica = ICA(n_components=15, random_state=97)
    ica.fit(raw)
    ica.exclude = [0, 1]  # 通常前两个成分是眼电
    return ica.apply(raw)

特征提取实战

功率谱密度 (PSD) 特征

import numpy as np

def extract_psd(raw: mne.io.Raw, epoch_len: float = 2.) -> np.ndarray:
    """提取频域特征"""
    # 分段处理
    epochs = mne.make_fixed_length_epochs(raw, duration=epoch_len)

    # 计算 PSD
    psds, freqs = mne.time_frequency.psd_array_multitaper(epochs.get_data(), 
        sfreq=raw.info['sfreq'],
        fmin=4, 
        fmax=45
    )
    return psds.mean(axis=0)  # 各频段平均功率

差分熵 (DE) 特征

def differential_entropy(data: np.ndarray) -> np.ndarray:
    """计算差分熵特征"""
    var = np.var(data, axis=-1)
    return 0.5 * np.log(2 * np.pi * np.e * var)

模型训练示例

使用提取的特征训练简单分类器:

from sklearn.svm import SVC
from sklearn.model_selection import train_test_split

# 假设已提取特征 X 和标签 y
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

clf = SVC(kernel='rbf', class_weight='balanced')
clf.fit(X_train, y_train)
print(f"测试集准确率: {clf.score(X_test, y_test):.2f}")

避坑指南

内存优化技巧

  • 使用 preload=False 延迟加载数据
  • 分块处理大文件
  • 使用 HDF5 格式存储中间结果

标签对齐问题

  • 检查采样率是否匹配
  • 使用 mne.annotations 处理事件标记
  • 验证时间戳一致性

延伸思考

  1. 如何设计跨被试的验证策略?留一被试法是否总是最优解?
  2. 当 EEG 信号与问卷标签出现矛盾时,应该相信哪类数据?
  3. 在多模态融合中,EEG 特征应该早期融合还是晚期融合?

建议尝试方向:

  • 结合时域特征(如 Hjorth 参数)
  • 测试不同频带划分对分类的影响
  • 探索注意力机制在跨被试建模中的应用

通过本指南,希望帮助新人快速掌握 Amigos 数据集的核心处理流程。实际应用中建议从小样本开始验证流程,再扩展到全数据集。

正文完
 0
评论(没有评论)