Skip to content

Commit d8bd5f1

Browse files
committed
🐛 fix异常检测F1Score计算
1 parent 0fe8d2e commit d8bd5f1

File tree

2 files changed

+11
-11
lines changed

2 files changed

+11
-11
lines changed

AnomalyDetection/AnomalyDetection.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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计算公式

readme.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1161,9 +1161,9 @@ def selectThreshold(yval,pval):
11611161
'''计算'''
11621162
for epsilon in np.arange(np.min(pval),np.max(pval),step):
11631163
cvPrecision = pval<epsilon
1164-
tp = np.sum((cvPrecision == 1) & (yval == 1)).astype(float) # sum求和是int型的,需要转为float
1165-
fp = np.sum((cvPrecision == 1) & (yval == 0)).astype(float)
1166-
fn = np.sum((cvPrecision == 1) & (yval == 0)).astype(float)
1164+
tp = np.sum((cvPrecision == 1) & (yval == 1).ravel()).astype(float) # sum求和是int型的,需要转为float
1165+
fp = np.sum((cvPrecision == 1) & (yval == 0).ravel()).astype(float)
1166+
fn = np.sum((cvPrecision == 0) & (yval == 1).ravel()).astype(float)
11671167
precision = tp/(tp+fp) # 精准度
11681168
recision = tp/(tp+fn) # 召回率
11691169
F1 = (2*precision*recision)/(precision+recision) # F1Score计算公式

0 commit comments

Comments
 (0)