头部和腹部胎儿心电图的异常检测—使用生成对抗网络进行物联网异常检测的案例研究
头部和腹部胎儿心电图的异常检测—使用生成对抗网络进行物联网异常检测的案例研究
通过季节性指标的变分自动编码器进行无监督异常检测
动机
在此博客中,我们讨论了变异自动编码器在检测胎儿ECG信号异常中的作用。
可变自动编码器可以根据定期间隔(即每天/每周/每两周/每月或周期性事件,以分钟/秒的更细粒度)发生的季节性指标准确确定异常的方式,以便于相关团队及时采取行动。这样的及时行动有助于从Web应用程序,零售,IoT,电信和医疗保健领域的严重问题中恢复过来,例如预测性维护。
在确定异常中起重要作用的指标/ KPI由假定为在每个点都是独立的,零均值高斯的噪声组成。实际上,季节性KPI包括具有局部变化的季节性模式以及高斯噪声的统计数据。
物联网/可穿戴设备的作用
便携式低功耗胎儿心电图采集器(如可穿戴设备)已被设计用于研究和分析,并且可以实时采集孕妇腹部心电图信号。ECG数据可以通过蓝牙发送到智能手机客户端,以单独分析从胎儿大脑和孕妇腹部捕获的信号。提取的胎儿ECG信号可用于检测胎儿行为中的任何异常。
变体自动编码器
深度贝叶斯网络 使用黑盒学习模式和神经网络来表达训练数据集中变量之间的关系。变分自动编码器不过是通常在训练和预测中使用的深贝叶斯网络,它使用
神经网络对分布的后验进行建模。
可变自动编码器(VAE)通过对证据下界(ELBO)进行重新参数化来设置可能性的下限,从而支持优化。ELBO方法使用最大化对数似然性的两步过程,似然性尝试使生成的样本(图像/数据)与潜在变量更加相关,这使模型更具确定性。另外,它使后验和先验之间的KL差异最小。
DoNut的特性/架构
甜甜圈识别出 部分异常 x 的正常模式,并找到一个良好的后验以估计x遵循正常模式的程度。甜甜圈的基本特征是通过在异常窗口内重建正常点来增强其找到后代的能力。与从训练数据中排除所有包含异常和缺失点的窗口相反,M-ELBO(改进的ELBOW)将此属性注入其训练属性中,事实证明它是优越的。
因此,总结在Donut体系结构中基于VAE的异常检测算法中采用的三种技术包括:
修改的ELBO – 确保对每个潜在变量或每个潜在变量组平均,最小的信息位数进行编码。这有助于增加信息容量和重建精度。
用于训练的缺失数据注入– 一种数据增强过程,用于将缺失点填充为零。它通过在训练纪元开始之前注入丢失的数据并在纪元完成之后恢复丢失的点来增强ELBO的效果。
MCMC插补可更好地检测异常- 通过综合生成的缺失点改进后验。
甜甜圈的网络结构。灰色节点是随机变量,白色节点是图层。
数据准备阶段根据滑动窗口(关键指标上的长度说(W))处理标准化,缺失值注入和分组数据,其中每个点xt被处理为xt-W +1,...。。。, X。培训过程包括修改的ELBO和丢失数据注入。在最后的预测阶段,将应用MCMC插补(如下图所示)以产生更好的后验分布。
MCMC插补和异常检测
来源 (通过Web应用程序中季节性KPI的可变自动编码器进行无监督异常检测
要了解有关VATE中ELBO的更多信息,请访问
https://medium.com/@hfdtsinghua/ ... in-vae-25ad7991fdf7或参考以下参考资料。
文件导入
import numpy as np from donut import complete_timestamp
加载数据并为其添加时间戳
在这里,我们假设每个数据点以1秒的间隔记录,但给胎儿ECG数据添加了时间戳(尽管数据集来源建议信号以1 Khz记录)。通过平均60次采样,我们进一步以1分钟为间隔对数据进行重新采样。
data_path = '../abdominal-and-direct-fetal-ecg-database-1.0.0/' file_name = 'r10.edf' edf = mne.io.read_raw_edf(data_path+file_name) header = '
一旦数据通过时间戳编制索引,我们就绘制出各个特征并尝试探索季节性模式(如果有)。我们还添加了一个标签特征度量,它通过考虑高水平的脑信号波动(> = .00025和<= -.00025)来表示输入数据中可能存在的潜在异常。我们选择了大脑信号,因为它非常类似于其他四个腹部信号的信号曲线和峰值。
数据标注和绘制特征
因为总共有5个信号(一个来自胎脑,一个来自腹部4个)
df1.rename_axis('timestamp'
使用对抗网络训练数据
df2 = df1.reset_index() df2 = df2.reset_index(drop=True) #drop the index
使用以下默认参数训练模型:
use_regularization_loss = True,max_epoch = 512, batch_size = 256,valid_batch_size = 1024,valid_step_freq = 100,initial_lr = 0.001,optimizer = tf.train.AdamOptimizer,grad_clip_norm = 10.0#根据此规范进行剪辑梯度。
具有可训练参数的模型摘要可通过以下方式获得隐藏层数:
可训练参数(总共24
该模型是从以下代码片段获得的: model = Donut(h_for_p_x = Sequential([K.layers.Dense(50,kernel_regularizer = K.regularizers.l2(0.001),activation = tf.nn.relu)),K.layers .Dense(50,kernel_regularizer = K.regularizers.l2(0.001),激活= tf.nn.relu),]),h_for_q_z = Sequential([K.layers.Dense(50,kernel_regularizer = K.regularizers.l2(0.001) ),激活= tf.nn.relu),K.layers.Dense(50,kernel_regularizer = K.regularizers.l2(0.001),激活= tf.nn.relu),]),x_dims = 120,z_dims = 5, )
该DoNut网络包含使用变数自动编码器(“自动编码变数贝叶斯”,Kingma,DP和Welling),它是一个深贝叶斯网络,具有观测变量x和潜变量z。使用TFSnippet(用于编写和测试张量流模型的库)生成VAE。自动编码器的生成过程与参数z发起先验分布P(Z) ,和一个隐藏的网络H(z)的,然后使用观察到的变量x与分布p(X | H(Z)) 。采用后验推断p(z | x),变分推断技术来训练分离分布q(z | h(x))。
在这里,每个顺序功能创建一个多层感知,具有2个50单位的隐藏层和RELU激活。2个分布“ h_for_p_x ”和“ h_for_q_z ”是使用相同的序列函数创建的(从模型摘要(序列和序列_1)可以看出),它们表示“ p_x_given_z”和“ q_z_given_x”的隐藏网络。
一起或单独绘制异常/非异常
我们将异常(红色)与非异常(绿色)一起绘制,并尝试将它们都叠加在同一张图中,以分析组合的影响。
在Donut预测中,预测分数越高,数据异常越少。我们倾向于选择(-3)作为预测异常点的阈值余量。
我们还计算了离群值和离群值的数量,并将它们与沿x轴的时间戳记值相对应。
plt.figure(figsize=(20
胎儿头部记录的直接心电图异常图
三个连续的图显示彼此相对或分别标记的异常点和非异常点,特别是对于从胎儿头部扫描获得的信号。
孕妇腹部记录的直接心电图异常图
三个连续的图显示彼此相对或分别标记的异常点和非异常点,特别是从胎儿胎儿腹部获得的信号。
=
结论
一些关键。对Doughnut Architecture的了解是:
基于降维的异常检测技术需要使用重构机制来识别方差,从而识别异常。
生成模型的异常检测需要训练正常和异常数据。
不依赖任何比VAE弱的算法进行数据插补,因为这可能会降低性能。
为了快速发现异常,计算每个x窗口中最后一个点的重建概率。
在发现物联网设备异常时,我们还应该探索自动编码器的其他变体(RNN,LSTM,带有注意力网络的LSTM,堆叠卷积双向LSTM)。
完整的源代码位于
https://github.com/sharmi1206/featal-ecg-anomaly-detection

关注 CDA人工智能学院 ,回复“录播”获取更多人工智能精选直播视频!