Lecture 15 Anomaly Detection 异常检测

15.1 异常检测问题的动机 Problem Motivation

异常检测(Anomaly detection)问题是机器学习算法的一个常见应用。这种算法虽然主要用于无监督学习问题,但从某些角度看,它又类似于一些监督学习问题。
举例: 当飞机引擎从生产线上流出时需要进行QA(质量控制测试),数据集包含引擎的一些特征变量,比如运转时产生的热量,或者振动等。当有一个新的飞机引擎从生产线上流出,它具有特征变量 xtest 。异常检测问题就是:希望知道这个新的飞机引擎是否有某种异常。如下图:

训练出的模型,需要能够根据 xtest 的位置告诉我们其属于一组数据的可能性 p(xtest)。

在上图中,蓝色圈内的数据属于该组数据的可能性较高;而越偏远,属于该组数据的可能性就越低。 这种方法称为密度估计,表达如下:

常见的异常检测问题如下:

例1:欺诈检测,通过 p(x) < ε 检测非正常用户。例如在线采集而来的有关用户的数据,一个特征向量中可能会包含如:用户多久登录一次,访问过的页面,在论坛发布的帖子数量,甚至是打字速度等。根据这些特征构建一个模型,可以用来识别不符合该模式的用户。
例2:检测一个数据中心,特征可能包含:内存使用情况,被访问的磁盘数量,CPU 的负载,网络的通信量等。根据这些特征构建模型,用来判断某些计算机是否可能出错了。

15.2 高斯分布 Gaussian Distribution

高斯分布,也称为正态分布。

通常如果变量 x 符合高斯分布 x∼N(μ, σ2 ) 则其概率密度函数为 :

高斯分布样例如下图(其中 μ 决定中心点的位置, σ2 决定曲线的高度):

通过已有数据集 x ,可以预测总体的均值 μ 和方差 σ2 ,计算方法如下:

注:机器学习中对于方差通常除以 m,而统计学中会除以(m − 1)。这两个公式在理论和数学特性上稍有不同,但在实际使用中的区别几乎可以忽略不计。

15.3 异常检测算法 Algorithm

1 密度估计

现在我们应用高斯分布开发异常检测算法。 对于给定的数据集 x ,针对每一个特征计算均值 μ 和方差 σ2 的估计值。然后,当出现一个新的训练实例,可以根据模型计算其对应的 p(x),这个过程也叫做密度估计(Density estimation),公式如下:

(注:每个特征 xi 都对应不同的高斯分布)

当p(x) < ε时,判断为异常。

2 异常检测算法

3 举例

下图中的 2D 图形是一个具有两个特征的训练集及其两个特征的分布情况,3D 图形表示密度估计函数,z轴为根据两个特征对xtest估计出的p(x)值。

我们选择一个 ε=0.02,将p(x) = ε作为决策边界,当p(x) > ε时预测为正常数据,否则为异常。

15.4 开发和评价一个异常检测系统

1 划分数据

异常检测算法是一个无监督学习算法。但事实上,如果我们拥有一些带标记的数据,为了检验算法是否有效。可以在最开始将其看作一个监督学习算法。将已有数据分开,从中选择一部分正常数据作为训练集,剩下的正常数据和异常数据混合构成交叉检验集和测试集。

2 举例

有 10000 台正常引擎的数据,有 20 台异常引擎的数据。 我们这样分配数据:

6000 台正常引擎的数据作为Training set;
2000 台正常引擎和 10 台异常引擎的数据作为CV set
2000 台正常引擎和 10 台异常引擎的数据作为Test set

还有一些人把同样一组数据既用作CV集,也用作Test集。Andrew不推荐这样做。

3 具体的算法评价方法

1) 根据测试集数据,估计特征的平均值和方差并构建p(x)函数
2) 对CV set,尝试使用不同的 ε 值作为阈值,并预测数据是否异常,根据 F1 值或者查准率与查全率的比例来选择 ε
3) 选出 ε 后,针对Test集进行预测,计算异常检验系统的F1值,或者查准率与查全率之比

15.5 异常检测与监督学习对比 Anomaly Detection vs. Supervised Learning

