基本含义
一组数据,判断其中某一个是否异常
Is xtest x t e s t anomalous?
我们对其分布进行建模,模型为 p(x) p ( x )
如果
p(xtest<ϵ)
p
(
x
t
e
s
t
<
ϵ
)
,那么我们认为这个数据异常
如果
p(xtest≥ϵ)
p
(
x
t
e
s
t
≥
ϵ
)
,那么我们认为这个数据正常
异常检测的应用
最常见的应用是欺诈检测,用特征变量表示用户的各个行为,如果ta某一时刻的行为满足 p(xtest<ϵ) p ( x t e s t < ϵ ) ,那么我们认为用户行为异常,可能被盗号
另一个例子是工业生产领域,例如飞机的引擎是否正常
第三个例子,数据中心,对每台计算机的特征进行量化,建模,如果有一台计算机的 p(xtest p ( x t e s t 非常小,就说明可能发生异常,可以要求管理员检查
高斯分布
x~
N(μ,σ2)
N
(
μ
,
σ
2
)
σ σ -标准差, σ2 σ 2 -方差, μ μ -均值
μ μ 越大,数据越分散,图像越宽,高度越矮
图像与x轴围成的面积始终是1
参数估计问题
给出一组数据,求出高斯分布的参数
μ,σ
μ
,
σ
异常检测算法
其中 x∈Rn x ∈ R n
我们假设 xi x i ~ N(μi,σ2i) N ( μ i , σ i 2 ) ,每个特征都服从参数不同的正态分布,同时也假设了每个特征变量互相独立
于是
算法步骤
1. 选择一些可能出现与异常有关的特征
2. 计算参数 μ1,...,μn,σ21,...σ2n μ 1 , . . . , μ n , σ 1 2 , . . . σ n 2
3. 计算新实例x的概率
异常检测系统的评价
如果有一些带标签的数据,指出哪些样本是正常的,哪些样本是异常的。那么我们在训练集中放入正常的无标签的数据,在交叉验证集合测试集中放入带标签的异常数据,用训练集的数据拟合p(x)。接下来把正常的一些数据也放入交叉验证集和测试集中,然后使用p(x)进行判断。
训练集:验证集:测试集=6:2:2
然后在验证集和测试集中计算p(x),计算准确率,召回率,F1
异常检测 vs 监督学习
异常检测适用的场景:正例非常少,大部分全是反例(错误的数据很少—)。有可能有不同类型的异常,而且未来出现的异常可能从没见过。
监督学习适用的场景:正例和反例都很多。未来出现的数据基本上和以前出现的很相似
如何选择异常检测算法的特征变量
如果数据分布近似高斯分布的话就选这个变量,否则就要进行处理,比如取对数。选择数据的时候不要选特别大或者特别小的。
多元高斯分布
存在这样一种情况:每个特征变量都在高斯分布正常范围内,但是合起来看就不是了,为了在此时也能正确判断异常,需要用到多元高斯分布
在多元高斯分布中,
此时 σ σ 叫做协方差矩阵
多元高斯分布的概率表达式
如果变量互相独立,那么协方差矩阵非对角元都是0
使用多元高斯分布估计参数
给出数据集
Dataset:{x(1),x(2),...,x(m)}
D
a
t
a
s
e
t
:
{
x
(
1
)
,
x
(
2
)
,
.
.
.
,
x
(
m
)
}
其中
x∈Rn
x
∈
R
n
则
μ=1m∑mi=1x(i)
μ
=
1
m
∑
i
=
1
m
x
(
i
)
σ=1m∑mi=1(xi−μ)(xi−μ)T
σ
=
1
m
∑
i
=
1
m
(
x
i
−
μ
)
(
x
i
−
μ
)
T
使用多元高斯分布异常检测
- 使用上述公式计算参数 μ μ 和 σ σ
- 对于一个新的样本实例,计算 p(xnew) p ( x n e w )
- 如果 p(xnew)<ϵ p ( x n e w ) < ϵ ,则样本异常
什么时候用多元高斯模型
如果愿意为关联的变量创建新的特征变量,那么用原始模型更好,另外,原始模型的计算量更小。但是,多元高斯模型可以自动分析关联性。如果变量不是那么多,可以用多元高斯模型
多元高斯模型要确保样本数大于特征数
(m>n)
(
m
>
n
)
如果发现协方差矩阵不可逆,有可能是m