Andrew Ng-ML-第十六章-异常检测

1.问题动机

图1.飞机发动机检测例子

对飞机引擎的例子,如果选取了两个特征x1热量产生度,x2震动强度。并得到如下的图,如果有一个新的引擎来检测其是否正常,x_test,那么此时如果点落在和其他点正常内,那么就显示是正常,不需要进一步的检测,但是如果在右下角绿色的,那么就是异常的,需要进一步地检测。

图1.密度检测

更一般地建立模型,当x_test输入时,若概率<阈值ε,那么就被设置为异常;否则设置为正常。如图来看,中心部分的概率大,四周部分概率小。

图2.异常检测的应用

异常检测最常见的应用是进行,用户欺诈检测,对用户的模型作为向量,从数据中建立模型,异常用户为:p(x)<ε。还有在工业生产,检测计算机中心。

2.高斯分布/正态分布

其中μ是均值,σ是方差,可以使用公式来计算。曲线特点:当σ越小时,曲线越瘦高;当σ越大时,曲线越胖矮。并且根据概率的性质,曲线下方面积为1。

3.算法

图3.密度估计问题

对一个无标记的训练集来说,建立的模型为如上式,是一个独立假设问题,假设x_i均服从正态分布并且使独立的,那么p(x)就是这个密度估计模型,写成了阶乘的形式。(也是符合高斯分布的,当其处于均值附近,那么p就对应比较大,是符合刚刚讲的检测结果,如果p(x)<σ,那么就是异常的,不符合大部分点的分布。)

图4.异常检测算法

这就是所谓的异常检测算法,不就是求训练集的高斯分布参数,有新的样本来时,观察其是否分布在均值附近了。最终结果,如果p(x)<σ,那么就是异常的。

注意:这里不是对一个向量x,而是针对向量中每个分量,即每个特征值!,都有那么一个高斯分布,并且整个样本的决定是通过连乘。

4.开发和评估异常检测系统

图5.数值评估的重要性

当进行一个学习算法时,当有一个方法来进行评估,那么此时是更容易决策的。

假设现在有一些标记数据,y=1表示是异常的,在训练集中假设全都是正常样本,不包括异常样本,并且有验证集和训练集。

图6.发动机引擎例子

假设数据集一共包括10000个正常引擎数据和20个一场引擎数据,好的数据集分法是:

训练集中有6000个正常引擎数据,交叉验证集中2000个正常,10个异常,测试集中2000个正常,10个异常。通常交叉验证机和测试集的数据是不一样的,也不应该是一样的。

下一种分法是不好的分法,但通常有人这么做,就是将交叉验证集和测试集中的数据完全一样,这是不可取的。

图7.算法评估

通过在训练集上训练出模型,当p(x)<ε时被判断为异常点,反正则正常;

那么如何去评估这个算法呢?由于这个问题数据集明显是偏斜的,所以使用以下:

查准率和查全率,F_1公式;

或者也可以使用在交叉验证集上设置阈值ε来计算,这个和公式判断异常或正常中的ε是相同的。通过设置很多ε,并且在交叉验证集上测试,并选取一个让F_1公式最高的ε。(并且使用这个来决策,也可以决定哪个特征应该被选择,哪个不被选择。)

5.异常检测VS监督学习

那么既然对于有标签的数据,为什么使用异常检测而不是直接训练一个监督学习的模型呢?

图8.异常检测与监督学习

异常检测的数据集特征:通常都是负例,只有很少的部分是正例(0-20是比较常见的)。

有很多种不同类型的异常,并且很难从正例中去找出算法来学习其特征(比如飞机发动机引擎出故障的原因),并且下次出现的异常很有可能从来没见过。

 监督学习的数据集特征:有大量的正例和负例。

能够有足够多的正例去让算法获取特征,将来出来的样例可能和之前在训练集中出现的类似。

比如对于垃圾邮件分类,虽然很有可能下一次出现的并不和之前训练集中相同,但是因为可以获取足够多的垃圾邮件的数据,所以通常使用监督学习的方法来进行垃圾邮件分类。

图9.问题应用

对于异常检测:缺陷检测、工业生产、数据中心监督机器。(关键点是这些缺陷点的数据够不够多,比如在工业生产中,如果缺陷数据够多,那么也可也建立监督模型。)

监督学习:垃圾邮件分类、天气预测、癌症分类。

原文地址:https://www.cnblogs.com/BlueBlueSea/p/9460621.html

时间: 2024-10-25 20:15:28

Andrew Ng-ML-第十六章-异常检测的相关文章

斯坦福大学Andrew Ng - 机器学习笔记(7) -- 异常检测

大概用了一个月,Andrew Ng老师的机器学习视频断断续续看完了,以下是个人学习笔记,入门级别,权当总结.笔记难免有遗漏和误解,欢迎讨论. 鸣谢:中国海洋大学黄海广博士提供课程视频和个人笔记,在此深表感谢!

机器学习(ML)十六之目标检测基础

