@@ -15,18 +15,18 @@ def anomalyDetection_example():
15
15
plt .show ()
16
16
'''多元高斯分布函数,并可视化拟合的边界'''
17
17
mu ,sigma2 = estimateGaussian (X ) # 参数估计(求均值和方差)
18
- #print mu,sigma2
18
+ #print ( mu,sigma2)
19
19
p = multivariateGaussian (X ,mu ,sigma2 ) # 多元高斯分布函数
20
- #print p
20
+ #print (p)
21
21
visualizeFit (X ,mu ,sigma2 ) # 显示图像
22
22
23
23
'''选择异常点(在交叉验证CV上训练得到最好的epsilon)'''
24
24
Xval = data ['Xval' ]
25
25
yval = data ['yval' ] # y=1代表异常
26
26
pval = multivariateGaussian (Xval , mu , sigma2 ) # 计算CV上的概率密度值
27
27
epsilon ,F1 = selectThreshold (yval ,pval ) # 选择最优的epsilon临界值
28
- print u'在CV上得到的最好的epsilon是:%e' % epsilon
29
- print u'对应的F1Score值为:%f' % F1
28
+ print ( u'在CV上得到的最好的epsilon是:%e' % epsilon )
29
+ print ( u'对应的F1Score值为:%f' % F1 )
30
30
outliers = np .where (p < epsilon ) # 找到小于临界值的异常点,并作图
31
31
plt .plot (X [outliers ,0 ],X [outliers ,1 ],'o' ,markeredgecolor = 'r' ,markerfacecolor = 'w' ,markersize = 10. )
32
32
plt = display_2d_data (X , 'bx' )
@@ -72,7 +72,7 @@ def visualizeFit(X,mu,sigma2):
72
72
plt .plot (X [:,0 ],X [:,1 ],'bx' )
73
73
74
74
if np .sum (np .isinf (Z ).astype (float )) == 0 : # 如果计算的为无穷,就不用画了
75
- # plt.contourf(X1,X2,Z,10.**np.arange(-20, 0, 3),linewidth=.5)
75
+ #plt.contourf(X1,X2,Z,10.**np.arange(-20, 0, 3),linewidth=.5)
76
76
CS = plt .contour (X1 ,X2 ,Z ,10. ** np .arange (- 20 , 0 , 3 ),color = 'black' ,linewidth = .5 ) # 画等高线,Z的值在10.**np.arange(-20, 0, 3)
77
77
#plt.clabel(CS)
78
78
@@ -88,9 +88,9 @@ def selectThreshold(yval,pval):
88
88
'''计算'''
89
89
for epsilon in np .arange (np .min (pval ),np .max (pval ),step ):
90
90
cvPrecision = pval < epsilon
91
- tp = np .sum ((cvPrecision == 1 ) & (yval == 1 )).astype (float ) # sum求和是int型的,需要转为float
92
- fp = np .sum ((cvPrecision == 1 ) & (yval == 0 )).astype (float )
93
- fn = np .sum ((cvPrecision == 1 ) & (yval == 0 )).astype (float )
91
+ tp = np .sum ((cvPrecision == 1 ) & (yval == 1 ). ravel () ).astype (float ) # sum求和是int型的,需要转为float
92
+ fp = np .sum ((cvPrecision == 1 ) & (yval == 0 ). ravel () ).astype (float )
93
+ fn = np .sum ((cvPrecision == 0 ) & (yval == 1 ). ravel ( )).astype (float )
94
94
precision = tp / (tp + fp ) # 精准度
95
95
recision = tp / (tp + fn ) # 召回率
96
96
F1 = (2 * precision * recision )/ (precision + recision ) # F1Score计算公式
0 commit comments