之前构建的异常检测系统也使用了带标记的数据,与监督学习有些相似。下面对异常检测和监督学习进行对比:

15.6 选择特征 Choosing What Features to Use

1 特征转换

特征的选择对异常检测算法至关重要。假设特征不符合高斯分布,算法也能够工作,但最好还是将数据转换成高斯分布,例如: 使用对数函数 x = log(x + c),其中 c为非负常数; 或者 x = xc ,c为 0-1 之间的一个分数。
(注:在 python 中,通常用 np.log1p() 函数,即 log(x + 1),可以避免出现负数结果,反向函数就是 np.expm1())

2 误差分析

一些异常的数据可能也会有较高的p(x)值,因而被算法认为是正常的。 可以使用误差分析帮我们分析是否存在问题。也许从问题中发现需要增加一些新的特征,增加这些新特征后获得的新算法能够帮助我们更好地进行异常检测。


通常可以通过将一些相关的特征进行组合,来获得一些新的更好的特征(异常数据的该特征值异常地大或小)。例如增加两个特征值的比例。

例如,在检测计算机状况的例子中,可以用 CPU负载与网络通信量的比例作为一个新的特征,如果该值异常地大,便有可能意味着该服务器是陷入了一些问题中。如下图:

15.7 多元高斯分布 Multivariate Gaussian Distribution (Optional)

1 多元高斯分布的定义

假如我们有两个相关的特征,其值域范围比较宽。一般的高斯分布模型可能不能很好地识别异常数据。其原因在于,一般的高斯分布模型尝试的是去同时抓住两个特征的偏差,得到的判定边界范围比较大。
例如下图中是两个相关特征,粉色的线(根据 ε 的不同其范围可大可小)是原始高斯分布模型获得的判定边界,绿色的 X 点很可能是异常值,但其p(x)值却仍然在正常范围内。

如果使用多元高斯分布,获得蓝色曲线所示的判定边界,范围更小,判定结果会更准确。

回顾下一般的高斯分布模型,通过分别计算每个特征对应的几率,将其累乘起来,得到 p(x)。

而多元高斯分布模型将构建特征的协方差矩阵,使用所有的特征一次性计算出 p(x)。 首先,计算所有特征的平均值,然后再计算协方差矩阵:

其中: μ 是一个向量,其每一个单元都是原特征矩阵中一行数据的均值。

最后我们计算多元高斯分布的p(x):

其中: |Σ|是矩阵的行列式,在 Matlab 中用det(sigma) 计算; Σ-1 是逆矩阵。

2 协方差矩阵对模型的影响

协方差对角线上的值影响图像的平缓程度,逆对角线上的值影响图像的角度(正值为顺时针旋转45度,负值为逆时针45度)。

图像从左往右:
a. 一般的高斯分布模型
b. 令特征 1 拥有较小的偏差,同时保持特征 2 的偏差
c. 令特征 2 拥有较大的偏差,同时保持特征 1 的偏差
d. 在不改变两个特征的原有偏差的基础上,增加两者之间的正相关性
e. 在不改变两个特征的原有偏差的基础上,增加两者之间的负相关性

3 均值 µ 对中心点的影响

15.8 使用多元高斯分布进行异常检测

1 使用多元高斯分布来进行异常检测

步骤:

1) 计算出均值 µ 和协方差矩阵 Σ

2)对新实例 x, 根据公式计算其 p(x) 的值,如果小于 ε 则异常。

2 原始高斯分布模型 和 多元高斯分布模型

可以看出:对于一个多元高斯分布模型,如果其协方差矩阵只有正对角线上元素非零,则退化为原始高斯分布模型。

原高斯分布模型被广泛使用,如果特征之间在某种程度上相互关联,可以通过构造新特征的方法来捕捉这些相关性。
如果训练集不是太大,并且没有太多的特征,可以使用多元高斯分布模型。

