1
1
#-*- coding: utf-8 -*-
2
2
# Author: Bob
3
3
# Date: 2016.12.22
4
+ import numpy as np
5
+ from matplotlib import pyplot as plt
6
+ from scipy import io as spio
7
+
8
+ '''异常检测主运行程序'''
9
+ def anomalyDetection_example ():
10
+ '''加载并显示数据'''
11
+ data = spio .loadmat ('data1.mat' )
12
+ X = data ['X' ]
13
+ plt = display_2d_data (X , 'bx' )
14
+ plt .title ("origin data" )
15
+ plt .show ()
16
+
17
+ mu ,sigma2 = estimateGaussian (X )
18
+ print mu ,sigma2
19
+ p = multivariateGaussian (X ,mu ,sigma2 )
20
+ print p
21
+
22
+ visualizeFit (X ,mu ,sigma2 )
23
+
24
+
25
+
26
+ # 显示二维数据
27
+ def display_2d_data (X ,marker ):
28
+ plt .plot (X [:,0 ],X [:,1 ],marker )
29
+ plt .axis ('square' )
30
+ return plt
31
+
32
+ # 参数估计函数(就是求均值和方差)
33
+ def estimateGaussian (X ):
34
+ m ,n = X .shape
35
+ mu = np .zeros ((n ,1 ))
36
+ sigma2 = np .zeros ((n ,1 ))
37
+
38
+ mu = np .mean (X , axis = 0 ) # axis=0表示列,每列的均值
39
+ sigma2 = np .var (X ,axis = 0 ) # 求每列的方差
40
+ return mu ,sigma2
41
+
42
+ # 多元高斯分布函数
43
+ def multivariateGaussian (X ,mu ,Sigma2 ):
44
+ k = len (mu )
45
+ if (Sigma2 .shape [0 ]> 1 ):
46
+ Sigma2 = np .diag (Sigma2 )
47
+
48
+ X = X - mu
49
+ argu = (2 * np .pi )** (- k / 2 )* np .linalg .det (Sigma2 )** (- 0.5 )
50
+ p = argu * np .exp (- 0.5 * np .sum (np .dot (X ,np .linalg .inv (Sigma2 ))* X ,axis = 1 )) # axis表示每行
51
+ return p
52
+
53
+ # 可视化边界
54
+ def visualizeFit (X ,mu ,sigma2 ):
55
+ X1 ,X2 = np .meshgrid (0 ,0.5 ,35 )
56
+ Z = multivariateGaussian (np .vstack ((X1 ,X2 )), mu , Sigma2 )
57
+
58
+
59
+ if __name__ == '__main__' :
60
+ anomalyDetection_example ()
61
+
0 commit comments