异常检测(斯坦福machine learning week 9)

来源:互联网 发布:fastdfs nginx 缩略图 编辑:程序博客网 时间:2024/05/16 01:39

在接下来的一系列课程中,我将向大家介绍异常检测(Anomaly detection)问题。这是机器学习算法的一个常见应用。这种算法的一个有趣之处在于它虽然主要用于非监督学习问题,但从某些角度看,它又类似于一些监督学习问题。

1 定义

异常检测问题更正式一些的定义如下:

假设我们有m个正常的样本数据x(1)x(2)x(m),我们需要一个算法来告诉我们一个新的样本数据xtest是否异常。

我们要采取的方法是:给定无标签的训练集,对数据集x建立一个概率分布模型p(x)。当我们建立了x的概率模型之后,我们就会说,对于新的飞机引擎xtest,如果概率p低于阈值ε:

p(xtest)<ε

那么就将其标记为异常。

因此当我们看到一个新的引擎在我们根据训练数据得到的p(xtest)kai模型中概率非常低时,我们就将其标记为异常;反之如果p(xtest)大于给定的阈值ε,我们就认为它是正常的。

2 高斯分布中,μ和σ的关系

我们举例来说明一下高斯分布中μ和σ这两个参数之间的关系:

μ=0,σ=1 μ=0,σ=0.5 μ=0,σ=2 μ=3,σ=0.5 图片描述 图片描述 图片描述 图片描述

具体来说,高斯分布中的参数估计公式如下:

μ=1mi=1mx(i)

σ2=1mi=1m(x(i)μ)2

还有一点,如果你在学习统计学时,可能会见到这个式子:σ2=1m1mi=1(x(i)μ)2,但在机器学习领域,大家习惯使用σ2=1mmi=1(x(i)μ)2,其实在实际情况中,具体使用1m还是1m1其实区别很小,只要你有一个稍大的数据集。这两个版本的公式在理论特性和数学特性上稍有不同,但在实际应用中,他们的区别甚小,几乎可以忽略不计。

3 异常检测的具体算法

假如说我们有一个无标签的训练集,其中共有m个训练样本,并且这里的训练集里的每一个样本都是n维的特征,因此你的训练集应该是m个n维的特征构成的样本矩阵:

x(1),,x(m)xRn

对于我们的异常检测算法,我们要从数据中建立一个p(x)概率模型。由于x是一个向量,因此:

p(x)=p(x1)p(x2)p(x3)p(xn)

我们假定特征x_1服从高斯正态分布:

x1N(μ1,σ21)

根据上节学到的知识,你可以得出对应的μ_1和σ_1:

μ1=1mi=1mx(i)1

σ21=1mi=1m(x(i)1μ1)2

这样p(x_1)就可以写成这样一个高斯分布:

p(x1)=p(x1;μ1,σ21)

同样地,我假设x_2也服从高斯分布,可以得出:

p(x2)=p(x2;μ2,σ22)

与此类似x_3服从另外一个高斯分布:

p(x3)=p(x3;μ3,σ23)

直到x_n:

p(xn)=p(xn;μn,σ2n)

因此可以得出:

p(x)=p(x1;μ1,σ21)p(x2;μ2,σ22)p(x3;μ3,σ23)p(xn;μn,σ2n)=Πnj=1p(xj;μj,σ2j)

其中Π(读作pai,是π的大写形式)类似∑符号,只不过这里将连加换成了连乘。顺便要说的是,估计p(x)的分布问题,通常被称为密度估计问题。

4 异常检测算法步骤总结

让我们来总结一下异常检测算法的具体步骤:

  • 1.从样本中选择一些能体现出异常行为的特征x_i。
    我们可以尝试找出一些特征,比如在你的系统里,那些能看出用户异常行为或者欺诈行为的特征。

  • 2.分别计算出每个特征的参数μ1,,μn,σ21,,σ2n

    μ=μ1μ2μn=1mi=1mx(i)

    σ2=σ21σ22σ2n=1mi=1m(x(i)μ)2

    其中:

μj=1mi=1mx(i)j

σ2j=1mi=1m(x(i)jμj)2

m个无标签数据分别计算出他们每个特征的期望μ和方差σ2。注意,这里μ和σ都是m维度的向量,而μjσj都是其中对应的第j个元素。

3.给定一个新的样本x,计算出它对应的p(x):
p(x)=Πnj=1p(xj;μj,σ2j)=Πnj=112πσjexp((xjμj)22σ2j)
通过判断p(x)<ε,来判断是否有异常发生。

给定一个用户行为的样本,如何知道用户行为是否异常呢?我们将用户行为数据带入到p(x)的计算中来,如果这个结果非常小,那么我们就将这个行为标注为异常行为。

异常分析例子

假如说我们有下面这样的数据集:
图片描述
从图中我们可以看出,数据集有两个特征x1x2

其中特征x1对应的是水平方向的数据,它的均值是5,标准差是2;x_2对应的是竖直方向上的数据,它的均值是3,标准差是1:

μ1=5,σ1=2
μ2=3,σ2=1
这两个特征对应的分布如下:

p(x1;μ1,σ21) p(x2;μ2,σ22) 图片描述 图片描述

如果绘制出p(x)的图像,那么这个图像如下:
图片描述

假如x_1=2,x_2=2那么就是这个点:
在3-D表面图上的高度就代表p(x)的值。而这个p(x)完整的写出来就是下面的形式:

p(x)=p(x1;μ1,σ21)p(x2;μ2,σ22)

那么有了这个表达式,我们如何鉴定新的样本是否异常呢?

要回答这个问题,我们可以先给计算机设某个无穷小的数值ε,假如我设置ε=0.02(我会在后面讲到如何选取ε的值)。

现在我们有两个样本,分别为x(1)testx(2)test
图片描述

我们用上面的式子来计算出p(x(1)test),可以发现这是一个比较大的数,具体大小是大于等于ε的,所以对于x(1)testp(x(2)test),我们发现这是一个很小的数,具体值是小于ε的,所以我们说x(2)test属于异常数据。

具体相关细节详见

原创粉丝点击