在接下来的一系列课程中,我将向大家介绍异常检测(Anomaly detection)问题。这是机器学习算法的一个常见应用。这种算法的一个有趣之处在于它虽然主要用于非监督学习问题,但从某些角度看,它又类似于一些监督学习问题。
异常检测问题更正式一些的定义如下:
假设我们有m个正常的样本数据
我们要采取的方法是:给定无标签的训练集,对数据集x建立一个概率分布模型
因此当我们看到一个新的引擎在我们根据训练数据得到的
我们举例来说明一下高斯分布中μ和σ这两个参数之间的关系:
μ=0,σ=1 | μ=0,σ=0.5 | μ=0,σ=2 | μ=3,σ=0.5 |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
具体来说,高斯分布中的参数估计公式如下:
还有一点,如果你在学习统计学时,可能会见到这个式子:
σ2=1m−1∑mi=1(x(i)−μ)2 ,但在机器学习领域,大家习惯使用σ2=1m∑mi=1(x(i)−μ)2 ,其实在实际情况中,具体使用1m 还是1m−1 其实区别很小,只要你有一个稍大的数据集。这两个版本的公式在理论特性和数学特性上稍有不同,但在实际应用中,他们的区别甚小,几乎可以忽略不计。
假如说我们有一个无标签的训练集,其中共有m个训练样本,并且这里的训练集里的每一个样本都是n维的特征,因此你的训练集应该是m个n维的特征构成的样本矩阵:
让我们来总结一下异常检测算法的具体步骤:
1.从样本中选择一些能体现出异常行为的特征x_i。
我们可以尝试找出一些特征,比如在你的系统里,那些能看出用户异常行为或者欺诈行为的特征。
2.分别计算出每个特征的参数
3.给定一个新的样本x,计算出它对应的p(x):
通过判断p(x)<ε,来判断是否有异常发生。
给定一个用户行为的样本,如何知道用户行为是否异常呢?我们将用户行为数据带入到p(x)的计算中来,如果这个结果非常小,那么我们就将这个行为标注为异常行为。
异常分析例子
假如说我们有下面这样的数据集:
从图中我们可以看出,数据集有两个特征
其中特征
这两个特征对应的分布如下:
|
|
---|---|
![]() |
![]() |
如果绘制出p(x)的图像,那么这个图像如下:
假如x_1=2,x_2=2那么就是这个点:
在3-D表面图上的高度就代表p(x)的值。而这个p(x)完整的写出来就是下面的形式:
那么有了这个表达式,我们如何鉴定新的样本是否异常呢?
要回答这个问题,我们可以先给计算机设某个无穷小的数值ε,假如我设置ε=0.02(我会在后面讲到如何选取ε的值)。
现在我们有两个样本,分别为
我们用上面的式子来计算出
我们用上面的式子来计算出