SuperBruceJia / EEG-Motor-Imagery-Classification-CNNs-TensorFlow

EEG Motor Imagery Tasks Classification (by Channels) via Convolutional Neural Networks (CNNs) based on TensorFlow
https://iopscience.iop.org/article/10.1088/1741-2552/ab4af6/meta
204 stars 47 forks source link

好像有用到测试集的bug #7

Closed DrugLover closed 2 years ago

DrugLover commented 2 years ago

数据预处理那里 我看到你们方法是把所有的通道提取出来,假设下面这种情况: 训练集T1,测试集T2,通道假设为三通道C1、C2、C3。 显然,在训练过程中T2的三个通道的数据均未知。 但是根据您的方法,数据预处理的时候把通道提出来再合并成一个矩阵,数据的最小单位不是一个事件,而是一个事件的一个通道。 随着数据量的增加,用到测试集的通道应该是必然事件。 您的Matlab代码中处理后的105人数据的shape是149940x640,640是160Hz4s, 149940=105人17通道*84事件。 在这基础上打乱后分训练集测试集,就会用到测试事件的通道信息。 以上是我这个大四学生的猜测,希望您能解答我的疑惑

SuperBruceJia commented 2 years ago

您好,经过文章中的数据预处理后,数据就由[通道 X 时间点]转变为了联合时频分析图,维度为[频率 X 时间点]啦,640个时间点对应一个频率的,而不是通道。

DrugLover commented 2 years ago

emmm说实话后面我还没做,只做到了写入xlsx文件的这一步,可能是我后面理解错了 您能公开一下matlab文件处理后的xlsx文件吗?我的运行的时候爆内存了(16g,且在写入前clear掉其余的所有变量了) 谢谢!

leoeooe commented 2 years ago

目前看到公开数据集四分类做到90以上准确率的好像都用到了通道augmentation这个bug,这在现实在线实验是无法实现的。判断依据就是看是否会出现一次实验中的数据同时出现在训练集和测试集中,包括相邻通道的数据,因为相似性很高。

leoeooe commented 2 years ago

正确的划分方法应该是先按trial划分好训练集与测试集,之后训练集里面的数据随便怎么处理,但是测试集的数据只能在单个trial之内进行处理而不能做trial之间的交叉。依据这种划分方法几乎所有的90以上准确率的paper都完全无效了

rongmengmeng commented 4 weeks ago

赞同楼上的说法,构建训练集和测试集时,一次实验中的相邻通道的数据同时出现在训练集和测试集中,而EEG相邻通道之间的数据相似度很高,所以能达到很高的准确率。如果先按照trial划分好训练集和测试集,使用同样的网络架构,准确率会大大下降(四分类不到50%)