你睡着了吗?不如起来给你的睡眠分个类吧!

栏目: 数据库 · 发布时间: 5年前

内容简介:本文为 AI 研习社编译的技术博客,原标题 :My Sweet Dreams about Automatic Sleep-Stage Classification

你睡着了吗?不如起来给你的睡眠分个类吧!

本文为 AI 研习社编译的技术博客,原标题 :

My Sweet Dreams about Automatic Sleep-Stage Classification

作者 |  Dindin Meryll

翻译 | RaydonLiu、永恒如新的日常、钰钰要做小太阳              

校对 | 酱番梨        审核 | Pita       整理 | 立鱼王

原文链接:

https://towardsdatascience.com/my-sweet-dreams-about-automatic-sleep-stage-classification-414128441728

你睡着了吗?不如起来给你的睡眠分个类吧!

致谢:有趣的海狸先生

最近的五个月,我花了一些时间来磨练自己的机器学习的技巧,完成的项目来自于一个以提高每个人夜间睡眠质量的法国公司,他们的提出来的一个全新的挑战。我们对睡眠不够重视,现在在我们人口中已经产生了量化的后果。直线下降的表现,注意力缺乏,记忆力紊乱......都是缺乏睡眠时会产生的后果。医学上的解决方案是头上带一个带子,它能在夜晚很活跃地刺激你的脑部,监控你的睡眠,并且提供不同的能让人轻松入睡的项目。如果您非常好奇,想要更深入地研究睡眠在我们生活中真正的重要性,我推荐现在在伯克利加州大学的教授Matthew  Walker的《为什么我们需要睡觉?》。这本书在很多方面都让我很吃惊,给读者提供了很多原则和建议,来理解和提高睡眠,因此也影响到了日常生活。

在我的Github上已经提供了竞赛中使用的所有的代码,读者可以随意检查并且给我反馈。我会详细的解释能够在竞赛中取得第二名的成绩的方法,即使处理这个问题的概率是有限的。读者也可以观察到,这套代码可以被应用到更广阔的与时间相关的问题中去,它主要以可解释性为目标的。最有好奇心的读者,会发现的更多:深度学习框架,自编码器,拓扑数据分析等“复活节彩蛋“,尽情享受吧!

    睡眠

在进入整个机器学习的问题时,我们先花一些时间,来理解我们的背景,以及我们可以用来处理问题时的多模态医学图像资源。现在在教育医学环境测量 工具 的网站上,他们的头带仪器可以定量分析你的脑部活动(六个EEG电极,F7,F8,O1,O2,Fpz,和一个参考电极),你的头部活动,和呼吸(一个 3D 加速器)和一个你的心率(一个血氧计脉冲)。

你睡着了吗?不如起来给你的睡眠分个类吧! Dreem网站

在睡眠过程中, 大脑会在不同的阶段摆动,称之为睡眠阶段(下图所示)。每个阶段都有自己的独有的电学图像模式和特定的脑波。下图涉及随着时间变化的,睡眠阶段变化,称为睡眠时序列图。

你睡着了吗?不如起来给你的睡眠分个类吧!

http://www.macmillanhighered.com/

在过去的十年中,人们一直想通过自动化来取代依靠专科医生手动注释的过程。当我们查阅文献的时候,会发现当下人们正在大肆宣传和这个话题相关的内容,这也正是机器学习研究的内容。

我不会深入的探讨细节,但是每一个阶段都有和我们大脑健康相关的特定功能。精确地标注这些阶段,医疗领域可以更大范围程度上研究病理性和睡眠障碍。更大的(并且是统计学上更加精确的)流行病学研究很有可能感谢鲁棒性很好的数据为基础的研究。最后,人们可能能够提高他们的睡眠通过在日常基础上的真实地度量和监控。这就是DEEM真正想提供的东西。此外,既然公司建议大脑模拟在深度睡眠阶段(3&4),他们必须尽可能精确地检测到delta波,以此来正确地追踪到它们。

    探索数据分析

你睡着了吗?不如起来给你的睡眠分个类吧!

从训练集中提取的真实的数据

Dreem提供了多传感器集成头带中,收集地时间序列地数据。信号是不同频率的,每30秒一段。监督机器学习的问题在于,数据被分割成一个被标注了睡眠阶段的训练集(理论上是睡眠专家标的)和一个测试集。快速地浏览一下标签的比例,我们会发现这是一个比例失调多分类问题。信号分布的极值也突出了一个在数据集中体现的人工产品的问题(基于经典的EEG信号波动是在-500到500微伏假设)。

你睡着了吗?不如起来给你的睡眠分个类吧!

5个深思熟虑后标注阶段的注释的比例

