现实生活中有许多需要提前预防一些异常问题出现的情况,例如在飞机起飞前,对飞机各部分进行评估,看发动机等各个零件是否性能正常,若有潜在的问题(可能出现异常情况),则需要及时检修或更换。

那么我们如何去评估异常是否存在呢?

利用联合概率分布~

联合概率分布

$X表示一系列随机变量{X_1,X_2,X_3,....,X_n}的组合,每个随机变量符合服从各自的一种分布。假设各变量是两两相互独立的,那么这些变量的联合概率分布为:

$$P(X)=P(X_1)P(X_2)....*P(X_n)=\Pi P_i$$

即每个随机变量取相应值的概率的乘积。

正态分布

正态分布是一种非常常用的分布函数,其形式如图所示:

图像横轴表示随机变量x的取值,纵轴表示x取相应值的概率(0-1之间)。

该图像的函数形式(概率密度函数)为:

$$y=P(x)=\frac{1}{2\pi\sigma}*exp(-\frac{x-\mu}{2\sigma^2})$$

$\mu$为x分布的均值,$\sigma$为x分布的标准差。整个函数图像是关于x=$\mu$对称的,且整个函数图像针对整个横轴的积分为1.(概率密度函数都有此特性,代表x的值必然落在概率密度函数定义域的某一点上)

根据图像我们可以很清楚地看到,x的值为均值附近的值的概率非常大,而离均值越远的值出现的概率则越小。

并且针对正态分布,有一个非常有名的2-$\sigma$特性,即:

区间 函数图像与横轴在区间的积分/面积
[μ-σ,μ+σ] 0.683
[μ-2σ,μ+2σ] 0.954
[μ-3σ,μ+3σ] 0.997

为了让下面的内容更好理解,这里先提示一下:针对正态分布,我们可以将x取距离均值较劲的情况视作正常情况,因为概率很大,而取值离均值很远的情况视为"异常"情况,因为概率很小。而我们检测异常的算法就是由这种思路而来。

异常检测模型训练

那么怎么检测异常呢?

我们首先这样想:什么时候异常最可能出现?是不是应该是在一些比较罕见的情况出现的时候,异常最可能出现。(“比较罕见的情况”在某些其它语境下本身也可以理解为“异常”的意思,但在这里,仅仅指除了我们所关注的目标异常之外的异常状况)。

例如你想知道一台电脑是不是坏了,那么你就观察该电脑是否有和一般电脑不一样的地方,你可能发现它经常运行卡顿(罕见情况1),并且发现它开机特别慢(罕见情况2),那么很大情况下,你就可以判断这台电脑应该有问题。

而体现在异常检测算法里,这些罕见情况就类比为了一个个特征的分布上距离均值比较远的取值出现。

首先假设我们选取了可能可以用于评估一台电脑是否正常工作的一些特征,比如打开一个大型程序所需要花的时间($X_1=20s$)和开机时间($X_2=50s$)这两个特征,然后我们需要搜集一系列已知为正常电脑的相关数据,得到正常电脑在“打开程序耗时”与“开机时间”这两个特征上的值的分布情况,如下表所示:

样本编号 打开程序耗时 开机时间
1 8s 20s
2 11s 15s
3 19s 37s
4 15s 26s
5 17s 12s

那么根据这些搜集到的样本值,我们可以通过对它们求平均获得“打开程序耗时”的平均值$\mu_1=(8+11+19+15+17)/5=14$以及“开机时间”的平均值$\mu_2=(20+15+37+26+12)/5=22$,以及分别求得两特征的标准差$\sigma_1=4$与$\sigma_2=8.87$。计算公式为:

$$\mu=\frac{\Sigma_{i=1}^{n}t_i }{n} \

\sigma2=\frac{\Sigma_{i=1}{n}(t_i-\mu)^2}{n}$$

