摘要:在我们的时序异常检测应用中,设计了对时序数据进行多变量高斯(MVN)建模的算法方案进行异常检测,本文对基于tensorflow的两种MVN建模方案进行了总结。

1、基于custom cholesky分解

基于tensorflow keras对多维数据进行多变量高斯(MVN)概率建模是可行的。方法是通过一个编码器网络对输入进行编码,再通过概率层网络将编码向量映射为MVN的均值向量μ和协方差矩阵Σ,并计算样本的概率密度值,通过最大化样本的概率密度(实际是通过最小化概率密度的负对数)可以完成模型的训练。

这里的核心问题是如何保证协方差矩阵Σ的对称正定性。对称性的保证十分简单,只需计算Σ的上三角或下三角矩阵,然后转置相加即可。而正定性的保证则要依赖于cholesky分解,cholesky分解讲的是,一个Hermitian正定阵A可以被分解为一个对角线元素为正实数的下三角阵L与其共轭转置L*的乘积:A=LL*。反之也成立:如果A可以被分解为LL*,那么A是一个Hermitian正定矩阵。在实矩阵的语境下,cholesky分解即,一个对称正定实矩阵可以分解为一个对角线元素全部为正的下三角矩阵及其转置的乘积:A=LLT

基于cholesky分解,在概率层,要将编码向量映射为一个正定对称阵就容易了。只须首先将编码向量映射为一个正定下三角矩阵(只需保证对角线元素非负),然后根据cholesky分解即可得到一个正定对称矩阵。考虑到MVN的形式,实际我们在概率层并不直接将编码向量映射为Σ矩阵,而是将其映射为precision矩阵(Σ的逆),而保证precision矩阵的正定性与保证Σ的正定性是一致的。

以上正是在我们的IoT设备异常检测应用中所设计和采用的算法。

2、基于tensorflow probability

后来通过调研,发现了一个十分强大的概率建模工具:tensorflow probability。tensorflow probability layers的MultivariateNormTril模块就是一个MVN概率建模模块,通过使用该模块,用户无须自己实现复杂的cholesky语义,即可完成MVN建模。

以下是基于MultivariateNormTril建模的一个例子:

tfk = tf.keras
tfkl = tf.keras.layers
tfd = tfp.distributions
tfpl = tfp.layers # Load data.
n = int(1e3)
scale_tril = np.array([[1.6180, 0.],
[-2.7183, 3.1416]]).astype(np.float32)
x = tfd.Normal(loc=0, scale=1).sample([n, 2])
eps = tfd.Normal(loc=0, scale=0.01).sample([n, 2])
y = tf.matmul(x, scale_tril) + eps # Create model.
d = tf.dimension_value(y.shape[-1])
model = tfk.Sequential([
tfkl.Dense(tfpl.MultivariateNormalTriL.params_size(d)),
tfpl.MultivariateNormalTriL(d),
]) # Fit.
model.compile(optimizer=tf.train.AdamOptimizer(learning_rate=0.02),
loss=lambda y, model: -model.log_prob(y),
metrics=[])
batch_size = 100
model.fit(x, y,
batch_size=batch_size,
epochs=500,
steps_per_epoch=n // batch_size,
verbose=True,
shuffle=True)
model.get_weights()[0][:, :2]
# ==> [[ 1.61842895e+00 1.34138885e-04]
# [ -2.71818233e+00 3.14186454e+00]]

