第九周(第一部分)-异常检测

1异常检测

异常检测(Anomaly detection)问题 是机器学习算法 的一个常见应用, 这种算法的一个有趣之处在于 :它虽然主要用于 非监督学习问题 ,但从某些角度看 它又类似于一些监督学习问题 。

1.1引入

那么 什么是异常检测呢?

为了解释这个概念 ,让我举一个例子吧: 假想你是一个 飞机引擎制造商, 当你生产的飞机引擎 从生产线上流出时 你需要进行 QA (质量控制测试), 而作为这个测试的一部分 你测量了飞机引擎的一些特征变量 ,比如 你可能测量了 引擎运转时产生的热量, 或者引擎的振动等等 。采集这些特征变量 这样一来 你就有了一个数据集 ,从x(1)到x(m), 如果你生产了m个引擎的话 也许你会将这些数据绘制成图表。

后来有一天 ,你有一个新的飞机引擎 从生产线上流出,而你的新飞机引擎 有特征变量x-test 。所谓的异常检测问题就是 我们希望知道, 这个新的飞机引擎是否有某种异常。

感性来理解一下,如图: 

这些样本点 有很大的概率值 落在 在中心区域。 
而稍微远离中心区域的点概率会小一些 , 
更远的地方的点 它们的概率将更小, 这外面的点 和这外面的点 将成为异常点 。

而这些圈是可以用一个概率模型P(x)来衡量的,我们的异常检测算法就是找到这样一个概率模型画出这个圈。

异常检测算法有很多用途,比如: 
1. 欺诈检测:把用户的使用习惯设为特征,若很反常有可能为欺诈。 
2. 制造业:产品的质量控制(QA)。 
3. 数据中心的计算监控:监控cpu、内存等的使用情况是否又反常。

1.2高斯(正态)分布

异常检测的数学基础:高斯(正态)分布。

所谓样本x服从高斯分布(x~N),就是x出现的概率(或者说发生x事件的概率)满足这样一个公式:p(x)=12πσexp⁡(−(x−μ)22σ2)

所以这是一个概率公式。他的图像如下:以均值为中心,方差为宽度。

扫描二维码关注公众号,回复: 1733317 查看本文章

其中均值与方差的计算方法如下:

有了均值与方差的计算方法,就有了参数估计这一名词。就是:给你了一些样本值,你可以求出他们的均值与方差,然后用这两个参数估计总体样本的分布。

第二个比较重要的数学知识就是独立分布的概率,等于概率的乘积。 

1.3异常检测算法

这一节给出了异常检测的步骤,对于给出的样本{x(1),...,x(m)}

  1. 选出一些重要的特征,比如:x(i)j表示第j个样本的第i个特征,比如发动机温度。
  2. 计算各个特征的均值与方差:μj=1m∑i=1mxj(i), σj2=1m∑i=1m(xj(i)−μj)2 。 即算出了每种特征的分布,也就算出了每种特征出现某值的概率。
  3. 给出一个新的样本,计算他出现的概率P(x)。P(x)等于各项特征出现概率的乘积。image

下面通过图像直观感受:

image

  1. 左上角为样本点,有X1和X2两个特征。
  2. 计算分别计算X1和X2的均值和方差。图像如右上角,综合两者的图像为三维左下角,高度为概率。
  3. 给定2个样本Xtest,计算出现的概率,大于阈值为正常,小于这么小的阈值为异常。

总结:异常检验的数学内涵是数理统的一条法则:

小概率事件一般不会发生。

翻译成通俗解释就是:不可能发生的事情却发生了,必有阴谋!所以判断其为异常值,事后专门对其进行检查。

2建立一个异常检测系统

2.1评价一个异常检测系统

评价异常检测系统最常用的方法就是使用 cross validation(与监督学习一样):将训练数据分为三部分:Training set is unlabled, cross validation & test set is labled.如图 
image

对于异常检测问题,要检测出的是anomalous的,所以anomalous对应y = 1,我们举个例子,对与飞机发动机故障检测,将10000个好数据分为三部分,20个故障数据分成2部分,如图: 
image

其中第二种方式,吴恩达老师不鼓励这样。

下面总结一下步骤: 
image即: 
1. 对数据按6:2:2比例进行分配,分别为训练集,交叉验证集,测试集,训练集中全是无标签数据,异常数据在交叉验证集与测试集中按比例进行分配 
2. 通过训练集对参数进行拟合 
3. 对交叉验证集和测试集中的数据进行测试 
4. 由于异常样本的数量非常的少,导致预测十分偏斜,可以通过考察准确率,召回率,F1值来评估模型的效果。
5. 通过交叉验证集来调节参数ε

2.2异常检测vs.监督学习

在上一段视频中 ,我们谈到 如何评价一个 异常检测算法 ,我们先是用了一些 带标签的数据 ,以及一些我们知道是异常 或者正常的样本 用 y=1 或 y=0 来表示 。

这就引出了这样一个问题: 我们有了这些带标签的数据 我们有了一些样本 其中一些我们知道是异常的 另外一些是正常的 那我们为什么我们不 直接用监督学习的方法呢?

image
ppt已经写得很清楚了,在总结一下:关键的区别就是 :在异常检测算法中 我们只有一小撮 正样本(也就是异常样本) 因此学习算法不可能 从这些正样本中学出太多东西 。

