以下是我的数据:
我有500个录音(任意分成训练,验证和测试集)。每个记录包含一定数量的行,每一行对应一个1s的EEG片段,换句话说,每个记录的长度等于一个EEG信号的长度(s)。每行包含22个通道*22个时间/频率特征=484个特征+输出标签(0或1)。在
所以我想执行二进制分类。在
正如许多论文(看this good paper)所建议的那样,对于每一个记录,我创建长度为look_back的序列,以便在预测每个标签时考虑到“周围”片段的特征。代码如下:def create_dataset(feat,targ, look_back=1):
semi_window=math.floor(look_back/2)
dataX, dataY = [], []
for i in range(semi_window,len(targ)-semi_window):
a = feat[i-semi_window:(i+semi_window+1), :]
dataX.append(a)
dataY.append(targ[i])
return np.array(dataX), np.array(dataY)
此函数返回大小为(samples, look_back=time_steps, features=484)的三维数组。在
为了处理不平衡的类,我测试了make_imbalance函数以删除实例以保持每个类的实例数不变,以及在loss函数中考虑到不平衡的class_weight参数。在
所以,我使用了一个LSTM模型,并使用earlystup回调参数,在验证精度没有增加给定容差的情况下停止。在