那么此时,假设两个特征的分布均为正态分布,我们将利用搜集到的样本值计算出的均值$\mu_1,\sigma_1$和$\mu_2,\sigma_2$分别作为两个特征的正太分布函数的参数,然后利用联合概率分布的原理,求得当一台电脑“打开程序耗时”为20s,“开机时间”为50s的联合概率:

$$P(X_1=20,X_2=50)=P(X_1=20)P(X_2=50)=\ [\frac{1}{2\pi4}exp(-\frac{20-14}{2(22)2})]*[\frac{1}{2\pi*8.87}*exp(-\frac{50-22}{2*(8.87)2})]=0.00059755$$

结果是0.0006左右,即0.6%的概率,是一个非常小的概率值了,这个值的含义为:一台正常电脑同时表现为“打开程序耗时”为20s,“开机时间”为50s的可能性是0.6%。

那么,我们基本可以判断:该电脑肯定是有问题的(异常情况)。

这里有两个要注意的问题:

1.为什么我们可以把特征的分布值假设为正态分布?

  • 这个要根据特征取值的特性来决定。特征的取值有离散值和连续值两种,离散值的分布有泊松分布、伯努利分布,连续值的分布有均匀分布、正态分布、卡方分布等。而之所以我们会将以上例子的两个特征值都假设为正态分布,是因为现实情况中绝大多数连续值变量的分布都接近或就是正态分布,并且实验也证明,这样假设的模型效果一般都不错。

2.为什么可以假设两个特征是相互独立的?

  • 这个其实也是一个依赖经验的做法。现实情况下,某些特征很有可能其实是相互关联的,比如如果一个电脑开机时间很慢,很可能是它有太多的开机运行程序在后台运行,那么在它之后打开程序时,自然会需要更多时间,那么这两个特征其实是关联的,并不独立,上述的联合概率的计算公式在这里其实并不理论可行。但是实际当中,我们依然比较简单粗暴地假设为特征互相独立,发现异常检测的效果依然还是很不错的,所以也就不是大问题了。

模型评估

Anomaly Detection-异常检测算法(Coursera-Ng-ML课程)的更多相关文章

  1. 异常检测(Anomaly detection): 异常检测算法(应用高斯分布)

    估计P(x)的分布--密度估计 我们有m个样本,每个样本有n个特征值,每个特征都分别服从不同的高斯分布,上图中的公式是在假设每个特征都独立的情况下,实际无论每个特征是否独立,这个公式的效果都不错.连乘 ...

  2. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 15—Anomaly Detection异常检测

    Lecture 15 Anomaly Detection 异常检测 15.1 异常检测问题的动机 Problem Motivation 异常检测(Anomaly detection)问题是机器学习算法 ...

  3. 从时序异常检测(Time series anomaly detection algorithm)算法原理讨论到时序异常检测应用的思考

    1. 主要观点总结 0x1:什么场景下应用时序算法有效 历史数据可以被用来预测未来数据,对于一些周期性或者趋势性较强的时间序列领域问题,时序分解和时序预测算法可以发挥较好的作用,例如: 四季与天气的关 ...

  4. 机器学习:异常检测算法Seasonal Hybrid ESD及R语言实现

    Twritters的异常检测算法(Anomaly Detection)做的比较好,Seasonal Hybrid ESD算法是先用STL把序列分解,考察残差项.假定这一项符合正态分布,然后就可以用Ge ...

  5. Machine Learning - XV. Anomaly Detection异常检測 (Week 9)

    http://blog.csdn.net/pipisorry/article/details/44783647 机器学习Machine Learning - Andrew NG courses学习笔记 ...

  6. kaggle信用卡欺诈看异常检测算法——无监督的方法包括: 基于统计的技术,如BACON *离群检测 多变量异常值检测 基于聚类的技术;监督方法: 神经网络 SVM 逻辑回归

    使用google翻译自:https://software.seek.intel.com/dealing-with-outliers 数据分析中的一项具有挑战性但非常重要的任务是处理异常值.我们通常将异 ...

  7. 异常检测算法:Isolation Forest

    iForest (Isolation Forest)是由Liu et al. [1] 提出来的基于二叉树的ensemble异常检测算法,具有效果好.训练快(线性复杂度)等特点. 1. 前言 iFore ...

  8. 异常检测算法--Isolation Forest

    南大周志华老师在2010年提出一个异常检测算法Isolation Forest,在工业界很实用,算法效果好,时间效率高,能有效处理高维数据和海量数据,这里对这个算法进行简要总结. iTree 提到森林 ...

  9. 【机器学习】异常检测算法(I)

    在给定的数据集,我们假设数据是正常的 ,现在需要知道新给的数据Xtest中不属于该组数据的几率p(X). 异常检测主要用来识别欺骗,例如通过之前的数据来识别新一次的数据是否存在异常,比如根据一个用户以 ...

  10. 如何开发一个异常检测系统:使用什么特征变量(features)来构建异常检测算法

    如何构建与选择异常检测算法中的features 如果我的feature像图1所示的那样的正态分布图的话,我们可以很高兴地将它送入异常检测系统中去构建算法. 如果我的feature像图2那样不是正态分布 ...