摸索数据,之前意料之外的事情发生了,标签实际上是有序的!它意味着数据是来自于个人的连续数据的集合,这就有了时间性的优势。当然,打开了新的模型构建的领域(GRU,LSTM....)。根据我的理解,Dreem似乎是最近开始使用这些模型(典型的LSTM每30秒一次,30次一组)。但是,由于计算力的限制(深度学习模型在这个领域使用的一般都是“高射炮”)并且我也想模型有 更好的解释性,所以我决定限制我自己使用旧的,鲁棒性很好的方法去做特征工程。

将时序性放在一边,之前观察数据后,我提取了每个人的数据,并且根据长时间的清醒期(标签0),把索引分开。下图展示了提出睡眠时相序列图的典型例子。一旦被提取,这些个体就会集合在一起成为子集,建立一个鲁棒性很好的验证集,能让我的模型有泛化的能力。我最后用了不同长度的88 个子集,这应该高估了实际上每个人的数据(相当于平均睡眠阶段是下面4.5个小时的分割阶段)

你睡着了吗?不如起来给你的睡眠分个类吧!

提取出来的睡眠时相序列图的一个例子

    描述性的特征工程:混沌理论

接下来是有趣的(也是最长的)部分!如何最好地描述用于睡眠阶段分类的脑电图信号?在浏览了这些文献之后,我收集的多个描述性的见解正在酝酿中。结果,每30秒的间隔被转换成1200个特征向量。我不会逐一介绍每个特性(仅仅因为大多数特性都是经典的),而是将重点放在那些为睡眠阶段分类提供最佳性能的特性上。

你睡着了吗?不如起来给你的睡眠分个类吧!

相关特征的重要性(XGBoost的最佳30个特性)

典型地,在上面的图中,我估计了关于XGBoost模型的30个最重要特征的重要性,并将它们与使用LigthGBM、RandomForest和ExtraTrees获得的相对重要性进行了比较。在5倍交叉验证中,XGB模型有最佳的表现。(这里的重要性是5个折叠结果模型的平均值。)

难怪混沌理论最终成为最重要的理论之一。为什么?因为我们试图对波和正在发生的事件进行分类:“低”混沌是针对周期性和可预测事件而言的;而“更高”的混沌对应于通常不可预测的事件(如纺锤波,k -complex,这是特定于某些睡眠阶段的模式)。到目前为止,这些特性在我的许多项目中都非常有用,所以我将保留一些行来介绍这些特性。

李雅普诺夫指数是指无穷小闭合轨迹之间的分离速率(一般距离)。它们量化了动态系统(此处为非平稳EEGs)的可预测性,必须将其视为一个频谱。
赫斯特指数是一种长期依赖的指标,它通过与自相关来量化一个特定时间序列的长期记忆。
分形维数对应于复杂程度的统计指标,该指标描述了模式中的细节如何随测量尺度的变化而变化。

你睡着了吗?不如起来给你的睡眠分个类吧! 来源:PyEEG

这些都是奇怪的特征。我还使用了拟合的自回归模型的系数、EEGs之间的距离、分解为Debauchies小波、趋势残差分解和光谱图来发现频率相关性(因为每个波模式[alpha、delta、theta波]都有特定的和显著的频率)。这为我进入模型构建的过程提供了基础。

    水平结构和堆叠

现在特征工程和数据预处理已经完成了。我能够区分一些个体的子集来构建我的训练集和验证集。为了构建每一个模型,我用了5折交叉验证法(也就是说,我将特定个体子集进行更进一步的泛化)。

最后,为了得到最终的预测结果,我考虑了以下两点:基于噪声水平的差异化以及通过堆叠进行的聚合。

你睡着了吗?不如起来给你的睡眠分个类吧!

前一百个样例的覆盖率示例

一般来讲,统计模型存在噪声。我提出的方法是根据特定的指标来构建的训练集的子集和测试集。 通常为了对“噪声水平”做一个定义,我们对每一个EEG信号设计了三个特征:最大值、最小值和曲线下面积。通过居中相关的三个分布(通过中间值),我可以我们朴素的定义了一个噪声水平作为对应的衡量实际标准差的一个距离比例。这个方法使我能够定义5级噪声水平,如上图中所示表示覆盖级别。如果一个信号没有出现多个噪声水平上,则其很可能包含伪影。这些限制表示的是5个不同的训练阶段,分别代表每一个子集。然而,由于考虑到多样的输出这些就给我很大的自信。最后,通过迭代用更加精准的预测值来覆盖自己原来的预测。

一旦这5个水平被分离,我训练了四个不同的模型(在前面特征工程步骤的时候提到过):XGBoost, LightGBM, RandomForest,和ExtraTrees.这些模型的超参都是用我自己的设计的超高频带来调整。优化的指标是kappa得分(可以理解为协议间指标),来作为这一领域的基准测试。

你睡着了吗?不如起来给你的睡眠分个类吧!

Kappa得分的定义

你睡着了吗?不如起来给你的睡眠分个类吧!

5级噪声的交叉验证分数(验证集的Kappa分数)