目标检测和边界框 在图像分类任务里,我们假设图像里只有一个主体目标,并关注如何识别该目标的类别.然而,很多时候图像里有多个我们感兴趣的目标,我们不仅想知道它们的类别,还想得到它们在图像中的具体位置.在计算机视觉里,我们将这类任务称为目标检测(object detection)或物体检测. 目标检测在多个领域中被广泛使用.例如,在无人驾驶里,我们需要通过识别拍摄到的视频图像里的车辆.行人.道路和障碍的位置来规划行进线路.机器人也常通过该任务来检测感兴趣的目标.安防领域则需要检测异常目标,如歹徒或者

【.NET Core项目实战-统一认证平台】第十六章 网关篇-Ocelot集成RPC服务

原文:[.NET Core项目实战-统一认证平台]第十六章 网关篇-Ocelot集成RPC服务 [.NET Core项目实战-统一认证平台]开篇及目录索引 一.什么是RPC RPC是"远程调用(Remote Procedure Call)"的一个名称的缩写,并不是任何规范化的协议,也不是大众都认知的协议标准,我们更多时候使用时都是创建的自定义化(例如Socket,Netty)的消息方式进行调用,相比http协议,我们省掉了不少http中无用的消息内容.因此很多系统内部调用仍然采用自定义

20190902 On Java8 第十六章 代码校验

第十六章 代码校验 你永远不能保证你的代码是正确的,你只能证明它是错的. 测试 测试覆盖率的幻觉 测试覆盖率,同样也称为代码覆盖率,度量代码的测试百分比.百分比越高,测试的覆盖率越大. 当分析一个未知的代码库时,测试覆盖率作为一个粗略的度量是有用的.如果覆盖率工具报告的值特别低(比如,少于百分之40),则说明覆盖不够充分.然而,一个非常高的值也同样值得怀疑,这表明对编程领域了解不足的人迫使团队做出了武断的决定.覆盖工具的最佳用途是发现代码库中未测试的部分.但是,不要依赖覆盖率来得到测试质量的任何

第三十六章

将欲翕之,必姑张之:将欲弱之,必姑强之:将欲去之,必姑与之:将欲夺之,必姑予之.是谓微明.柔弱胜强.鱼不可脱于渊,邦利器不可以示人. 第三十六章1 想摆脱失眠?So easy! 将欲翕之,必姑张之 (第三十六章 第1讲) 姑:姑且,先. 上天想要把一件事情关上,就必先把它张开. 我们要懂得天地间阴阳变化的原理,顺着事物发展的原理去走.夜晚要想睡个好觉,白天就要打起精神做事. 各位朋友大家好,今天我们接着来聊<道德经>,看看老子又带给我们什么样的人生启发.今天,我们聊到了第三十六章,这是新的一章

C Primer Plus (第五版) 第十六章 C预处理器和C库 编程练习

第十六章 C预处理器和C库 开发一个包含您需要使用的预处理器定义的头文件 //max.h  #ifndef _MAX_H_     #define _MAX_H_     #define MAX(X, Y) ((X)>(Y)?(X):(Y)) #endif 2.两个数的调和平均数可用如下方法得到:首先对两数的倒数取平均值,最后再取倒数.使用#define指令定义一个宏"函数"执行这个运算.编写一个简单的程序测试该宏. #include <stdio.h> #defin

CSS3秘笈复习:十三章&amp;十四章&amp;十五章&amp;十六章&amp;十七章

第十三章 1.在使用浮动时,源代码的顺序非常重要.浮动元素的HTML必须处在要包围它的元素的HTML之前. 2.清楚浮动: (1).在外围div的底部添加一个清除元素:clear属性可以防止元素包围浮动元素.关键字:left.right或both. (2).浮动外围元素:让包含浮动元素的<div>也浮动.选择这种方法一定要在浮动容器后面的任何元素中添加一个clear属性,确保浮动元素落到容器的下方. (3).利用overflow : hidden.另一种常见的方法是在外围的样式中添加以下属性:

第十六章 多态性

相同函数名具有多态性: ①  译时的多态(由函数名来调用时体现):重载:同类,不同参 ②  运行时的多态(用指向不同类的指针来调用): 覆盖:  不同类,同参,基类有virtual(由指针的类型来决定,体现了多态性) 隐藏:①不同类,同参,基类无virtual②不同类,不同参(不论有无virtual)(由指针来决定,不能体现多态性) 1.  为什么要使用多重继承 多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数.C++多态性是通过虚函数(virtual)来实现的. 2.

《Java并发编程实战》第十六章 Java内存模型 读书笔记

Java内存模型是保障多线程安全的根基,这里仅仅是认识型的理解总结并未深入研究. 一.什么是内存模型,为什么需要它 Java内存模型(Java Memory Model)并发相关的安全发布,同步策略的规范.一致性等都来自于JMM. 1 平台的内存模型 在架构定义的内存模型中将告诉应用程序可以从内存系统中获得怎样的保证,此外还定义了一些特殊的指令(称为内存栅栏或栅栏),当需要共享数据时,这些指令就能实现额外的存储协调保证. JVM通过在适当的位置上插入内存栅栏来屏蔽在JVM与底层平台内存模型之间的