最近我们在做利用LSTM网络对脑电波信号(纺锤体)进行分类的相关工作。我们的数据集是来自于美国开源的睡眠数据集(national sleep research resource)https://sleepdata.org

我们获得数据包含 纺锤波的持续时间,振幅,时间,等几个特征。我们采集的样本主要来自于正常人和病人。我们初步的思想是将纺锤波视为一个事件,生成一个序列。出现纺锤波信号的为1,反之为0.然后利用神经网络,来学习这个序列的内部特征,通过序列来判断病人有没有患病。

众所周知LSTM神经网络在处理时序信息时有一个很好的效果,特别是几年来nlp的飞速发展。

我们首先需要的是对序列进行二进制编码

def bit_coding(data, step): #对一个数据进行编码code = []pre_data = 0count = 0length = len(data)while count < length:n = (data[count]-pre_data) / stepif n > 0:if n % 1 > 0:n = int(n)code += [0] * n + [1]else:n = int(n)code += [0] * (n - 1) + [1]pre_data = data[count]count += 1return code

其中的step就是设置的精度,多少步长进行统计,这个值将决定你获得一个脑电波的序列的维度大小。

我们再生成一个脑电波的类的相关信息

class SpindleData:path = ""paths = []labels = []data = []step = 0.0001max_length = 0#设置默认的编码间隔coding_q = []def __init__(self, path="datasets", step=0.0001 ):self.path = pathself.step =stepself.paths, self.labels = self.get_data_labels()   #获得路径以及标签self.coding()def get_data_labels(self):  # 返回获取的数据以及标签[0,1,0,1,...]  "./datasets/"path = self.pathcate = [(os.path.join(path, x)) for x in os.listdir(path)]paths = []labels = []for i, p in enumerate(cate):path_tmps = glob.glob(os.path.join(p, "*.csv"))for p in path_tmps:paths.append(p)labels.append(i)np.asarray(labels)                  #将标签转化为np的格式return paths, labelsdef coding(self):#所有的数据读取以及存储(这里保存了数据的原始数据占用内存可能比较大)codeing_q = []for p in self.paths:data = pd.read_csv(p, skiprows=(0, 1), sep=",")print("正在读取第%d个csv文件..." % (self.paths.index(p)+1))data =data['Time_of_night']self.data.append(data)for i, d in enumerate(self.data):code = bit_coding(d, step=self.step)print("正在对第%d个序列进行编码..."%(i+1))codeing_q.append(code)#将二位的编码加入到序列中self.max_length = max([len(x) for x in codeing_q])codeing_q = preprocessing.sequence.pad_sequences(codeing_q, maxlen=self.max_length)   #将所有的串都弄成相同的维度self.coding_q = np.asarray(codeing_q)

这个类主要包含编码后的0/1序列,1序列表示的是纺锤波出现,0表示的是纺锤波没有出现。同时我们利用了keras 的对齐。超过固定长度的部分会被截断,不足的部分会补零。同时我们再生成一个labels数组,这个对应的是病人患病与健康。其实就是一个二分类问题。

我们再来搭建一个LSTM神经网络

def learning_lstm():                   #lstm暂时还是比较适合于文本中,对于有序序暂不合适x_train, y_labels, length = data_test()x_train = np.expand_dims(x_train, axis=2)model = Sequential()# model.add(Embedding(max_feature, 32))model.add(LSTM(32, input_shape=(length, 1)))model.add(Dense(1, activation='sigmoid'))model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc'])model.summary()history = model.fit(x_train, y_labels, epochs=10, batch_size=16, validation_split=0.2)draw(history)def data_test():length = 0   #每一个系列的长度spindle = SpindleData()x_train = spindle.coding_qy_train = spindle.labelslength = spindle.max_lengthreturn x_train, y_train, length

我实验中的step设置的最小间距0.0001,因此每个序列都有120,000维.暂时实验的效果不是很明显。

由于我们暂时获取的数据还比较小,导致训练不充分,同时可能会导致过拟合等问题。接下来我们会进行改进测试。

我先把github源码发上来,相关的原发发布到了我的github上:https://github.com/danzhewuju/Spindle 欢迎指正!

