时频卷积网络脑电图数据分类
这个例子展示了如何分类electroencephaligraph (EEG)时间序列从个人使用和不使用时频卷积网络癫痫。卷积网络预测的类脑电图数据基于连续小波变换(CWT)。这个例子比较了时频网络对一维卷积网络。与深度学习网络,使用大小或平方大小的类(量图)作为预处理步骤,这个示例使用一个可微的量图层。可微的量图层内部的网络,你可以把量图前后可学会的操作。这种类型的层显著扩大建筑与时频变换可能变化。
数据——描述、归因和下载指令
在这个例子中使用的数据是波恩脑电图数据集。当前可用的数据脑电图数据下载和波恩脑电图时间序列下载页面。看到波恩脑电图时间序列下载页面使用数据的法定条件。作者请允许在本例中使用的数据。
这个示例中的数据第一次分析和报告:
五套的数据由100单通道脑电图记录。由此产生的单通道脑电图记录选择从128 -通道脑电图记录视觉检查每个通道后明显的工件和满足弱稳定性判据。有关详细信息,请参阅相关论文。
原来的纸指定的类名作为a e五套。每个记录是23.6秒时间采样在173.61赫兹。每个时间序列包含4097个样本。条件如下:
——正常受试者眼睛睁开
B -正常人闭上眼睛
C -控制发作癫痫患者记录。录音来自海马北半球相反的病灶
D -控制发作癫痫患者记录。从病灶获得的录音。
E -录音从患者癫痫发作。
这个zip文件对应的数据标记为z。zip (A), o。zip (B), n。zip (C), f。邮编(D),和s。zip (E)。
示例假设您已下载并解压zip文件解压到文件夹命名Z
,O
,N
,F
,年代
分别。在MATLAB®你可以通过创建一个父文件夹和使用OUTPUTDIR
变量解压缩
命令。这个示例使用MATLAB作为指定的文件夹tempdir
作为父文件夹。如果您选择使用不同的文件夹,调整的价值parentDir
相应的行动。下面的代码假定所有的. zip文件下载到parentDir
。文件夹的文件解压缩到一个文件夹叫BonnEEG
。
parentDir = tempdir;cd (parentDir mkdir ()“BonnEEG”)dataDir = fullfile (parentDir,“BonnEEG”)
dataDir = " / tmp / BonnEEG "
解压缩(“z.zip”dataDir)解压缩(“o.zip”dataDir)解压缩(“n.zip”dataDir)解压缩(“f.zip”dataDir)解压缩(“s.zip”dataDir)
准备培训资料
各个脑电时间序列在每个存储为. txt文件Z
,N
,O
,F
,年代
文件夹下dataDir
。使用一个tabularTextDatastore
读取数据。创建一个表格文本数据存储并创建一个分类阵列信号标签基于文件夹的名字。
tds = tabularTextDatastore (dataDir,“IncludeSubfolders”,真的,“FileExtensions”,. txt”);
在macOS创建zip文件。解压缩函数通常创建一个文件夹_MACOSX
。如果这个文件夹出现在dataDir
,删除它。
extraTXT =包含(tds.Files,“__MACOSX”);tds.Files (extraTXT) = [];
创建标签的数据基于文本文件名称的第一个字母。
标签= filenames2labels (tds.Files,“ExtractBetween”[1]);
使用阅读对象包含数据的函数来创建一个表。重塑信号单元阵列的行向量,所以他们符合深度学习网络中使用的例子。
2 = 1;eegData =细胞(元素个数(标签),1);而hasdata (tds) tsTable =阅读(tds);ts = tsTable.Var1;eegData{2} =重塑(ts 1 []);2 = 2 + 1;结束
考虑到数据中的五个条件,有多个意义和临床信息分区数据的方法。一个相关的方法是组织Z
和O
标签(non-epileptic受试者眼睛开启和关闭)作为“正常”。类似地,两个条件记录在没有明显的发作癫痫主题活动(F
和N
)可能被分组为“Pre-seizure”。最后,我们指定记录获得的癫痫与癫痫活动主题“没收”。
labels3Class =标签;labels3Class = removecats (labels3Class, (“F”,“N”,“O”,“S”,“Z”]);labels3Class(= =分类标签(“Z”)= = |标签分类(“O”))=…分类(“正常”);labels3Class(= =分类标签(“F”)= = |标签分类(“N”))=…分类(“Pre-seizure”);labels3Class(= =分类标签(“S”))=分类(“没收”);
显示的记录数每个派生类。总结了三个不平衡类100录音“发作”的类别和200录音的“Pre-seizure”和“正常”类别。
总结(labels3Class)
正常200 Pre-seizure 200没收100
分区数据到一个训练集,一个测试集,和一个验证集组成的70%,20%,和10%的记录,分别。
idxSPN = splitlabels (labels3Class [0.7 0.2 0.1]);trainDataSPN = eegData (idxSPN {1});trainLabelsSPN = labels3Class (idxSPN {1});testDataSPN = eegData (idxSPN {2});testLabelsSPN = labels3Class (idxSPN {2});validationDataSPN = eegData (idxSPN {3});validationLabelsSPN = labels3Class (idxSPN {3});
检查每个条件的比例在三组。
总结(trainLabelsSPN)
正常140 Pre-seizure 140没收70
总结(validationLabelsSPN)
正常20 Pre-seizure 20发作10
总结(testLabelsSPN)
正常40 Pre-seizure 40扣押20
因为类的失衡,创建重量成正比逆类频率使用在训练深度学习模型。这就减少了模型的趋势成为偏向更普遍的类。
classwghts =元素个数(labels3Class)。/ (3 * countcats (labels3Class));
训练我们的时频模型之前,检查时间序列数据,从每个类量图的第一个例子。策划是通过辅助函数,helperExamplePlot
。
helperExamplePlot (trainDataSPN trainLabelsSPN)
量图是一个理想的时频变换脑电图波形等时间序列数据特性slowly-oscillating和瞬态现象。
时频深学习网络
定义一个网络,利用时频转换输入信号的分类。
netSPN = [sequenceInputLayer (1,“最小长度”,4097,“名称”,“输入”,“归一化”,“zscore”1)convolution1dLayer(5日,“步”(2)cwtLayer“SignalLength”,2047,“IncludeLowpass”,真的,“小波”,“埃莫”)maxPooling2dLayer ([5 10]) convolution2dLayer ([5 10] 5“填充”,“相同”)maxPooling2dLayer ([5 10]) batchNormalizationLayer reluLayer convolution2dLayer ([5 10] 10“填充”,“相同”)maxPooling2dLayer ((2、4)) batchNormalizationLayer reluLayer flattenLayer globalAveragePooling1dLayer dropoutLayer (0.4) fullyConnectedLayer (3) softmaxLayer classificationLayer (“类”,独特的(trainLabelsSPN),“ClassWeights”classwghts)];
网络功能的输入层,它可实现信号的零均值和标准差。不像[1],没有预处理在这个网络使用带通滤波器。相反,一层可学的一维卷积获得量图之前使用。我们使用的2步一维卷积层downsample沿着时间维度的数据的大小。这减少了计算复杂度的以下量图。下一层,cwtLayer
(小波工具箱)级,获得量图(CWT)的输入信号。对于每一个输入信号,输出层的连续小波变换是一种时频图序列。这一层是可配置的。在本例中,我们使用分析Morlet小波和包括低通比例系数。看到[3]另一个scalogram-based分析这些数据[2]另一个使用可调q值小波变换小波分析。
之后获得量图,网络运行的时间和频率维与二维操作直到量图flattenLayer
。后flattenLayer
沿着时间维度,平均模型输出和使用一个辍学层来防止过度拟合。完全连接层沿通道尺寸等于降低了输出数据类(3)的数量。
在分类层,我们使用之前类权重计算减轻任何网络倾向于弱势阶层。
指定网络培训选项。最好的网络输出验证的损失。
选择= trainingOptions (“亚当”,…“MaxEpochs”现年40岁的…“MiniBatchSize”,20岁,…“洗牌”,“every-epoch”,…“阴谋”,“训练进步”,…“ValidationData”{validationDataSPN, validationLabelsSPN},…“L2Regularization”1飞行,…“OutputNetwork”,“best-validation-loss”,…“详细”、假);
列车网络使用trainNetwork
函数。训练了良好的培训和验证数据集之间的协议。
trainedNetSPN = trainNetwork (trainDataSPN trainLabelsSPN、netSPN选项);
培训完成后,测试了测试集上的网络。情节混乱图并检查网络的查全率和查准率。
ypredSPN = trainedNetSPN.classify (testDataSPN);总和(ypredSPN = = testLabelsSPN) /元素个数(testLabelsSPN)
ans = 0.9700
高频=图;confusionchart(高频,testLabelsSPN ypredSPN,“RowSummary”,“row-normalized”,“ColumnSummary”,“column-normalized”)
混乱图表显示良好的性能在测试集。混乱的行总结图表显示模型的回忆摘要显示,而列精度。回忆和精度一般介于95和100%。性能通常是更好的“癫痫”和“正常”比“Pre-seizure”类的类。
一维卷积网络
供参考,我们比较时频深学习网络的性能与一维卷积网络使用原始时间序列作为输入。尽可能,时频之间的层网络和时域网络保持等价的。注意深度学习网络有很多不同的版本,可以操作原始时间序列数据。将这个特定的网络提出了作为一个参考点,而不是作为一个严格的时间序列网络性能的比较与时频网络。
netconvSPN = [sequenceInputLayer (1,“最小长度”,4097,“名称”,“输入”,“归一化”,“zscore”1)convolution1dLayer(5日,“步”,2)maxPooling1dLayer (10) batchNormalizationLayer reluLayer convolution1dLayer (5 5“填充”,“相同”)batchNormalizationLayer reluLayer convolution1dLayer (5, 10,“填充”,“相同”)maxPooling1dLayer (4) batchNormalizationLayer reluLayer globalAveragePooling1dLayer dropoutLayer (0.4) fullyConnectedLayer (3) softmaxLayer classificationLayer (“类”,独特的(trainLabelsSPN),“ClassWeights”classwghts)];trainedNetConvSPN = trainNetwork (trainDataSPN trainLabelsSPN、netconvSPN选项);
训练精度之间显示了良好的协议在训练集和验证集。然而,网络在训练精度相对较差。培训完成之后,测试我们的模型在伸出测试集。情节混乱图和检验模型的查全率和查准率。
ypredconvSPN =分类(trainedNetConvSPN testDataSPN);总和(ypredconvSPN = = testLabelsSPN) /元素个数(testLabelsSPN)
ans = 0.7000
高频=图;confusionchart(高频,testLabelsSPN ypredconvSPN,“RowSummary”,“row-normalized”,“ColumnSummary”,“column-normalized”)
召回和精度性能的网络不是令人惊讶的准确大大低于时频网络。
区分Pre-seizure vs发作
另一个诊断有用的分区的数据包括分析数据仅为研究对象与癫痫症和把数据分成pre-seizure vs数据。就像在前一节中完成的,数据分割成培训、测试和验证设置为70%,将数据分为20%和10%Pre-seizure和癫痫发作的例子。首先,创建新标签以分区的数据。检查每个类的例子。
labelsPS =标签;labelsPS = removecats (labelsPS, (“F”,“N”,“O”,“S”,“Z”]);labelsPS(= =分类标签(“S”))=分类(“没收”);labelsPS(= =分类标签(“F”)= = |标签分类(“N”))=分类(“Pre-seizure”);labelsPS (isundefined (labelsPS)) = [];总结(labelsPS)
夺取100 Pre-seizure 200
生成的类是不平衡的两倍的信号“Pre-seizure”类的“发作”的类别。分区的数据和构建类权重不平衡的分类。
idxPS = splitlabels (labelsPS [0.7 0.2 0.1]);trainDataPS = eegData (idxPS {1});trainLabelsPS = labelsPS (idxPS {1});testDataPS = eegData (idxPS {2});testLabelsPS = labelsPS (idxPS {2});validationDataPS = eegData (idxPS {3});validationLabelsPS = labelsPS (idxPS {3});classwghts =元素个数(labelsPS)。/ (2 * countcats (labelsPS));
使用相同的卷积网络与前面的分析与修改只有在完全连接和分类层所需的不同的类的数量。
netPS = [sequenceInputLayer (1,“最小长度”,4097,“名称”,“输入”,“归一化”,“zscore”1)convolution1dLayer(5日,“步”(2)cwtLayer“SignalLength”,2047,“IncludeLowpass”,真的,“小波”,“埃莫”)averagePooling2dLayer ([5 10]) convolution2dLayer ([5 10] 5“填充”,“相同”)maxPooling2dLayer ([5 10]) batchNormalizationLayer reluLayer convolution2dLayer ([5 10] 10“填充”,“相同”)maxPooling2dLayer ((2、4)) batchNormalizationLayer reluLayer flattenLayer globalAveragePooling1dLayer dropoutLayer (0.4) fullyConnectedLayer (2) softmaxLayer classificationLayer (“类”,独特的(trainLabelsPS),“ClassWeights”classwghts)];
培训网络。
选择= trainingOptions (“亚当”,…“MaxEpochs”现年40岁的…“MiniBatchSize”32岁的…“洗牌”,“every-epoch”,…“阴谋”,“训练进步”,…“ValidationData”{validationDataPS, validationLabelsPS},…“L2Regularization”1飞行,…“OutputNetwork”,“best-validation-loss”,…“详细”、假);trainedNetPS = trainNetwork (trainDataPS trainLabelsPS、netPS选项);
检查测试集上的准确性。
ypredPS =分类(trainedNetPS testDataPS);总和(ypredPS = = testLabelsPS) /元素个数(testLabelsPS)
ans = 0.9667
高频=图;confusionchart(高频,testLabelsPS ypredPS,“RowSummary”,“row-normalized”,“ColumnSummary”,“column-normalized”)
时频卷积网络显示了优良的性能在“Pre-seizure”与“没收”数据。
总结
在这个例子中,使用时频卷积网络分类在残疾人和没有癫痫脑电图记录。这个例子和一个至关重要的差异量图网络中使用[3]内,是使用一个可微的量图深度学习模型。这种灵活性使我们能够结合一维与二维深度学习在同一层模型,以及时频变换前的地方可学的操作。比较的方法对类似的一维卷积网络。一维卷积网络构建是尽可能接近时频模型。很可能更优的一维卷积或复发性网络可以为这些数据而设计的。正如前面提到的,这个例子的重点是构造一个可微的时频网络对于现实世界的脑电图数据,没有进行深入的比较时频竞争模型对时间序列模型。
引用
[1]Andrzejak,拉尔夫G。,Klaus Lehnertz, Florian Mormann, Christoph Rieke, Peter David, and Christian E. Elger. “Indications of Nonlinear Deterministic and Finite-Dimensional Structures in Time Series of Brain Electrical Activity: Dependence on Recording Region and Brain State.” Physical Review E 64, no. 6 (2001). https://doi.org/10.1103/physreve.64.061907.
[2]Bhattacharyya Abhijit, Ram Pachori Abhay阿帕德海耶,美国。“Tunable-Q基于小波变换的多尺度熵度量进行自动分类的癫痫EEG信号。“应用科学7,不。4 (2017):385。https://doi.org/10.3390/app7040385。
[3]土耳其、俄梅珥和穆罕默德Sirac Ozerdem。“癫痫检测使用基于量图卷积神经网络从脑电图信号。“脑科学9,不。5 (2019):115。https://doi.org/10.3390/brainsci9050115。
函数helperExamplePlot (trainDataSPN trainLabelsSPN)%这个函数只例如使用。它可能改变或%在将来发布的版本中移除。%% 2022年版权MathWorks公司。szidx =找到(trainLabelsSPN = =分类(“没收”),1“第一”);psidx =找到(trainLabelsSPN = =分类(“Pre-seizure”),1“第一”);nidx =找到(trainLabelsSPN = =分类(“正常”),1“第一”);Fs = 173.61;t = 0:1 / Fs: (4097 * 1 / Fs) 1 / f;[scSZ f] = cwt (trainDataSPN {szidx}, Fs,“埃莫”);scSZ = abs (scSZ);scp = abs (cwt (trainDataSPN {psidx}, Fs,“埃莫”));视交叉上核= abs (cwt (trainDataSPN {nidx}, Fs,“埃莫”));tiledlayout (2) nexttile情节(t, trainDataSPN {szidx}),轴紧标题(“癫痫脑电图”)ylabel (“振幅”)nexttile冲浪(t, f, scSZ),阴影插值函数甘氨胆酸,视图(0,90)设置(,“Yscale”,“日志”),轴紧标题(“量图——癫痫脑电图”)ylabel (“赫兹”)nexttile情节(t, trainDataSPN {psidx}),轴紧标题(“Pre-seizure脑电图”)ylabel (“振幅”)nexttile冲浪(t, f, scp),阴影插值函数甘氨胆酸,视图(0,90)设置(,“Yscale”,“日志”),轴紧标题(“量图——Pre-seizure脑电图”)ylabel (“赫兹”)nexttile情节(t, trainDataSPN {nidx}),轴紧标题(“正常脑电图”)ylabel (“振幅”)包含(“时间(秒)”)nexttile冲浪(t, f, scN),阴影插值函数甘氨胆酸,视图(0,90)设置(,“Yscale”,“日志”),轴紧标题(“量图——正常脑电图”)ylabel (“赫兹”)包含(“时间(秒)”)结束
另请参阅
功能
dlcwt
(小波工具箱)|cwtfilters2array
(小波工具箱)|类
(小波工具箱)
对象
cwtLayer
(小波工具箱)|cwtfilterbank
(小波工具箱)
相关的话题
- 实际使用连续小波变换时频分析的介绍(小波工具箱)
- 时频特性嵌入深度度量学习