精品代码
EMAP情感预测挑战赛完整解决方案(Python实现)
IEEE CEC 2026 EMAP挑战赛开源方案,使用256通道EEG预测唤醒度/心率/GSR,1514行Python代码含特征工程/模型训练/推理,验证集唤醒度RMSE降低4.2%,包含训练好的模型可直接复现。
项目说明
【EMAP情感预测挑战赛完整解决方案】Python实现
项目简介
本项目是IEEE CEC 2026 EMAP Dataset Challenge的完整开源解决方案,使用256通道脑电图(EEG)频段功率特征预测情感状态(唤醒度arousal)和生理反应(心率heart rate、皮肤电GSR),并包含二分类唤醒度分类任务。
核心特性
- 完整竞赛框架:1514行Python代码,涵盖数据处理、特征工程、特征选择、模型训练、预测和报告生成
- 验证集性能:在29个未见参与者上,唤醒度RMSE降低4.2%,心率RMSE降低0.8%,均超越朴素基线
- 可复现性:固定随机种子(SEED=42),包含训练好的模型,可直接复现验证集结果
- 特征工程:256→349特征,包含区域功率、频段比率、额叶不对称、时序上下文和试次内标准化
- 特征选择:基于LightGBM的稳定性选择,每个目标保留64个最重要特征
- 鲁棒后处理:试次内时序平滑、收缩到均值安全网、共享刺激先验
- 训练好的模型:包含所有目标的训练模型,可直接推理
- 完整文档:英文+中文README,详细方法论和消融实验
验证集结果对比(29个未见参与者)
| 目标 | 指标 | 本方案 | 朴素基线 | 改进 |
|---|---|---|---|---|
| 唤醒度 | RMSE | 0.3091 | 0.3226 | -4.2% |
| 心率 | RMSE | 9.351 | 9.429 | -0.8% |
| GSR | RMSE | 1.02e-5 | 1.03e-5 | -0.9% |
| 唤醒度(二分类) | F1 | 0.626 | — | bonus |
所有目标均超越朴素基线,唤醒度改进幅度最大。
方法论核心
核心思想
跨被试预测的关键挑战是个体差异。朴素"预测均值"基线出乎意料地强,直接在原始EEG上训练会过拟合到训练被试。
三大支柱:
- 设计跨被试迁移的特征(试次内标准化、时序上下文)
- 利用共享刺激先验(所有人观看相同24个视频)
- 收缩到均值安全网(保证不输给朴素基线)
特征工程 (256 → 349)
- 区域功率(20维):按头皮区域聚合,对噪声鲁棒
- 频段比率(6维):Beta/Alpha等经典唤醒指数
- 额叶不对称(2维):左右半球Alpha/Beta不平衡
- 时序上下文:试次内9点滚动均值
- 试次内Z标准化:移除个体基线(关键!)
- 试次位置(t_norm):片段内系统趋势
模型与后处理
模型:LightGBM(唤醒度) / Ridge(心率、GSR)
后处理管道:
- 试次内时序平滑(窗口1-15)
- 共享刺激先验(从训练集学习片段平均轨迹)
- 收缩到均值(alpha混合,保证不输基线)
消融实验
| 阶段 | 唤醒度RMSE |
|---|---|
| 朴素基线 | 0.3226 |
| 原始EEG+LightGBM | 0.3249(更差) |
| +特征工程 | 0.3172 |
| +收缩安全网 | 0.3137 |
| +共享刺激先验(最终) | 0.3091 |
代码结构
11个模块 (1514行)
| 文件 | 功能 |
|---|---|
| prediction.py | 推理入口,加载模型预测 |
| src/config.py | 全局配置(目标、特征池、路径) |
| src/data.py | 数据加载、缓存、解析 |
| src/feature_engineering.py | 特征工程(区域、比率、时序、标准化) |
| src/feature_selection.py | 稳定性选择 |
| src/models.py | 模型训练、平滑、收缩 |
| src/stimulus_prior.py | 共享刺激先验 |
| src/train.py | 训练主流程 |
| src/evaluate.py | 评估指标(RMSE、MAE、R2、F1) |
| src/profile_data.py | 数据质量报告 |
| src/make_slides.py | 生成报告PPT |
依赖库
numpy, pandas, scikit-learn, scipy lightgbm, xgboost, matplotlib pyarrow, joblib, python-pptx
快速开始
环境要求
Python 3.8+ pip install -r requirements.txt
获取数据集
注意:EMAP数据集不在本仓库分发,需从官方渠道获取。
使用训练好的模型
python prediction.py --test_dir <Features_P*.csv文件夹> --out outputs/predictions
从头训练
python src/train.py python prediction.py --test_dir val/ --out outputs/predictions python src/make_slides.py
技术亮点
1. 跨被试泛化
挑战:每个人的EEG基线不同
解决:试次内Z标准化(移除个体基线)、频段比率(相对比率更一致)、区域聚合(减少噪声)
2. 时序结构
观察:情感状态缓慢变化
解决:时序上下文特征(滚动均值)、预测平滑(试次内平均)、试次位置(片段内趋势)
3. 共享刺激先验
洞察:所有人观看相同24个视频
实现:学习每个片段的平均轨迹,与个体预测混合
结果:唤醒度RMSE 0.3137 → 0.3091
4. 收缩到均值安全网
问题:弱信号目标可能不如基线
解决:final = alpha * prediction + (1-alpha) * train_mean
alpha通过OOF RMSE优化,保证不输给"预测均值"。
应用场景
- 情感计算:基于脑电的情绪识别系统
- 人机交互:自适应UI根据用户情感调整
- 心理健康:抑郁症、焦虑症客观评估
- 神经科学:情感神经生理机制研究
- 驾驶安全:疲劳和压力监测
包含内容
- 11个Python源文件(1514行代码)
- 训练好的模型(arousal、heartrate、gsr)
- 选定特征CSV(每个目标64特征)
- 预测时序图(3个目标)
- 消融实验报告和PPT
- 英文README + 中文README_CN
- 完整SOLUTION.md方法论文档
- requirements.txt依赖配置
- MIT许可证
适用人群
- 情感计算研究者
- 神经科学研究者
- 机器学习工程师
- CEC竞赛参与者
- 心理学研究者
- HCI研究者
许可说明
代码采用MIT许可证,允许商业使用、修改和分发、私用。要求保留版权声明和许可证文本。EMAP数据集归其作者所有,需单独授权。
提示:本项目适合需要情感识别、生理信号分析、跨被试建模、时序预测的研究者和工程师。提供完整竞赛级框架、训练好的模型和详细方法论文档,可直接复现或二次开发。