15 异常检测
15.1 问题的动机
根据已有数据集建立概率模型p(x):
15.2 高斯分布
叫做 x∼N(μ,σ2) x ∼ N ( μ , σ 2 )
其中,
总体的方差( σ σ 是标准差):
样本的方差:
但其实样本的标准差无所谓减不减一,统计量小的时候无意义,统计量大的时候有更能引起误差的地方。
15.3 算法
- 选择可以表示异常样本的特征 xj x j
- 计算特征
μ1,μ2,...,μn,σ21,σ22,...,σ2n
μ
1
,
μ
2
,
.
.
.
,
μ
n
,
σ
1
2
,
σ
2
2
,
.
.
.
,
σ
n
2
:
μj=1m∑i=1m(x(i)j) μ j = 1 m ∑ i = 1 m ( x j ( i ) )
σ2j=1m∑i=1m(x(i)j−μj)2 σ j 2 = 1 m ∑ i = 1 m ( x j ( i ) − μ j ) 2 - 对于给出的样本
x
x
,计算:
p(x)=∏j=1np(xj;μj,σ2j)=∏j=1n12π‾‾‾√σjexp(−(xj−μj)22σ2j) p ( x ) = ∏ j = 1 n p ( x j ; μ j , σ j 2 ) = ∏ j = 1 n 1 2 π σ j e x p ( − ( x j − μ j ) 2 2 σ j 2 )
如果 p(x)<ϵ, p ( x ) < ϵ , x x 为异常点
15.4 开发和评估
现在有一些带标签的数据,有正常数据和异常数据
规定,
y=1 if anomalous
y
=
1
i
f
a
n
o
m
a
l
o
u
s
训练集:
x(1),x(2),...,x(m)
x
(
1
)
,
x
(
2
)
,
.
.
.
,
x
(
m
)
,即使存在少量异常数据也无所谓。
交叉验证集:
(x(1)cv,y(1)cv),...,(x(mcv)cv,y(mcv)cv)
(
x
c
v
(
1
)
,
y
c
v
(
1
)
)
,
.
.
.
,
(
x
c
v
(
m
c
v
)
,
y
c
v
(
m
c
v
)
)
测试集:
(x(1)test,y(1)test),...,(x(mtest)test,y(mtest)test)
(
x
t
e
s
t
(
1
)
,
y
t
e
s
t
(
1
)
)
,
.
.
.
,
(
x
t
e
s
t
(
m
t
e
s
t
)
,
y
t
e
s
t
(
m
t
e
s
t
)
)
比如:
10000个正常引擎
20个异常引擎
训练集:6000个正常的引擎
CV:2000个正常引擎,10个异常引擎
Test: 2000个正常引擎,10个异常引擎
预测正例 | 预测反例 | |
---|---|---|
现实正例 | TP | FN |
现实反例 | FP | TN |
精确率:
precision=TPTP+FP
p
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
预测出的正例中真的为正例的比例
召回率:
recall=TPTP+FN
r
e
c
a
l
l
=
T
P
T
P
+
F
N
,现实所有正例中预测出的正例比例
F1=2PRP+R
F
1
=
2
P
R
P
+
R
评价:
- 根据训练集数据,计算
μ
μ
和
σ2
σ
2
,构建
p(x)
p
(
x
)
- 根据交叉验证集,用
F1
F
1
、精确率与召回率的比例,尝试不同
ϵ
ϵ
- 根据
ϵ
ϵ
, 针对测试集预测,计算
F1
F
1
、精确率与召回率的比例
15.5 异常检测与监督学习对比
正向样本在异常检测中即为异常点
异常检测 | 监督学习 |
---|---|
非常少的正向样本,数据集很偏斜 | 大量的正向样本和负向样本 |
有很多不同类的异常样本,很难从正向样本中学到异常的样子,未来出现的异常可能和现有异常都不同 | 充足的正向样本,可以通过算法得到正向样本的形态,未来的正向样本和训练集的正向样本很像 |
异常检测 | 监督学习 |
---|---|
欺诈行为检测 | 垃圾邮件分类 |
生产飞机引擎 | 天气预报 |
检测数据中心的机器 | 肿瘤分类 |
15.6 选择特征
调整特征使其服从高斯分布
画出数据或者数据特征的直方图
如果这是
x
x
的特征的分布图,那么让
x1=log(x1)
x
1
=
l
o
g
(
x
1
)
。
或者
x1=log(x1+C)
x
1
=
l
o
g
(
x
1
+
C
)
或者
x1=x121
x
1
=
x
1
1
2
,这个指数可以调整。
调整特征使其看起来像高斯分布。
异常检测算法的误差分析
常见问题:
p(x)
p
(
x
)
将异常数据预测为正常数据,因为其具有高的
p(x)
p
(
x
)
值。
这时,去分析预测错误的数据,尝试找到原因,可能会发现需要增加新特征。
结合新特征后,异常数据将不再具有高
p(x)
p
(
x
)
值。
x2是新特征。
组合特征产生新特征
我们选择的特征不能特别大,也不能特别小。
反过来说,我们需要在异常时候能过特别大或者特别小的值作为特征。
在计算机中心,选择四个特征:
-
x1
x
1
= 内存
-
x2
x
2
= 磁盘访问数/秒
-
x3
x
3
= CPU负载
-
x4
x
4
= 网络通信量
现在有一个新的类型的异常,CPU的负载高,网络通信量低,即,一个特征大,一个特征小,为了突出这种异常,组合上面的异常:
x5=
x
5
=
CPU负载网络通信量
C
P
U
负
载
网
络
通
信
量
那么,如果这种异常发生,特征会极其大。
即,可以通过组合现有特征,产生更明显的特征。
15.7 多元高斯分布
希望能改变高斯分布的边界,从红色线变到蓝色线,这样,像绿色的异常点就不会被误预测为正常点。
定义
x∈Rn
x
∈
R
n
模型
p(x)
p
(
x
)
不是
p(x1)、p(x2)...
p
(
x
1
)
、
p
(
x
2
)
.
.
.
的乘积。
参数:
μ∈Rn
μ
∈
R
n
,协方差矩阵
Σ∈Rn∗n
Σ
∈
R
n
∗
n
直观理解
Σ Σ 大小变化对正态分布带来的影响
对角线:数值越大,越低,占地面积越大
对角线:数值之间差距越大,越椭圆
反对角线:x1与x2正相关,数值越大,越窄越高;
反对角线:x1与x2负相关,数值越大,越窄越高;
μ μ 大小变化对正态分布的影响
影响中心的位置
15.8 多元高斯分布做异常检测
1. 根据训练集计算
μ
μ
、
Σ
Σ
,得到模型
p(x)
p
(
x
)
2. 对一个给定的新样本
x
x
,计算,如果
p(x)<ϵ
p
(
x
)
<
ϵ
,则为异常样本
与原始模型的关系
原始模型是多元高斯分布关于轴对称的特例。也就是其轴与坐标轴平行。
即,原始模型是多元高斯分布的参数
Σ
Σ
为对角阵的情况(除对角线外,其他元素为零)
原高斯模型 | 多元高斯模型 |
---|---|
当特征之间有相关性的时候,手动创建特征去捕捉异常 | 自动捕获特征之间的相关性 |
计算代价小 | 计算代价大 |
训练集小也可以检测 | 必须 m > n,否则 Σ Σ 不可逆;一般 m > 10n; 如果特征冗余, Σ Σ 也不可逆 |