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

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

利用联合概率分布~

联合概率分布

$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. 解决sendmail发送邮件慢的问题

    sendmail默认会先监听本机的邮件服务,如果本机邮件服务访问不了,在访问其他的邮件服务器 自己测试将本机主机名(通过hostname命令查看)从/etc/hosts中删除,发送邮件的速度就非常快了 ...

  2. C++走向远洋——42(项目二,我的数组类,深复制,构造函数)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  3. MVC07

    1. 讲解ASP.net MVC的I/O操作 新建一个控制台程序,输入代码如下 using System; using System.IO; namespace IO { class Program ...

  4. 前端面试题-url、href、src

    一.URL的概念 统一资源定位符(或称统一资源定位器/定位地址.URL地址等,英语:Uniform Resource Locator,常缩写为URL),有时也被俗称为网页地址(网址).如同在网络上的门 ...

  5. JAVA基础之IO流知识总结

    一.IO流体系图 IO常用的几个流: [I/O流原理作用] Input/Output:输入输出机制 输入机制:允许java程序获取外部设备的数据(磁盘,光盘,网络等). 输出机制:保留java程序中的 ...

  6. MyBatis 源码分析-项目总览

    MyBatis 源码分析-项目总览 1.概述 本文主要大致介绍一下MyBatis的项目结构.引用参考资料<MyBatis技术内幕> 此外,https://mybatis.org/mybat ...

  7. OpenGL 实现视频编辑中的转场效果

    转场介绍 转场效果是什么? 转场效果,简单来说就是两段视频之间的衔接过渡效果. 现在拍摄 vlog 的玩家越来越多,要是视频没有一两个炫酷的转场效果,都不好意思拿出来炫酷了. 那么如何在视频编辑软件中 ...

  8. Azure CLI 简单入门

    Azure CLI 是什么 Azure 命令行接口 (CLI) 是用于管理 Azure 资源的 Microsoft 跨平台命令行体验. Azure CLI 易于学习,是构建适用于 Azure 资源的自 ...

  9. python学习基础知识

    学习python前最好知道的知识点: python之父:Guido van Rossum python是一种面向对象语言 目前python最新的版本是3.8,python2已经逐渐淘汰 python的 ...

  10. Latex数学符号对应表

    1. 希腊字母 字母 实现 字母 实现 $\alpha$ \alpha $\Alpha$ \Alpha $\beta$ \beta $\Beta$ \Beta $\gamma$ \gamma $\Ga ...