异常检测 监督学习
负向数据很多,可以精确的计算出参数估计P(x) 需要两种数据都多,才能很好的计算出模型。
好的数据很集中,但故障可能有很多种,只要将其找出即可 需要大量正样本,才能学习出相关特征,表示出故障的特征进行分类。

下一页ppt给出了两种算法的一般使用场景: 
image

下面一个练习题,可以看一下。 

PS: 
如果你拥有相同数量的正负样本或者说既有大量的正样本,也有大量的负样本,那么还是倾向于把这些问题当做监督学习 。


2.3选择使用哪些features

当你应用异常检测时对它的效率影响最大的因素之一是,你使用什么特征变量,你选择什么特征变量来输入异常检测算法。 
在我们的异常检测算法中我们做的事情之一就是,使用这种正态(高斯)分布来对特征向量建模,就是有 xi 服从正态分布 期望为 μi 方差为  σ2i 那么,常做的一件事就是画出这些数据 。 
如果数据是如下左图的话,我们就需要对它进行一些转换,让它看起来更像高斯分布,通过 log(x) 变为右图。除了取对数变换之外,还有别的一些方法也可以用,假如这是另一个特征  x2 现在我用  log(x2+1) 来取代 或者更一般地 我可以在  x2 后面加上 某个常数C,或者对于另一个特征  x3 也许我可以用它的平方根来取代  x3 的平方根也就是  x3 的二分之一次方。

image

  1. 误差分析

像之前讲监督学习的误差分析一样, 我们先完整地训练出 一个学习算法, 然后在一组交叉验证集上运行算法 ;然后找出那些预测出错的样本, 然后再看看 我们能否找到一些其他的特征变量 来帮助学习算法, 让它在那些交叉验证时 判断出错的样本中表现更好 。

比如下图:绿色x代表anomaly example, 只有一个feature x1时会区分错误,加一个feature x2时就可以正确区分。

image

3多元高斯分布

异常检测算法的 一种可能的延伸 —— 多元高斯分布 (multivariate Gaussian distribution) 。它有一些劣势(计算量大),也有一些优势( 它能捕捉到一些之前的算法检测不出来的异常)。

3.1多元高斯分布数学

我们先来看看一个例子: 假设我们的没有标签的数据看起来像这张图一样。我要使用数据中心的监控机的例子 ,我的两个特征变量 x1 是 CPU 的负载和 x2 可能是内存使用量 。

image

那么普通的高斯分布建模就是粉红色的圆圈,多元高斯分布建模就是蓝色的“斜”椭圆。(其知识为多元正态分布的相关性,其实普通正态分布就是多元正态分布的特例——特征独立不相关。)

其概率表达式为:

image

推导过程如下:

  • 设(X1,X2)是二元正态变量,其密度函数为: image

  • 即 (X1,X2)~N(μ1,μ2,σ12,σ22,ρ) 
    其中:ρ是相关系数

  • 令:

    • x=(x1,x2)T
    • μ=(μ1,μ2)T
    • (c11c12 c21c22 )=(σ12ρσ1σ2ρσ1σ2σ22)
  • 于是推出:f(x1,x2)=1(2π)n2(|C|)12e−12(x−μ)TC(−1)(x−μ) 
    即:

image 
其中: 
- μ 相当于每个正态分布的对称轴,是一个一维向量 
- Σ是协方差矩阵


下面通过图像来看一下多元正态分布的特点: 
1. 协方差相同,说明特征独立,与普通高斯分布相同: 
image

  1. 协方差改变,特征相关,变成椭圆:

image

  1. 正相关(右上-左下)

image

  1. 负相关(左上-右下) 
    image

3.2应用多元高斯分布进行异常检测

之前看到了一些例子, 通过改变参数 µ 和 Σ 来给不同的概率分布建模。 在这节视频中 ,我们来使用那些想法 ,用它们来开发另一种异常检测算法 。

步骤如下:

image

传统高斯分布与多元高斯分布的关系:当多元高斯分布的协方差为对角矩阵的时候就是不同高斯分布。 
image

具体区别对比: 
image

  1. 多元高斯模型有很多参数,所以这个协方差矩阵σ是一个n乘n的矩阵,大约有n个平方参数,因为它是一个对称矩阵,它实际上更接近于2个参数的n平方,但是这是很多参数,所以你需要确保你有一个相当大的m值,确保你有足够的数据来适应所有这些参数。
  2. m大于或等于10 n将是一个合理的经验法则,以确保您可以相当好地估计这个协方差矩阵ε。
  3. 在你有非常大的训练集或m非常大而n不是太大的问题中,那么多元高斯模型是值得考虑的,并且可以更好地工作,并且可以节省你不必花费时间手动创建额外的功能,以防异常结果被特征值的异常组合所捕捉。
  4. 协方差矩阵ε不可逆,他们通常是这种情况2,一个如果它不能满足这个大于n条件;第二是如果你有多余features.if你有2个功能是相同的。如果你的x1只是等于x2。或者如果你有多余的功能,比如你的功能X3等同于功能X4,再加上功能X5,那么X3不包含任何额外的信息。

猜你喜欢

转载自blog.csdn.net/sir_ti/article/details/80761429