七、异常检测 Anomaly Detection
1、高斯分布(正态分布)Gaussian distribution
- 分布函数:
- 其中,
u
为数据的均值,σ
为数据的标准差 σ
越小,对应的图像越尖
- 其中,
- 参数估计(
parameter estimation
)
2、异常检测算法
- 例子
- 训练集:,其中
- 假设相互独立,建立model模型:
- 过程
- 选择具有代表异常的
feature
:xi - 参数估计:
- 计算
p(x)
,若是P(x)<ε
则认为异常,其中ε
为我们要求的概率的临界值threshold
- 选择具有代表异常的
- 这里只是单元高斯分布,假设了
feature
之间是独立的,下面会讲到多元高斯分布,会自动捕捉到feature
之间的关系 - 参数估计实现代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
3、评价p(x)
的好坏,以及ε
的选取
-
对偏斜数据的错误度量
- 因为数据可能是非常偏斜的(就是
y=1
的个数非常少,(y=1
表示异常)),所以可以使用Precision/Recall
,计算F1Score
(在CV交叉验证集上) - 例如:预测癌症,假设模型可以得到
99%
能够预测正确,1%
的错误率,但是实际癌症的概率很小,只有0.5%
,那么我们始终预测没有癌症y=0反而可以得到更小的错误率。使用error rate
来评估就不科学了。 - 如下图记录:
- ,即:正确预测正样本/所有预测正样本
- ,即:正确预测正样本/真实值为正样本
- 总是让
y=1
(较少的类),计算Precision
和Recall
- 还是以癌症预测为例,假设预测都是no-cancer,TN=199,FN=1,TP=0,FP=0,所以:Precision=0/0,Recall=0/1=0,尽管accuracy=199/200=99.5%,但是不可信。
- 因为数据可能是非常偏斜的(就是
-
ε
的选取- 尝试多个
ε
值,使F1Score
的值高
- 尝试多个
- 实现代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
4、选择使用什么样的feature(单元高斯分布)
- 如果一些数据不是满足高斯分布的,可以变化一下数据,例如
log(x+C),x^(1/2)
等 - 如果
p(x)
的值无论异常与否都很大,可以尝试组合多个feature
,(因为feature之间可能是有关系的)
5、多元高斯分布
- 单元高斯分布存在的问题
- 如下图,红色的点为异常点,其他的都是正常点(比如CPU和memory的变化)
- x1对应的高斯分布如下:
- x2对应的高斯分布如下:
- 可以看出对应的p(x1)和p(x2)的值变化并不大,就不会认为异常
- 因为我们认为feature之间是相互独立的,所以如上图是以正圆的方式扩展
- 如下图,红色的点为异常点,其他的都是正常点(比如CPU和memory的变化)
- 多元高斯分布
- ,并不是建立
p(x1),p(x2)...p(xn)
,而是统一建立p(x)
- 其中参数:,
Σ
为协方差矩阵 - 同样,
|Σ|
越小,p(x)
越尖 - 例如:
,
表示x1,x2**正相关**,即x1越大,x2也就越大,如下图,也就可以将红色的异常点检查出了
若:
,
表示x1,x2**负相关**
- ,并不是建立
- 实现代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
6、单元和多元高斯分布特点
- 单元高斯分布
- 人为可以捕捉到
feature
之间的关系时可以使用 - 计算量小
- 人为可以捕捉到
- 多元高斯分布
- 自动捕捉到相关的feature
- 计算量大,因为:
m>n
或Σ
可逆时可以使用。(若不可逆,可能有冗余的x,因为线性相关,不可逆,或者就是m
7、程序运行结果
- 显示数据
- 等高线
- 异常点标注