|
@@ -42,7 +42,7 @@ parser.add_option("-p", "--plot", dest="plot", help="Only plot data (false)", de
|
42
|
42
|
# 5. Open door
|
43
|
43
|
|
44
|
44
|
|
45
|
|
-NumberOfFailures=3 # So far, we have only data for the first 4 types of failures
|
|
45
|
+NumberOfFailures=4 # So far, we have only data for the first 4 types of failures
|
46
|
46
|
datafiles=[[],[]] # 0 for train, 1 for test
|
47
|
47
|
for i in range(NumberOfFailures+1):
|
48
|
48
|
datafiles[0].append([])
|
|
@@ -53,21 +53,21 @@ datafiles[0][0]=['2024-08-07_5_','2024-08-08_5_','2025-01-25_5_','2025-01-26_5_'
|
53
|
53
|
datafiles[0][1]=['2024-12-11_5_', '2024-12-12_5_','2024-12-13_5_']
|
54
|
54
|
datafiles[0][2]=['2024-12-18_5_','2024-12-21_5_','2024-12-22_5_','2024-12-23_5_','2024-12-24_5_']
|
55
|
55
|
datafiles[0][3]=['2024-12-28_5_','2024-12-29_5_','2024-12-30_5_']
|
56
|
|
-#datafiles[0][4]=['2025-02-13_5_']
|
|
56
|
+datafiles[0][4]=['2025-02-13_5_','2025-02-14_5_']
|
57
|
57
|
|
58
|
58
|
if options.transition:
|
59
|
59
|
datafiles[1][0]=['2025-01-27_5_','2025-01-28_5_']
|
60
|
60
|
datafiles[1][1]=['2024-12-14_5_','2024-12-15_5_','2024-12-16_5_'] # with TRANSITION
|
61
|
61
|
datafiles[1][2]=['2024-12-17_5_','2024-12-19_5_','2024-12-25_5_','2024-12-26_5_'] # with TRANSITION
|
62
|
62
|
datafiles[1][3]=['2024-12-27_5_','2024-12-31_5_','2025-01-01_5_'] # with TRANSITION
|
63
|
|
- #datafiles[1][4]=['2025-02-12_5_','2025-02-13_5_']
|
|
63
|
+ datafiles[1][4]=['2025-02-12_5_','2025-02-15_5_','2025-02-16_5_']
|
64
|
64
|
|
65
|
65
|
else:
|
66
|
66
|
datafiles[1][0]=['2025-01-27_5_','2025-01-28_5_']
|
67
|
67
|
datafiles[1][1]=['2024-12-14_5_','2024-12-15_5_']
|
68
|
68
|
datafiles[1][2]=['2024-12-19_5_','2024-12-25_5_','2024-12-26_5_']
|
69
|
69
|
datafiles[1][3]=['2024-12-31_5_','2025-01-01_5_']
|
70
|
|
- #datafiles[1][4]=['2025-02-13_5_']
|
|
70
|
+ datafiles[1][4]=['2025-02-15_5_','2025-02-16_5_']
|
71
|
71
|
|
72
|
72
|
|
73
|
73
|
#datafiles[0][4]=['2025-02-05_5_']
|
|
@@ -86,11 +86,11 @@ features=['r1 s1','r1 s4','r1 s5']
|
86
|
86
|
features=['r1 s5']
|
87
|
87
|
# Feature combination suggested by AKO
|
88
|
88
|
#features=['r1 s1','r1 s4','r1 s5','pa1 apiii']
|
89
|
|
-#features=['r1 s1','r1 s4','r1 s5']
|
|
89
|
+features=['r1 s1','r1 s4','r1 s5']
|
90
|
90
|
#features=['r1 s1','r1 s5','pa1 apiii']
|
91
|
91
|
#features=['r1 s5','pa1 apiii']
|
92
|
92
|
#features=['r1 s1','r1 s5']
|
93
|
|
-features=['r1 s5']
|
|
93
|
+#features=['r1 s5']
|
94
|
94
|
|
95
|
95
|
|
96
|
96
|
|
|
@@ -318,8 +318,8 @@ def plotData():
|
318
|
318
|
|
319
|
319
|
|
320
|
320
|
# 2nd scenario. Go over anomalies and classify it by less error
|
321
|
|
-datalist=[dataTestNorm[0],dataTestNorm[1],dataTestNorm[2],dataTestNorm[3]]
|
322
|
|
-#datalist=[dataTestNorm[0],dataTestNorm[1],dataTestNorm[2],dataTestNorm[3],dataTestNorm[4]]
|
|
321
|
+#datalist=[dataTestNorm[0],dataTestNorm[1],dataTestNorm[2],dataTestNorm[3]]
|
|
322
|
+datalist=[dataTestNorm[0],dataTestNorm[1],dataTestNorm[2],dataTestNorm[3],dataTestNorm[4]]
|
323
|
323
|
x_test=create_sequences(datalist[0],int(options.timesteps))
|
324
|
324
|
for i in range(1,len(datalist)):
|
325
|
325
|
x_test=np.vstack((x_test,create_sequences(datalist[i],int(options.timesteps))))
|
|
@@ -336,7 +336,7 @@ if options.plot:
|
336
|
336
|
plotData()
|
337
|
337
|
exit(0)
|
338
|
338
|
|
339
|
|
-testClasses=[0,1,2,3]
|
|
339
|
+testClasses=[0,1,2,3,4]
|
340
|
340
|
|
341
|
341
|
if not len(testClasses)==len(testRanges):
|
342
|
342
|
print("ERROR: testClasses and testRanges must have same length")
|
|
@@ -395,9 +395,11 @@ def plotData4():
|
395
|
395
|
s+=' '+unitNames[features[indexesToPlot[i]]]
|
396
|
396
|
if NumFeaturesToPlot==1:
|
397
|
397
|
axes.set_ylabel(s)
|
|
398
|
+ axes.set_xlabel('Sample number')
|
398
|
399
|
axes.grid()
|
399
|
400
|
else:
|
400
|
401
|
axes[i].set_ylabel(s)
|
|
402
|
+ axes[NumFeaturesToPlot-1].set_xlabel('Sample number')
|
401
|
403
|
axes[i].grid()
|
402
|
404
|
|
403
|
405
|
for j in range(NumberOfFailures+1):
|
|
@@ -448,7 +450,10 @@ def anomalyMetric(classes,testranges,testclasses):
|
448
|
450
|
FN[classes[k]]+=1
|
449
|
451
|
|
450
|
452
|
for i in range(NumberOfFailures+1):
|
451
|
|
- Sensitivity[i]=TP[i]/(TP[i]+FN[i])
|
|
453
|
+ if (TP[i]+FN[i])>0:
|
|
454
|
+ Sensitivity[i]=TP[i]/(TP[i]+FN[i])
|
|
455
|
+ else:
|
|
456
|
+ Sensitivity[i]=0
|
452
|
457
|
Precision[i]=TP[i]/(TP[i]+FP[i])
|
453
|
458
|
S=Sensitivity.mean()
|
454
|
459
|
P=Precision.mean()
|
|
@@ -460,7 +465,7 @@ def anomalyMetric(classes,testranges,testclasses):
|
460
|
465
|
print("F1-Score: ",F1)
|
461
|
466
|
|
462
|
467
|
anomalyMetric(classes,testRanges,testClasses)
|
463
|
|
-#plotData4()
|
|
468
|
+plotData4()
|
464
|
469
|
exit(0)
|
465
|
470
|
# Compute delay until correct detection for a list of ranges (when transition data exists)
|
466
|
471
|
def computeDelay(l,classes,testRanges,testClasses):
|