Anomaly detection system——异常检测系统简介与设计
“异常检测系统”
常常应用于制造业中,同时对于生活在互联网时代的我们而言,异常检测同样发挥着巨大的作用,例如进行异常用户检测,防止网络诈骗等行为等。
一个成熟的异常检测系统能够基于输入的属性值对“产品”进行性质判断,为后期进行更进一步的处理提供参考。那么如何构建异常检测系统呢?将对基本异常检测系统进行介绍。本篇文章没有涉及太多数学理论,但一点必要的统计理论是必要的(太晦涩的知识,笔者也不懂的hh)
1 异常检测系统的实现原理
异常检测系统的实现原理,用“人听得懂的话”说出来其实非常地直观:当已经提前知道什么是无异常状态时,面对新的样本时通过状态的对比,如果有较大的偏差则认为有异常,否则为无异常。
那么难点在于:如何确定无异常状态?
这里自然就要用到机器学习了,通过大量的无异常样本总结出特征与期望,如此划定了一个“无异常范围”就能够轻松地进行判断了。具体实现特征总结的方法有很多,本篇文章介绍一种最为基本的方法:Gaussion Distribution高斯分布法。
基于Gaussion Distribution的异常检测模型
对数理统计有一定了解的同学一定都十分了解高斯分布了,高斯分布还有另一个更常用的名称:正态分布
,二维图像呈现出一个……咳咳形状是吧,也是典型的径向基函数。有了高斯分布我们就可以进行异常检测模型的设计了。这里先明确各符号的意义:
x
∈
R
n
:
样
本
集
,
属
性
数
量
n
x \in \R^n:样本集,属性数量n
x∈Rn:样本集,属性数量n
m
:
样
本
数
量
m:样本数量
m:样本数量
x
(
i
)
:
第
i
个
样
本
x^{(i)}:第i个样本
x(i):第i个样本
x
j
(
i
)
:
第
i
个
样
本
的
第
j
个
属
性
值
x^{(i)}_j:第i个样本的第j个属性值
xj(i):第i个样本的第j个属性值
基于高斯分布的模型即有假设:各样本属性都分布服从高斯分布,如
x
j
x_j
xj服从
N
(
μ
j
,
σ
j
2
)
N~(\mu_j,\sigma_j^2)
N (μj,σj2),其他依次类推。如由两个属性定义的高斯分布所示:
明确了以上的概念,接下来就可以从样本集中计算出各属性分布的
μ
\mu
μ以及
σ
\sigma
σ的值,计算方法即为数理统计中的“由样本估计参数”:
μ
j
=
1
m
∑
i
m
x
j
(
i
)
\mu_j=\frac{1}{m}\sum_i^mx_j^{(i)}
μj=m1i∑mxj(i),
σ
j
2
=
1
m
∑
(
x
j
(
i
)
−
μ
j
)
2
\sigma_j^2=\frac{1}{m}\sum(x_j^{(i)}-\mu_j)^2
σj2=m1∑(xj(i)−μj)2(这里可能大家有一点疑问:我们学过的无偏估计除的是m-1,这里是m,实际上在真实开发中,由于样本量很大,这个差别会很小,所以用m也是可以的)
得到:
p
j
(
x
j
(
i
)
)
=
1
2
π
σ
e
x
p
(
−
(
x
j
(
i
)
−
μ
j
)
2
2
σ
2
)
p_j(x^{(i)}_j)=\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(x^{(i)}_j-\mu_j)^2}{2\sigma^2})
pj(xj(i))=2π
σ1exp(−2σ2(xj(i)−μj)2)
计算完分布后我们需要一个统一的“分值”来判断是否在预期内,则定义:
P
(
x
(
i
)
)
=
Π
j
n
p
j
(
x
j
(
i
)
)
P(x^{(i)})=\Pi^n_jp_j(x^{(i)}_j)
P(x(i))=Πjnpj(xj(i))
作为评价标准,即:
i
f
P
(
x
(
i
)
)
<
κ
,
t
h
e
n
→
x
∈
A
n
o
m
a
l
y
ifP(x^{(i)})<\kappa, then\rightarrow x \in Anomaly
ifP(x(i))<κ,then→x∈Anomaly
而对于
κ
\kappa
κ值的选择稍后进行讲解。以上即为异常监测系统的原理部分,更加深入的内容,请各位自行进行检索。
2 具体实现步骤
-
数据集
最开始,也是最为重要的步骤之一,收集数据。对于不同的任务,数据收集方式不同,假设有一个“计算机是否处于异常状态”的项目,那么需要收集的数据则可能是:机器工作温度,机器内存使用状况,机器效率,机器是否异常等。根据需求进行收集。需要注意的是,数据收集时很可能出现的状况是:大部分样本都处于正常状态,只有少数处于异常状态。这是一个样本不均衡问题,但对于异常检测系统而言这样的数据是合理的,具体稍后进行解释。
-
选择模型并计算得到模型的参数
上一小节中还有一个遗留的小问题,如何选择 κ \kappa κ,这对与机器学习而言不是很大的问题,可以采用试错的方式进行甄别:即代入多个值选择效果最好的模型参数即可。如何评价效果好坏?请继续看下去.
-
划分数据集
这里可以部分解释为什么样本不均衡对于异常检测系统是需要的:由于在训练模型时我们需要得到的是正常样本的特征,因此train set的样本是正常样本或者是无标签,假设为正常的样本
。而对于样本数据集的划分,强烈推荐划分为train_set(60%), validation_set(20%), test_set(20%),各数据集的功能在这里我不过多介绍,如果有疑问大家可以留言或者去搜索其他的文章进行解答。其实在日常的使用中,可以看到一些人在进行数据集划分操作时经常出现不正规的处理,如validation_set与test_set是同样本,这样其是test_set就很难起到其作用了。
还需要注意的是,在validation_set以及test_set中要保留一部分Anomaly的样本,用于判断模型的准确程度。 -
选择评价标准
如何选择一个快速直观的评价标准,对于提升模型构建的效率是至关重要的。需要注意的是,由于样本集本身的不均衡,我们不能简单地选择准确率作为模型的评价标准,推荐选择一下的评价标准:
其中第二项为P:查准率,R:查全率;F_1 score为P,R调和平均值,兼顾了查全与查准。 -
模型择优
有了以上的评价标准,则可以开始进行模型的评价与择优,选择不同的 κ \kappa κ值,得到不同模型的评价指标,选择最优模型作为最终输出即可。 -
可以使用啦!
3 小节
以上即为本篇文章的全部内容,希望有帮到各位一点。如有不足的地方,各位可以在评论中指出,感谢各位。仔细想想,其实异常检测系统已经在我们日常的生活中发挥了很大作用,且还有很大的可拓展空间。
转载请注明出处,感谢!