《异常检测——从经典算法到深度学习》4 基于高斯概率密度异常检测算法
《异常检测——从经典算法到深度学习》
- 0 概论
- 1 基于隔离森林的异常检测算法
- 2 基于LOF的异常检测算法
- 3 基于One-Class SVM的异常检测算法
- 4 基于高斯概率密度异常检测算法
- 5 Opprentice——异常检测经典算法最终篇
- 6 基于重构概率的 VAE 异常检测
- 7 基于条件VAE异常检测
- 8 Donut: 基于 VAE 的 Web 应用周期性 KPI 无监督异常检测
- 9 异常检测资料汇总(持续更新&抛砖引玉)
- 10 Bagel: 基于条件 VAE 的鲁棒无监督KPI异常检测
- 11 ADS: 针对大量出现的KPI流快速部署异常检测模型
- 12 Buzz: 对复杂 KPI 基于VAE对抗训练的非监督异常检测
- 13 MAD: 基于GANs的时间序列数据多元异常检测
相关:
- VAE 模型基本原理简单介绍
- GAN 数学原理简单介绍以及代码实践
4. 基于高斯概率密度异常检测算法
此篇主要介绍以下内容:
- 基于高斯概率密度异常检测算法概述
- 基于高斯概率密度异常检测算法应用实例
- 小结
4.1 算法概述
基本思想: 首先,该算法假设数据集服从高斯分布的,然后再分别计算训练集在空间中的重心, 和方差, 然后根据高斯概率密度估算每个点被分配到重心的概率,进而完成异常检测任务。
特点:
- 是一种非监督算法
- 适用于大致服从高斯分布的数据集
- 不适用于高维特征数据集。样本数目(
n_samples
) 应该大于特征数目的平方(n_features**2
)
注: 该算法应用场景极其有限,在此不做过多介绍。
4.2 应用实例
在sklearn中实现了该算法,官网文档地址
实例1
来自于sklearn官网,立即前往
import numpy as np
from sklearn.covariance import EllipticEnvelope
true_cov = np.array([[.8, .3],
[.3, .4]])
X = np.random.RandomState(0).multivariate_normal(mean=[0, 0],
cov=true_cov,
size=500)
cov = EllipticEnvelope(random_state=0).fit(X)
# predict returns 1 for an inlier and -1 for an outlier
print(cov.predict([[0, 0],
[3, 3]]))
print(cov.covariance_)
print(cov.location_)
输出内容如下:
[ 1 -1]
[[0.74118335 0.25357049]
[0.25357049 0.30531502]]
[0.0813539 0.04279722]
说明:
- numpy 中的
multivariate_normal
函数 即产生多维的高斯分布的数据,这个例子中生产生二维数据集。 true_cov
即协方差;在随机生成多维正态分布的时候需要指定mean
即平均值,cov
即协方差,size
则是随机生成这些数的数目。cov
即生成的模型;predict
返回1
表示正常数据,返回-1
表示异常数据。cov.covariance_
即预测协方差矩阵(Estimated robust covariance matrix);cov.location_
即预测 Robust 位置(Estimated robust location)
参考文档:
https://scikit-learn.org/stable/modules/generated/sklearn.covariance.EllipticEnvelope.html#sklearn.covariance.EllipticEnvelope
https://scikit-learn.org/stable/modules/outlier_detection.html#outlier-detection
4.3 小结
只是稍微提及一下该算法,基于概率运算的算法的核心应该就是思考数学模型构建过程,但为了给后面的深度学习相关算法留更多时间,就没有再去纠结数学模型相关推导与证明了。根据sklearn官网上的说明,与此算法相关的论文(A Fast Algorithm for the Minimum Covariance Determinant Estimator) 在1999年提出的,希望能把重点放在其他算法上,所以这里只能草草浏览一下,抱歉。
Smileyan
2020年5月28日
感谢您的 点赞、 收藏、评论 与 关注
还没有评论,来说两句吧...