Anomaly Detection-异常检测算法(Coursera-Ng-ML课程)
现实生活中有许多需要提前预防一些异常问题出现的情况,例如在飞机起飞前,对飞机各部分进行评估,看发动机等各个零件是否性能正常,若有潜在的问题(可能出现异常情况),则需要及时检修或更换。
那么我们如何去评估异常是否存在呢?
利用联合概率分布~
联合概率分布
$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课程)的更多相关文章
- 异常检测(Anomaly detection): 异常检测算法(应用高斯分布)
估计P(x)的分布--密度估计 我们有m个样本,每个样本有n个特征值,每个特征都分别服从不同的高斯分布,上图中的公式是在假设每个特征都独立的情况下,实际无论每个特征是否独立,这个公式的效果都不错.连乘 ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 15—Anomaly Detection异常检测
Lecture 15 Anomaly Detection 异常检测 15.1 异常检测问题的动机 Problem Motivation 异常检测(Anomaly detection)问题是机器学习算法 ...
- 从时序异常检测(Time series anomaly detection algorithm)算法原理讨论到时序异常检测应用的思考
1. 主要观点总结 0x1:什么场景下应用时序算法有效 历史数据可以被用来预测未来数据,对于一些周期性或者趋势性较强的时间序列领域问题,时序分解和时序预测算法可以发挥较好的作用,例如: 四季与天气的关 ...
- 机器学习:异常检测算法Seasonal Hybrid ESD及R语言实现
Twritters的异常检测算法(Anomaly Detection)做的比较好,Seasonal Hybrid ESD算法是先用STL把序列分解,考察残差项.假定这一项符合正态分布,然后就可以用Ge ...
- Machine Learning - XV. Anomaly Detection异常检測 (Week 9)
http://blog.csdn.net/pipisorry/article/details/44783647 机器学习Machine Learning - Andrew NG courses学习笔记 ...
- kaggle信用卡欺诈看异常检测算法——无监督的方法包括: 基于统计的技术,如BACON *离群检测 多变量异常值检测 基于聚类的技术;监督方法: 神经网络 SVM 逻辑回归
使用google翻译自:https://software.seek.intel.com/dealing-with-outliers 数据分析中的一项具有挑战性但非常重要的任务是处理异常值.我们通常将异 ...
- 异常检测算法:Isolation Forest
iForest (Isolation Forest)是由Liu et al. [1] 提出来的基于二叉树的ensemble异常检测算法,具有效果好.训练快(线性复杂度)等特点. 1. 前言 iFore ...
- 异常检测算法--Isolation Forest
南大周志华老师在2010年提出一个异常检测算法Isolation Forest,在工业界很实用,算法效果好,时间效率高,能有效处理高维数据和海量数据,这里对这个算法进行简要总结. iTree 提到森林 ...
- 【机器学习】异常检测算法(I)
在给定的数据集,我们假设数据是正常的 ,现在需要知道新给的数据Xtest中不属于该组数据的几率p(X). 异常检测主要用来识别欺骗,例如通过之前的数据来识别新一次的数据是否存在异常,比如根据一个用户以 ...
- 如何开发一个异常检测系统:使用什么特征变量(features)来构建异常检测算法
如何构建与选择异常检测算法中的features 如果我的feature像图1所示的那样的正态分布图的话,我们可以很高兴地将它送入异常检测系统中去构建算法. 如果我的feature像图2那样不是正态分布 ...
随机推荐
- epoll的原理和用法
设想一个场景,有100万用户同时与一个进程保持着TCP连接,而每一时刻只有几十个或几百个TCP连接是活跃的(接收到TCP包)也就是说,在每一时刻进程只需要处理这100万连接中的一小部分连接,那么,如何 ...
- Grafana+Prometheus监控mysql性能
#cmd /usr/local 今天讲一下如何监控服务器中的mysql数据库的性能 一.数据库操作 1.mysql启动 #service mysqld start #启动数据库 #service my ...
- 上周 GitHub 热点速览 vol.09:手撕 LeetCode 一日 star 破两千
作者:HelloGitHub-小鱼干 摘要(用于 公众号/博客园等地方):上周 GitHub 趋势榜相较上上周就如同前故事一般,跌到不行,无论是新晋开源小项,还是坚挺老项目,Star 增长量都不如之前 ...
- Spring Cloud Eureka整合使用和配置
遵循SpringBoot三板斧 服务端 第一步加依赖 <dependency> <groupId>org.springframework.cloud</groupId&g ...
- frp 内网穿透访问内网Web服务
ps:最近想要通过域名(公网)访问或者测试在本地搭建的 web 服务(不想在公网IP服务器上再部署个服务,也不想通过teamview等工具远程卡到爆!), 由于本地机器没有公网 IP,无法将域名解析到 ...
- 深入理解React key
一 react 组件元素的 diff 算法 二 key 的理解 概述 react 中的key 属性,它是一个特殊的属性,它的出现不是给开发者用的(例如你为一个组件设置key之后不能获取组件的这个key ...
- django中ORM中锁和事务
一 锁 行级锁 select_for_update(nowait=False, skip_locked=False) #注意必须用在事务里面,至于如何开启事务,我们看下面的事务一节. 返回一个锁住行直 ...
- guava限流器RateLimiter原理及源码分析
前言 RateLimiter是基于令牌桶算法实现的一个多线程限流器,它可以将请求均匀的进行处理,当然他并不是一个分布式限流器,只是对单机进行限流.它可以应用在定时拉取接口数据, 预防单机过大流量使用. ...
- 5G 将带给程序员哪些新机会呢?
5G,第 5 代移动通信技术,华为在此领域远远领先同行,这也让它成了中美贸易战的最前线.我的第一份工作就在通信行业,当时电信标准都在欧美企业手里,国内企业主要是遵照标准研发软硬件设备,核心芯片靠进口. ...
- Web Scraper 高级用法——利用正则表达式筛选文本信息 | 简易数据分析 17
这是简易数据分析系列的第 17 篇文章. 学习了这么多课,我想大家已经发现了,web scraper 主要是用来爬取文本信息的. 在爬取的过程中,我们经常会遇到一个问题:网页上的数据比较脏,我们只需要 ...