【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 15—Anomaly Detection异常检测的更多相关文章

  1. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 16—Recommender Systems 推荐系统

    Lecture 16 Recommender Systems 推荐系统 16.1 问题形式化 Problem Formulation 在机器学习领域,对于一些问题存在一些算法, 能试图自动地替你学习到 ...

  2. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 14—Dimensionality Reduction 降维

    Lecture 14 Dimensionality Reduction 降维 14.1 降维的动机一:数据压缩 Data Compression 现在讨论第二种无监督学习问题:降维. 降维的一个作用是 ...

  3. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 13—Clustering 聚类

    Lecture 13 聚类 Clustering 13.1 无监督学习简介  Unsupervised Learning Introduction 现在开始学习第一个无监督学习算法:聚类.我们的数据没 ...

  4. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 12—Support Vector Machines 支持向量机

    Lecture 12 支持向量机 Support Vector Machines 12.1 优化目标 Optimization Objective 支持向量机(Support Vector Machi ...

  5. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 11—Machine Learning System Design 机器学习系统设计

    Lecture 11—Machine Learning System Design 11.1 垃圾邮件分类 本章中用一个实际例子: 垃圾邮件Spam的分类 来描述机器学习系统设计方法.首先来看两封邮件 ...

  6. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 10—Advice for applying machine learning 机器学习应用建议

    Lecture 10—Advice for applying machine learning 10.1 如何调试一个机器学习算法? 有多种方案: 1.获得更多训练数据:2.尝试更少特征:3.尝试更多 ...

  7. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 1_Introduction and Basic Concepts 介绍和基本概念

    目录 1.1 欢迎1.2 机器学习是什么 1.2.1 机器学习定义 1.2.2 机器学习算法 - Supervised learning 监督学习 - Unsupervised learning  无 ...

  8. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 18—Photo OCR 应用实例:图片文字识别

    Lecture 18—Photo OCR 应用实例:图片文字识别 18.1 问题描述和流程图 Problem Description and Pipeline 图像文字识别需要如下步骤: 1.文字侦测 ...

  9. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 17—Large Scale Machine Learning 大规模机器学习

    Lecture17 Large Scale Machine Learning大规模机器学习 17.1 大型数据集的学习 Learning With Large Datasets 如果有一个低方差的模型 ...

随机推荐

  1. IIS项目发布完整流程

    第一步: 发布项目 使在IIS上发布是防止源码泄露 第二步: 打开IIS(如果没有就自己安装一个)打开IIS步骤 控制面板>系统安全>管理工具>IIS管理器 填写网站的名称和之前发布 ...

  2. php excel 读取日期问题

    在 php excel 读取 xls 格式的文件时,xls 上面显示的是正常的日期格式 但是读取出来的话,就会是一个万位整形数据,这显然不是我们想要的日期 读取出来的结果: 41807 $t = 41 ...

  3. web 调试工具docker的安装使用

    1.   weinre 工具 docker run -d -p 8080:8080 beevelop/weinre 2. vorlonjs(不支持https)  docker run --name v ...

  4. 谷歌被墙后,能够搜索的ip地址

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/langresser/article/details/32339707 http://209.116. ...

  5. 研究ecmall一些流程、结构笔记 (转)

    index.phpECMall::startup() //ecmall.php object //所有类的基础类 ecmall.phpBaseApp //控制器基础类 app.base.phpECBa ...

  6. PHP如何实现网址伪静态(转)

    Apache的 mod_rewrite是比较强大的,在进行网站建设时,可以通过这个模块来实现伪静态.主要步骤如下: 1.检测Apache是否开启mod_rewrite功能     可以通过php提供的 ...

  7. (二)Fiddler抓取Firefox、Chrome浏览器上的https协议

    Fiddler抓取Firefox.Chrome浏览器上的https协议 安装Fiddler后默认只抓取http协议,如果是https协议的话,浏览器就会提示"您的链接并不安全". ...

  8. 从汇编的角度看待const与#define

    先观察一下的代码: #include<stdio.h> int main(){ ; int y; int *pi=(int*)&i; *pi=; y=*pi; int tempi; ...

  9. Hibernate学习5—Hibernate操作对象2

    第二节:Session 常用方法讲解 2)load和get()方法: 数据库中不存在与OID 对应的记录,Load()方法会抛出异常: load方法默认采用延迟加载,load出来的对象是一个代理类.开 ...

  10. [转] Jsp 重点

    讲师:传智播客 方立勋 4个域对象: pageContext | page 域 request | request 域 session | session 域 servletContext | app ...