多变量高斯(MVN)概率建模的两种方案的更多相关文章

  1. 详解Grunt插件之LiveReload实现页面自动刷新(两种方案)

    http://www.jb51.net/article/70415.htm    含Grunt系列教程 这篇文章主要通过两种方案详解Grunt插件之LiveReload实现页面自动刷新,需要的朋友可以 ...

  2. Linux下实现秒级定时任务的两种方案

    Linux下实现秒级定时任务的两种方案(Crontab 每秒运行): 第一种方案,当然是写一个后台运行的脚本一直循环,然后每次循环sleep一段时间. while true ;do command s ...

  3. [转载]Java操作Excel文件的两种方案

    微软在桌面系统上的成功,令我们不得不大量使用它的办公产品,如:Word,Excel.时至今日,它的源代码仍然不公开已封锁了我们的进一步应用和开发.在我们实际开发企业办公系统的过程中,常常有客户这样子要 ...

  4. .Net Core下使用RabbitMQ比较完备的两种方案(虽然代码有点惨淡,不过我会完善)

    一.前言     上篇说给大家来写C#和Java的方案,最近工作也比较忙,迟到了一些,我先给大家补上C#的方案,另外如果没看我上篇博客的人最好看一下,否则你可能看的云里雾里的,这里我就不进行具体的方案 ...

  5. 比较好用的移动端适配的两种方案及flexible和px2rem-loader在webpack下的配置

    移动端适配,目前自己常用的两种 方案,参考以下两篇好文 方案一:使用lib-flexible包 https://www.w3cplus.com/mobile/lib-flexible-for-html ...

  6. Spring Boot 配置文件密码加密两种方案

    Spring Boot 配置文件密码加密两种方案 jasypt 加解密 jasypt 是一个简单易用的加解密Java库,可以快速集成到 Spring 项目中.可以快速集成到 Spring Boot 项 ...

  7. Git--gitLab远程仓库分支代码回退的两种方案

    事由:作为仓库的master,一时老眼昏花,把同事说的不合并看成了合并,直接合并了. 解决方法: 一.粗鲁的代码回退--直接在远程仓库合并 1. 在gitLab远程仓库中,基于想回退的代码的节点(co ...

  8. kettle 多表全删全插同步数据 两种方案

    背景: 接到上级指示,要从外网某库把数据全部导入到内网,数据每天更新一次即可,大约几百万条数据,两个库结构一样,mysql的,两台数据库所在服务器都是windows server的,写个java接口实 ...

  9. C#将Word转换成PDF方法总结(基于Office和WPS两种方案)

    有时候,我们需要在线上预览word文档,当然我们可以用NPOI抽出Word中的文字和表格,然后显示到网页上面,但是这样会丢失掉Word中原有的格式和图片.一个比较好的办法就是将word转换成pdf,然 ...

随机推荐

  1. Mysql将查询结果某个字段以逗号分隔,使用group_concat函数可以实现(配合group by使用)

    示例:SELECT Id, GROUP_CONCAT(Name SEPARATOR ',') Names FROM some_table GROUP BY id

  2. Servlet原理解析&使用指南

    Servlet(Server Applet)全称Java Servlet,是用Java编写的服务器端程序.广义上指任何实现了Server接口的类,主要功能在于交互式地浏览和生成数据,生成动态Web内容 ...

  3. LAMP环境搭建与配置

    下载mysql 解压 运行错误 下载插件 启动成功 安装Apache 解压 报错  安装插件 再次报错 修改文档 成功 安装插件 下载 安装php 安装完成 解析php 安装完成 虚拟主机(共享主机, ...

  4. 【odoo14】第二十三章、管理邮件

    邮件集成是odoo最重要的特性.我们可以通过odoo收发邮件.我们甚至可以管理业务文档上的电子邮件,如潜在客户.销售订单和项目.本章,我们将探讨在odoo中处理邮件的方式. 配置邮件服务器 管理文档中 ...

  5. 【DB宝45】MySQL高可用之MGR+Consul架构部署

    目录 一.MGR+Consul架构简介 二.搭建MGR 2.1.申请3台MGR机器 2.2.3台主机安装MySQL环境 2.3.修改MySQL参数 2.4.重启MySQL环境 2.5.安装MGR插件( ...

  6. java例题_44 一个偶数总能表示为两个素数之和

    1 /*44 [程序 44 偶数的素数和] 2 题目:一个偶数总能表示为两个素数之和. 3 */ 4 5 /*分析 6 * 1.从键盘得到一个偶数(大于2的偶数,因为1不是素数) 7 * 2.用for ...

  7. 无法打开“×××”,因为无法确认开发者的身份——解决办法

    当打开这些应用程序时,系统提示无法打开" XXX",因为它来自身份不明的开发者.我们可以按照下面的方法解决. 教程 1.打开应用程序,找到你要打开的软件.按住control键,点击 ...

  8. python基础(十七):函数

    在正式讲述函数之前,先给大家说明一点:编写函数就是"面向过程"的方式,编写类就是"面向对象"的方式.你如果不知道这是啥意思,至少别人提到这2个词你应该知道是在干 ...

  9. Dynamics CRM分享记录后出现关联记录被共享的问题

    Dynamics CRM的权限配置有许多的问题,其中分享功能也是未来解决标准功能分配的权限不满足需求而设计的.但是这个功能使用的时候也要注意,否则会出现其他记录被共享的问题导致数据泄露可能会对项目的安 ...

  10. 迷宫问题(BFS)

    给定一个n* m大小的迷宫,其中* 代表不可通过的墙壁,而"."代表平地,S表示起点,T代表终点.移动过程中,如果当前位置是(x, y)(下标从0开始),且每次只能前往上下左右.( ...