@@ -15,18 +15,18 @@ def anomalyDetection_example():
1515 plt .show ()
1616 '''多元高斯分布函数,并可视化拟合的边界'''
1717 mu ,sigma2 = estimateGaussian (X ) # 参数估计(求均值和方差)
18- #print mu,sigma2
18+ #print ( mu,sigma2)
1919 p = multivariateGaussian (X ,mu ,sigma2 ) # 多元高斯分布函数
20- #print p
20+ #print (p)
2121 visualizeFit (X ,mu ,sigma2 ) # 显示图像
2222
2323 '''选择异常点(在交叉验证CV上训练得到最好的epsilon)'''
2424 Xval = data ['Xval' ]
2525 yval = data ['yval' ] # y=1代表异常
2626 pval = multivariateGaussian (Xval , mu , sigma2 ) # 计算CV上的概率密度值
2727 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 )
3030 outliers = np .where (p < epsilon ) # 找到小于临界值的异常点,并作图
3131 plt .plot (X [outliers ,0 ],X [outliers ,1 ],'o' ,markeredgecolor = 'r' ,markerfacecolor = 'w' ,markersize = 10. )
3232 plt = display_2d_data (X , 'bx' )
@@ -72,7 +72,7 @@ def visualizeFit(X,mu,sigma2):
7272 plt .plot (X [:,0 ],X [:,1 ],'bx' )
7373
7474 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)
7676 CS = plt .contour (X1 ,X2 ,Z ,10. ** np .arange (- 20 , 0 , 3 ),color = 'black' ,linewidth = .5 ) # 画等高线,Z的值在10.**np.arange(-20, 0, 3)
7777 #plt.clabel(CS)
7878
@@ -88,9 +88,9 @@ def selectThreshold(yval,pval):
8888 '''计算'''
8989 for epsilon in np .arange (np .min (pval ),np .max (pval ),step ):
9090 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 )
9494 precision = tp / (tp + fp ) # 精准度
9595 recision = tp / (tp + fn ) # 召回率
9696 F1 = (2 * precision * recision )/ (precision + recision ) # F1Score计算公式
0 commit comments