🧠 BCI 基于 EEG 的情绪分析实战
用 Python + 脑电数据 + 深度学习完成一次实际的 BCI 情绪分析项目,实现了从信号处理,到分类评估,再到模型可视化和压缩的全链路分析,并写成一篇可扩展的论文或博客文章。
一、项目背景
脑机接口 (Brain-Computer Interface, BCI) 把人的脑电信号转换成可识别的组织信息,应用于辅助分类情绪、施行控制、识别运动意图等场景。
本项目使用 EEG Eye State 数据集 (简化名 emotions.csv),完成了一套 BCI 情绪分析实验。
二、数据结构介绍
格式:CSV
行数:约 1000 条 EEG 记录
列:
mean_系列:14 个 EEG 速度基本统计特征fft_系列:高维 FFT 频域特征label:POSITIVE, NEUTRAL, NEGATIVE
三、分析步骤
【阶段1】多通道平均值分析
- 分别计算不同情绪下每个 EEG 通道的 mean 值
- 展示最易变化的通道
目标:找出哪些通道在“睁眼”和“闭眼”状态下差异显著。
产出:通道均值变化图、多通道热力图
下图展示了三种情绪的脑电均值分布:
热力图也帮助我们观察到整体趋势:
✅ 图像解读 & 数据含义
📈 折线图(emotion_mean_comparison.png)观察:
**NEUTRAL(橙)**始终维持在最高的平均电压水平,说明中性情绪时脑电活动较稳定。
**NEGATIVE(蓝)**在多个通道呈现出明显的“断崖式”下降,存在大量 极低电压点(<-250),可能为高度压抑或某种伪迹(需进一步频域检验)。
**POSITIVE(绿)**相对平稳,波动小于负面情绪,说明积极情绪下脑区活跃,但没有强烈起伏。
👉 这些异常负值可能代表情绪压抑时的大脑某些区域处于低电位状态,尤其集中在左右两个对称区域(如0–20、60–80通道段)。
【阶段2】 FFT 频域分析
目标:提取 Alpha / Beta 等频段功率,看看闭眼时是否存在 Alpha 波增强现象。
产出:频谱图、频段能量条形图、频段差异分析结论。
- 通过
fft_列接入片段频域 - 对每种情绪下的频段进行力度分析
- 探索 Alpha 和 Beta 波的特征区别

【阶段3】 使用 Random Forest 进行分类
目标:提取 EEG 特征,用分类器预测眼睛状态(0/1)
产出:训练准确率、混淆矩阵、ROC 曲线图、特征工程过程
- 特征:mean + fft (~2000维)
- 模型:Random Forest
- 结果:准确率 ~92%
- 输出特征重要性排名
emotion_confusion_matrix.png

【阶段4】 CNN 深度学习识别
目标:构建 1D CNN / LSTM 模型进行时序分类
产出:模型架构图、训练过程图、性能对比、博客实录
- 输入:[batch, 1, feature_dim]
- 结果:96.25% accuracy
- 输出 Loss 曲线 & Confusion Matrix

【阶段5】 特征压缩
目标:找到对预测最关键的通道组合,做特征冗余分析
产出:特征重要性图、通道组合实验报告
- 基于 RF 特征重要性
- 保留 Top 100 特征
- CNN 在 100 特征下保持了 90.4% accuracy



【阶段6】 GradCAM 观察
- 对 CNN 分类结果进行 GradCAM 反向口解
- 展示 CNN 最关注的 EEG 特征区域
四、结论
- 从信号到分类,用一个小型 EEG 数据进行了完整的实战验证
- 使用 RF 和 CNN 分别作为基线和强化模型
- GradCAM 和特征重要性结合用于压缩和可观化
五、未来推荐方向
- 探索正常流 EEG 数据的时序型 LSTM/Transformer
- 构建 Streamlit 或 Web App 操作系统
- 用 GradCAM 进行情绪模型的观察应用
- 进一步特征缩减、通道弹性切换,面向实际用 EEG 设备