随机推荐

  1. 安卓权威编程指南 挑战练习(第26章 在 Lollipop 设备上使用 JobService)

    26.11 挑战练习:在 Lollipop 设备上使用 JobService 请创建另一个 PollService 实现版本.新的 PollService 应该继承 JobService 并使用 Jo ...

  2. Android下的定时任务

    Android中的定时任务一般有两种实现方式,一种是使用JavaAPI里的Timer类,另一种是使用android的Alarm机制. 这两种方式在多数情况下都能实现类似的效果,但Timer有一个明显的 ...

  3. Tornado 简述

    前言 python 旗下,群英荟萃,豪杰并起.单是用于 web 开发的,就有 webpy.web2py.bottle.pyramid.zope2.flask.tornado.django 等等,不一而 ...

  4. VUE深入浅出(学习过程)

    VUE 2020年02月26日06:27:10 复习过Java8新特性之后开始学习VUE. 了解node了之后,来了解一下VUE.针对于学习VUE用什么开发工具这个问题上,我这里有vsCode和web ...

  5. SpringBoot&Shiro实现权限管理

    SpringBoot&Shiro实现权限管理 引言 相信大家前来看这篇文章的时候,是有SpringBoot和Shiro基础的,所以本文只介绍整合的步骤,如果哪里写的不好,恳请大家能指出错误,谢 ...

  6. 前端每日实战:145# 视频演示如何用纯 CSS 创作一个电源开关控件

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/PdMyJd 可交互视频 此视频是可 ...

  7. http相关知识点回顾

    一.概述 1.什么是HTTP HTTP是一种可以获取HTML这样的网络资源的一种通讯协议protocol.是在WEB上进行数据交换的基础,是一种客户端--服务器协议.HTTP是一种可扩展的应用层协议, ...

  8. vue+express+mysql项目总结(node项目部署阿里云通用)

    原文发布于我的个人博客上:原文点这里   前面经历千辛万苦,终于把博客的所有东西都准备好了,现在就只等部署了.下面我介绍下我的部署过程: 一.购买服务器和域名   如果需要域名(不用域名通过ip也可以 ...

  9. 超详细的HDFS读写流程详解(最容易理解的方式)

    HDFS采用的是master/slaves这种主从的结构模型管理数据,这种结构模型主要由四个部分组成,分别是Client(客户端).Namenode(名称节点).Datanode(数据节点)和Seco ...

  10. seo搜索优化教程13-SEO搜索引擎站点收录

    为了使大家更方便的了解及学习网络营销推广.seo搜索优化,星辉科技强势推出seo搜索优化教程.此为seo教程第13课 想要用户能够在搜索引擎中通过关键词搜索到您的页面信息,首先要做的是让搜索引擎收录您 ...