
基于机器学习的脑电数据分析
论文的地方复现了SVM的方法
一、实验目的与要求
1. 通过实验加深对脑电数据的了解;
2. 掌握使用Matlab/Python工具进行数据分析的基本方法;
3. 具备使用机器学习方法进行脑电数据分析的能力;
二、实验内容与方法
请简述脑电数据的基本特征。
EGG
活的人脑总会不断放电, 称为脑电 (EEG),但成分复杂而不规则正常的自发脑电一般处于几微伏到 75微伏之间。
脑电信号幅度非常微弱,频率范围0.5~50Hz。一般头皮脑电信号只有50μV 左右,超过 ±100μV 的就可以看作是噪声。
脑电信号是一种随机性很强的非平稳信号。之所以说它随机性强,是因为影响它的因素太多,其规律又尚未被认识。人们不得不借助统计处理技术来检测、辨识和估计它的特征。非平稳性是由于构成脑电信号的生理因素始终在变化,而且对外界的影响有自适应能力。因此EEG又是统计特性随时间变化的非平稳信号。
脑电信号是非线性信号。生物组织的调节及自适应能力必然影响到电生理信号,这使得脑电具有典型的非线性的特点。而传统意义上的信号处理方法都是建立在线性系统理论分析基础之上的,因而分析结果不可避免地丢失了很多原始信号所带的信息。这也是为什么非线性动力学混沌理论发展起来后被迅速运用到脑电的分析研究中的原因。虽然目前尚没有任何结论可以替代传统的研究方法,但是不可否认的是非线性研究在脑电信号处理中有着极其重要的地位,并有可能最终取代基于线性系统的研究方法占据脑电信号分析处理的主导位置。
常用的频率带有以下分类:
δ波:频率为1-3.5Hz,振幅为20-200μV,在睡眠、深度麻醉、缺氧或大脑有器质性病变时出现。
θ波:频率为4-7Hz,振幅约为10-50μV,在困倦时,中枢神经系统处于抑制状态时所记录的波形。
α波:频率8-13Hz,振幅20-100μV,可在头的枕部检测到,它是节律性脑电波中最明显的波。
β波:β波频率约为13—30Hz,振幅约为5-20μV,是一种快波,β波的出现一般意味着大脑比较兴奋。
γ波:频率为31-100Hz,目前对于γ波的理论存在争议。
尖波:频率80~300ms,振幅不定,波顶较尖、上行快,见于癫痫.三相尖波发生于肝昏迷、脑外伤及癫痫。
棘波:频率20~80ms,振幅不定,波顶尖锐、形似尖钉,是脑细胞过度兴奋表现,负相来自大脑皮层,两相来自大脑皮质,正相从远处传来,见于癫痫。
开放电场
脑电 (EEG) 是由于皮质大量神经组织的突触后电位同步总和而成,而单个神经元电活动非常微小, 不能在头皮记录到, 只有神经元群的同步放电才能记录到。
这种脑组织神经元排列方向一致的情况构成所谓的开放电场(open field),反之则是方向不一致相互抵消的封闭电场
ERP
通过叠加技术获得的与事件发生进程有锁时 (time-lock) 关系的脑电就称为事件相关电位(ERP)。
事件相关电位(Event-Related Potentials,简称ERPs):ERPs是通过对大量重复的刺激事件进行平均得到的脑电信号,用于研究特定刺激事件对大脑的影响。常见的ERPs包括P300、N400等。由心理活动所引起的脑电比自发脑电更弱, 一般只有 2 到10微伏, 通常淹埋在自发电位中。所以ERP需要从EEG中提取。
事件相关电位(ERP)有很鲜明的准时(相对的)性 , ERP是事件触发的,往往是在一个事件发生时刻后的一定时间范围产生相应的脑电信号。因此ERP常用于研究 那些具有显著的刺激锁时(time-locked)性质的现象。 ERP是刺激事件引起的实时脑电波, 在时间精度可达到微秒级。极高的时间分辨率是E R P 的主要优势, ERP也可以和行为数据,特别是反应时间 (RT) 很好地配合, 以研究认知加工过程的规律。
Oddball范式
在发现 P300时使用了一个称为Oddball的经典ERP实验范式。Oddball实验范式的要点是,对同一感觉通道施加两种刺激, 一种刺激出现概率很大,如%85, 另一种刺激出现的概率很小, 如%15。
两种刺激以随机顺序出现, 这样, 对于被试来说, 小概率刺激的出现具有偶然性, 因为它很少才出现一次, 感觉有点怪 (Odd)。但实验任务却要求被试关注小概率刺激, 只要小概率刺激一出现就尽快做出反应。可见这里的靶刺激是小概率刺激。
CNV
CNV (Contingent Negative Variation) 关联负变。实验中, 告知被试, 他将得到两个信号(声音或闪光等),他的任务是在第一个信号出现后开始准备反应, 但并不反应, 当出现第二个信号之后则要尽快做出反应; 两个信号之间的时间并不固定。
结果表明, 在两个信号之间, 被试的脑电出现了负向偏转(或负向变化,负变),这个脑电负向变化形成的类似高原的波形就是 CNV, 在被试完成按键反应后CNV就消失了。
三、实验结论或体会
请简述脑电数据的预处理大致包括哪几个部分。
分段
按照预设的分析时程,以刺激物发生为起点, 对连续记录的EEG数据按照事件发生时段进行分段。数据是从实验开始到实验结束时全程记录的,分段以选取所需要的范围以内的数据。
滤波
滤波分为高通滤波,低通滤波,带通滤波和凹陷滤波。
高通滤波是指,高于某个频率的信号可以通过,而低于这个频率的信号会被衰减过滤掉。而低通滤波则相反,指的是低于某个频率的信号可以通过,而高于这个频率的信号则相反。所以,在输入数值的时候,高通滤波要输入的是一个较小的数字,而低通滤波则是输入一个较大的数字。
带通滤波,指的是在某个频率段范围内的信号可以通过,而这个频率段范围以外的信号会被衰减过滤掉,就相当于同时做了高通滤波和低通滤波。
凹陷滤波,指的是在某个频率范围内的信号会被衰减过滤掉,而这个频率范围以外的信号会被保留下来。这个操作通常是用来去除50Hz市电的干扰。我国的50Hz,因此在收集到的信号中,会有一个非常强烈的50Hz频段的信号存在,这就可以用凹陷滤波来去掉。
值得注意的是,滤波并不能完全过滤出我们想要的频段。比如30Hz的低通滤波,并不是说30Hz以外的信号就通通被过滤掉了,而是以30Hz为截止频率,高于这个截止频率的信号会被逐渐衰减。
基线校正
校正时一般选择所有导联(all channel), 即对所有电极点都进行校正。基线是根据Epoch时设置的刺激前到 0 点的时间段上的波形,一般设定100ms 。
基线校正的作用在于通过比较事件发生前后的脑电活动来分辨刺激事件到底让被试产生了什么样的活动,并让每一段数据都拥有一个差不多的起点。
重参考
采集之后的数据是一个个的数值,但这个数值是什么意思呢,就是电极所在位置跟参考电极之间的电位差。一般在脑电记录的时候会采用的参考电极,我们所看到的每个通道的数值,其实就是指这个通道跟参考通道之间的电位差。
在分析数据的时候,有时候我们会想要转换参考点的位置。因为不同位置的参考,会对数据造成一定的影响。比如记录时采用的是cz或头顶中央参考,那么自然地,距离cz点较近的电极点,记录到的电位差会非常小,而离得远的电极记录到的电位差就自然会大一点,这种大与小的差异,并不是由认知活动产生的,而是由记录方式产生的。又比如,单侧乳突参考,那脑袋左边的电极点跟右边的电极点,也会存在着记录方式不同产生的电位差不同。
常用的一些参考位置有双侧乳突平均参考,指将两个乳突数据的平均值作为参考数据,或者是全脑平均参考,指的是将全脑所有数据的均值作为参考数据的方法,不过使用全脑平均参考的时候要注意,眼电数据不要纳入其中,因为眼电数据的波动起伏非常大,很容易对数据造成比较大的干扰。
剔除坏段
在分析数据的时候,有时候我们会想要转换参考点的位置。因为不同位置的参考,会对数据造成一定的影响。比如记录时采用的是cz或头顶中央参考,那么自然地,距离cz点较近的电极点,记录到的电位差会非常小,而离得远的电极记录到的电位差就自然会大一点,这种大与小的差异,并不是由认知活动产生的,而是由记录方式产生的。又比如,单侧乳突参考,那脑袋左边的电极点跟右边的电极点,也会存在着记录方式不同产生的电位差不同。
常用的一些参考位置有双侧乳突平均参考,指将两个乳突数据的平均值作为参考数据,或者是全脑平均参考,指的是将全脑所有数据的均值作为参考数据的方法,不过使用全脑平均参考的时候要注意,眼电数据不要纳入其中,因为眼电数据的波动起伏非常大,很容易对数据造成比较大的干扰。
伪迹矫正
脑电信号是随时间变化的随机信号,幅值小(uv),易受到与脑活动无关的其他信号干扰,这些干扰叫做伪迹。
伪迹类型有:眼电伪迹、心电伪迹、肌电伪迹。
眼电伪迹: 眨眼伪迹和眼动伪迹,眼球靠近面部的为正,脑后的为负形成电位差叫做偶极子。眨眼伪迹:当眨眼时,眼睑覆盖眼球然后再离开眼球,这会导致偶极子电势差的急剧变化,该种电势差变化被EEG采集系统捕捉,便形成了眨眼伪迹;眼动伪迹是眼球上下或左右运动带来的偶极子电势差变化,眼球运动方向的电位会变得更正。会出现“篷车”或“斜篷车”波形。
心电伪迹(ECG)是由心脏跳动带来的,容易在乳突出现,如果以乳突作为参考电极的话,那么ECG会以颠倒的形状在所有电极中观察到。
肌电伪迹来源于肌肉活动时肌肉细胞的电位变化,由于EEG在头皮进行采集,因此头部和颈部的肌肉活动是EEG肌电干扰的最主要来源,颈部以下的肌肉活动一般不会对EEG产生较大的干扰。
伪迹去除:实验前尽可能排除干扰,实验中受试者应该严格按照实验要求,通过让被试洗头、适当涂抹脑电膏、使用扎带固定电极帽位置等尽量降低电极的阻抗,实验后删除伪迹影响较大的电极通道。
伪迹校正的方法有很多,较普遍的方法有独立成分分析。
操作演示
从GitHub上下载eeglab对应的软件包,解压缩并将之添加到MATLAB的路径中,在命令行窗口输入eeglab,即可弹出窗口,点击File,执行Load existing dataset,加载set文件。点击Edit,选择Channel Location即可查看电极。
点击Plot 2D即可查看二维平面的电位图。点击对应的电位即可查找序号。
在Tools栏是对于脑电数据预处理的方式,有改变采样频率,滤波,重参考,选择电极位,有排除/接受眼动等方式。点击inspect/label component by map可直观地查看脑电的变化。
选择合适的方式预处理后,选择Decompose data by ICA,点击OK,弹出窗口Opening…并等待该窗口自动消失。
完成后点击Plot栏Channel data(scoll),即可查看脑电信号的图表。
实验体会
我认为本次实验过程最重要的工作在于对于数据集正确地处理,才能达到预期地效果。对于论文中应用的方法,有很多是开源的,达到论文中的准确率需要根据论文采用实验方式。
刚开始根据某一时刻和某一波型下对应的一系列通道和标签来训练模型,效果不佳,训练时间也很长,后来对于数据平坦化处理,训练时间很短,同时也能达到论文的效果。
四、练习题
选择脑电的一个标准数据集,选择一种脑电分类方法进行分类,要求至少达到任何一篇已发表论文的分类正确率。在这里列出实验过程、方法、结果与参考的论文。可参考基于PyTorch构架的基于深度学习算法的脑电工具箱TorchEEG。
链接:https://torcheeg.readthedocs.io/en/latest/
数据集介绍
SEED
SEED数据集
SEED数据集包含12名受试者的脑电图和眼动数据以及另外3名受试人的脑电图数据。数据是在他们观看电影剪辑时收集的。影片剪辑经过精心挑选,以诱发不同类型的情绪,有积极的、消极的和中性的情感。在实验过程中,受试者观看了三种情绪相关的电影片段,即快乐、中性和悲伤,每种情绪有5个片段。
表 受试者观看的电影片段
DEARMER
DREAMER数据集
DREAMER数据集包含了一个实验的被试的评分和生理记录,23个志愿者看了由Gabert-Quillen等人挑选和评价的18个电影片段。EEG和ECG信号被记录,并且每个被试通过报告5个点量表上感觉到的唤醒,效价和支配度来对他们的情绪打分。
DEAP
这是一个用于分析人类情感状态的多模式数据集。32名参与者在观看40段一分钟长的音乐视频时,记录了他们的脑电图和外周生理信号。参与者根据唤醒、效价、喜欢/不喜欢、主导和熟悉程度对每个视频进行评分。32名参与者中有22人还录制了正面视频。使用了一种新的刺激选择方法,利用last.fm网站上的情感标签检索、视频亮点检测和在线评估工具。
DEAP数据集
数据集选择
这里选择SEED作为数据集:数据集中选择7名中国男性,8名中国女性,年龄均值位23.27,标准差为2.37参与了实验。第1-5和第8-14名受试者(12名受试者)有脑电图和眼动数据,而第6、第7和第15名受试者只有脑电图数据。
数据集的具体信息在论文Differential Entropy Feature for EEG-based Emotion Classification与Investigating Critical Frequency Bands and Channels for EEG-Based Emotion Recognition with Deep Neural Networks中也有提及。
数据集又分为两种,已加工的数据集和未加工的数据集,已加工的数据集的处理方式有:
功率谱密度(power spectral density,PSD)
微分不对称(differential asymmetry,DASM)
理性不对称(rational asymmetry,RASM)
微分因子(differential causality,DCAU)
不对称(assymmetry,ASM)
微分熵(differential entropy,DE)
论文选择
A Novel Bi-hemispheric Discrepancy Model for EEG Emotion Recognition
数据集中将通道的数据用线性表来存储,就可能忽略了通道在空间上的分布,因为相邻的通道的信号可能有一定相似度,将数据用线性存储,在横向和纵向只保留了一个方向的信息,为了提取空间上的信息,论文中采用BIHDM的方法,这是基于RNN根据左右脑通道的空间位置而提出的模型。论文中只用微分熵的方法,这里也只用了微分熵的方法。
论文根据该数据集,将通道分为左半脑和右半脑两个部分,采用了微分熵的方式对数据集进行预处理,两种实验方法来测试数据。
方法一:对于每一个受试者观看15次不同电影片段对应15次记录,将前面9次记录作为训练集,后面6次记录作为测试集。在这种实验方法中,不同的模型运行的结果差异较小,普遍偏高,这也体现了同一个受试者对于相似的情节产生的脑电波有较大的规律性,这种实验方法只适合多个模型比对,不适合用来衡量模型的性能。
方法二:采用LOSO(leave one subject out)的方法,令一个受试者的数据作为测试集,其他所有受试者的数据作为训练数据集。对于LOSO方法,因为测试的受试者多个,所以在这种实验方法中,不同的模型运行的结果差异较大。既说明了受试者的不同对于测试数据的影响较大,也说明了论文所运用的模型具有很好的泛化能力。
对于数据集我将所有的数据集根据预处理的方式和波型分类,得到自己的数据集。
一开始的时候根据不同的波型来训练,不同的波型得到的效果都不佳,但这也说明了情绪的信息是混合在所有的波型中的。
SVM
支持向量机,只能给对二维的片段进行分析,需要对于数据进行平坦化处理。
线性核(linear):线性核函数将原始特征空间映射到一个线性空间。准确率高于论文中的结果,标准差比论文略低。
多项式核(poly):多项式核函数将原始特征空间映射到一个多项式空间。准确率高于论文中的结果,标准差比论文略低。
径向基函数(rbf):径向基函数(也称为高斯核)将原始特征空间映射到一个无限维的特征空间。采用这种方法得到的准确率与论文中的结果相近,标准差比论文略低。
Sigmoid核(sigmoid):Sigmoid核函数将原始特征空间映射到一个Sigmoid空间。采用这种方法只调整惩罚系数则每次测试准确率都是1/3,需要调整其他参数。
论文中SVM使用了最小二乘法支持向量机的方法,通过最小化平方误差作为损失函数,这种方法在sklearn库中并没有集成。
方法一
方法二
根据实验的要求,我自己查到文档找到了通道对应的序列号,每次的通道只选取左半脑的通道。实验代码如下图所示,运用sklearn的库定义了svm模型,根据实验要求把数据集分成训练数据集和测试数据集,选取了所有波型对应的脑电信号,脑电信号的时间长度都是不定的,所以截取了前180帧,每一帧选取左半脑以及左右半脑之间的通道。
标准差的计算方法论文中没有提到,我一开始的做法是预测测试集对应的标签,计算该标签与真实情况的方差,这种做法是不可能得到论文结果的。算不对而且结果不是很大就是很小,后面是直接将预测的所有结果求方差,大致和论文中的结果相似。
参考论文
Investigating Critical Frequency Bands and Channels for EEG-Based Emotion Recognition with Deep
Neural Networks Differential entropy feature for EEG-based emotion classification
Emotions Recognition Using EEG Signals A Survey
A Saliency based Feature Fusion Model for EEG Emotion Estimation
A Novel Bi-hemispheric Discrepancy Model for EEG Emotion Recognition
Least squares support vector machine classifiers
更多推荐
所有评论(0)