利用LSTM对脑电波信号进行分类相关推荐

  1. 利用LSTM(长短期记忆网络)来处理脑电数据

    目录 LSTM 原理介绍 LSTM的核心思想 一步一步理解LSTM 代码案例 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 .QQ交流群:903290195 Rose小哥今天介绍一下用LS ...

  2. 基于一维卷积神经网络对机械振动信号进行分类并加以预测

    基于一维卷积神经网络对机械振动信号进行分类并加以预测 *使用一维卷积神经网络训练振动信号进行二分类 2020年7月16日,一学期没等到开学,然而又放假了. 总览CSDN中大多数卷积神经网络都是对二维图 ...

  3. 【思维导图】利用LSTM(长短期记忆网络)来处理脑电数据

    文章来源| 脑机接口社区群友 认知计算_茂森的授权分享 在此非常感谢 认知计算_茂森! 本篇文章主要通过思维导图来介绍利用LSTM(长短期记忆网络)来处理脑电数据. 文章的内容来源于社区分享的文章&l ...

  4. DL之LSTM:基于《wonderland爱丽丝梦游仙境记》小说数据集利用LSTM算法(层加深,基于keras)对单个character字符预测

    DL之LSTM:基于<wonderland爱丽丝梦游仙境记>小说数据集利用LSTM算法(层加深,基于keras)对单个character字符预测 目录 基于<wonderland爱丽 ...

  5. DL之LSTM:基于tensorflow框架利用LSTM算法对气温数据集训练并回归预测

    DL之LSTM:基于tensorflow框架利用LSTM算法对气温数据集训练并回归预测 目录 输出结果 核心代码 输出结果 数据集 tensorboard可视化 iter: 0 loss: 0.010 ...

  6. TF之LSTM:利用LSTM算法对Boston(波士顿房价)数据集【13+1,506】进行回归预测(房价预测)

    TF之LSTM:利用LSTM算法对Boston(波士顿房价)数据集[13+1,506]进行回归预测(房价预测) 相关文章 DL之LSTM:利用LSTM算法对Boston(波士顿房价)数据集[13+1, ...

  7. DL之LSTM之MvP:基于TF利用LSTM基于DIY时间训练csv文件数据预测后100个数据(多值预测)状态

    DL之LSTM之MvP:基于TF利用LSTM基于DIY时间训练csv文件数据预测后100个数据(多值预测)状态 目录 数据集csv文件内容 输出结果 设计思路 训练记录全过程 数据集csv文件内容 输 ...

  8. DL之LSTM之UvP:基于TF利用LSTM基于DIY时间训练1200个数据预测后200个数据状态

    DL之LSTM之UvP:基于TF利用LSTM基于DIY时间训练1200个数据预测后200个数据状态 目录 输出结果 设计思路 训练记录全过程 输出结果 设计思路 训练记录全过程 INFO:tensor ...

  9. TF之LSTM:利用LSTM算法对mnist手写数字图片数据集(TF函数自带)训练、评估(偶尔100%准确度,交叉熵验证)

    TF之LSTM:利用LSTM算法对mnist手写数字图片数据集(TF函数自带)训练.评估(偶尔100%准确度,交叉熵验证) 目录 输出结果 设计思路 代码设计 输出结果 第 0 accuracy 0. ...

最新文章

  1. Windows netstat 查看端口、进程占用
  2. Zookeeper系列(十)zookeeper的服务端启动详述
  3. Spring Boot 动手写一个 Start
  4. HashMap解决hash冲突的方法
  5. 浅谈PPM (Project Portfolio Management)
  6. 乒乓球(洛谷-P1042)
  7. [转]Windows 性能监视器工具-perfmon
  8. 【三维路径规划】基于matlab广度优先搜索算法无人机三维路径规划【含Matlab源码 270期】
  9. vue项目history路由的配置
  10. 嵌入式系统设计师教程笔记
  11. 一篇价值过百万的日志
  12. 怎么用imp命令把dmp文件从本地导入到远处的数据库服务器,Oracle 数据库导入导出dmp文件...
  13. (九)Linux系统运维-常用软件包管理
  14. STC51单片机串口设置波特率分析对比与ISP程序烧录设置
  15. Simulink提速方式
  16. 《安富莱嵌入式周报》第245期:2021.12.20--2021.12.26
  17. YYLabel的几个实用小技巧
  18. 华为Android10版怎么截屏,华为畅享10e怎么截屏?畅享10e多种屏幕截图方法
  19. 基于MatLab实现LSB(最低有效位)算法完成图片数字水印隐写功能
  20. 基于 Servlet + jsp 的企业财务管理系统设计与实现

热门文章

  1. DM368+MT7601U通过wifi可以正常出图
  2. 傅里叶变化,短时傅里叶分析,小波变换
  3. 糖尿病合并高血压高龄奥密克戎感染重症、危重症患者诊疗建议 v0(手稿)
  4. Android 反编译APK详解
  5. VSCode如何去掉Monokai主题下的绿色下划线
  6. php正则匹配是否为url地址,php正则匹配网址-正则php-php正则匹配url地址
  7. MemSQL 的安装和简单使用 比Mysql快30倍的关系型数据库
  8. R--ggplot包的学习(3)
  9. php安装失败,phpcms安装失败怎么办
  10. 《曹云社》走进东软:奇妙的HR数字化