在每个交叉验证集上,这四个模型都给出了训练集、验证集、测试集样本的概率。此外,还重视数据不均衡的数据并且在训练和评分阶段通过权值来加以限制。

你睡着了吗?不如起来给你的睡眠分个类吧!

来源: No Free Hunch

结果是,我得出这四个模型的概率这导致了我用了叠加的设计。这个方法是受到在结果中多样性驱动的而提出的,如下面模型之间的预测相关性所示。上图所示的基本方法主要包括将概率作为特征并且将其作为训练集、验证集、测试集。在这个例子中,我使用一个线性模型(随机梯度下降),并通过基于个体交叉验证优化了Kappa 度量。

你睡着了吗?不如起来给你的睡眠分个类吧!

模型概率与实际睡眠阶段之间的相关性

你睡着了吗?不如起来给你的睡眠分个类吧!

四个模型的混淆矩阵(5级噪声)

我们来看一下关系矩阵:因为(XGBoost,LightGBM)和(RandomForest, ExtraTrees)都为相似的结构,从直觉上来看他们的预测是高度相关的。然而,有两点值得我们注意的:

  • 类别1(第一阶段作为少数类)是最难预测的,同时他在boost trees之间几乎没有显示相关性;

  • 类别3(第3、4阶段)是最容易预测的(那个对于δ波的刺激来说是个好事)。进一步的分析显示类别1通常会和类别4(REM睡眠)相混淆,因为考虑到脑电信号的范围和形状的相似性所以这是可以预料到的。

    输出平滑

根据前面的结果,我的方法有优点也有缺点。它有两个特别的弱点:该模型没有考虑样本之间的时间关系,而且在预测睡眠阶段1时存在困难。第一阶段只是一个过渡阶段,从清醒状态到真正的睡眠阶段。我的目标是通过在之前的模型上构建一个过滤器来改进它。我首先考虑的是经典的输出平滑,就像带通(保持高频微唤醒和持续睡眠阶段)或平均法(例如Savitsky Golay)一样。然后我转向隐马尔可夫模型,因为这正是我要寻找的:过渡矩阵。然而,最好的结果来自于它的近似值,通过基于20个时间步长的过拟合LSTM。LSTM基于输出概率(我为火车和测试集收集的概率),并考虑了时间关系。用它我可以构建一个过渡矩阵(就像HMM一样),除了连续输入(概率)。

你睡着了吗?不如起来给你的睡眠分个类吧!

最后,我改善了睡眠阶段的连续性,保留了微唤醒事件,强调了过渡阶段1的重要性。

  动脑思考下

这就是我在比赛中所做的部分工作。很多东西都可以改进,而且可能性是无限的。最终我取得了第二名的成绩,在private test set上最终的kappa得分为70.7。正如预期的那样,使用的策略并没有完全避免过度拟合,在我的internal score和leaderboard score之间发现了明显的差距。在这样的医疗背景下,涉及到个人不可挽回地引发了协变量转移的问题。这个问题一直存在,但我的研究结果显示出了很大的泛化潜力。
我感谢我的爱人对马修·沃克的书提出的建议!类似的项目还有很多!请继续关注即将到来的文章,如果您想要更多,请给我点赞!)

你睡着了吗?不如起来给你的睡眠分个类吧!

资源

  • Github库

  • 网站的竞争

  • Dreem网站

想要继续查看该篇文章相关链接和参考文献?

长按链接点击打开或点击【 你睡着了吗?不如起来给你的睡眠分个类吧! 】:

https://ai.yanxishe.com/page/TextTranslation/1444

AI研习社每日更新精彩内容,观看更多精彩内容: 雷锋网 (公众号:雷锋网) 雷锋网雷锋网

CVPR 2018 最牛逼的十篇论文

深度学习目标检测算法综述

迷你自动驾驶汽车深度学习特征映射的可视化

在2018年用“笨办法”学数据科学体会分享

等你来译:

如何在神经NLP处理中引用语义结构 

(Python)用Mask R-CNN检测空闲车位

高级DQNs:利用深度强化学习玩吃豆人游戏

深度强化学习新趋势:谷歌如何把好奇心引入强化学习智能体 


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Spark技术内幕

Spark技术内幕

张安站 / 机械工业出版社 / 2015-9-1

Spark是不断壮大的大数据分析解决方案家族中备受关注的新增成员。它不仅为分布式数据集的处理提供一个有效框架,而且以高效的方式处理分布式数据集。它支持实时处理、流处理和批处理,提供了AllinOne的统一解决方案,使得Spark极具竞争力。 本书以源码为基础,深入分析Spark内核的设计理念和架构实现,系统讲解各个核心模块的实现,为性能调优、二次开发和系统运维提供理论支持;本文最后以项目实战......一起来看看 《Spark技术内幕》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

html转js在线工具
html转js在线工具

html转js在线工具