-
Notifications
You must be signed in to change notification settings - Fork 0
/
EvaluationMain.R
88 lines (68 loc) · 3.41 KB
/
EvaluationMain.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
###############################################################################
# #
# GECCO 2018 Industrial Challenge - Main Evaluation #
# #
# Run this file to test and evaluate your Detector #
# #
###############################################################################
###############################################################################
### initialize workspace ######################################################
rm(list=ls());
set.seed(2);
baseDir <- getwd()
dataDir <- paste(baseDir, "Data", sep="/")
submissionDir <- paste(baseDir, "Detectors", sep="/")
librariesDir <- paste(baseDir, "Lib", sep="/")
setwd(librariesDir)
source("f1score.R")
###############################################################################
### read training data #######################################################
#timeSeriesData <- data.frame(X1=(runif(n = 100)*100), X2=(runif(n = 100)*100), X3=(runif(n = 100)*100), EVENT=(runif(n = 100)+0.03)>=1, Prediction=NA)
setwd(dataDir)
trainingData <- readRDS(file = "waterDataTraining.RDS")
l <- length(trainingData[,1])
sub <- sample(1:l,2*l/3)
trainSet = trainingData[sub,]
testSet = trainingData[-sub,]
trainSet$EVENT[trainSet$EVENT == "True"] <- 1
trainSet$EVENT[trainSet$EVENT == "False"] <- 0
testSet$EVENT[testSet$EVENT == "True"] <- 1
testSet$EVENT[testSet$EVENT == "False"] <- 0
trainSet$EVENT <- as.factor(trainSet$EVENT)
testSet$EVENT <- as.factor(testSet$EVENT)
###############################################################################
### execute and evaluate all detectors ########################################
setwd(submissionDir)
allDetectors <- dir(pattern = "*Detector.R")
cat(allDetectors)
completeResult <- NULL
for (submission in allDetectors){ # submission <- allDetectors[6]
## Load detector
source(submission)
submissionOutline <- getOutline()
cat(paste("\nRunning Submission: ", submissionOutline$NAME))
## Run detector
predictionResult <- rep(NA, nrow(testSet)) # empty result array
booster <- train(trainSet)
predictionResult <- detect(dataset = testSet[, -11], booster)
## Evaluate prediction using F1 score
if(class(predictionResult) == "list"){
predictionResult = as.numeric(predictionResult$class)
}
result <- calculateScore(observations = as.numeric(levels(testSet$EVENT))[testSet$EVENT], predictions = predictionResult)
## Write evaluation result to result table
SubmissionResult <- data.frame(SUBMISSION=submissionOutline$NAME, TP=result$TP, FP=result$FP, TN=result$TN, FN=result$FN, RESULT=result$SCORE, stringsAsFactors = FALSE)
if (is.null(completeResult)){
completeResult <- SubmissionResult
} else {
completeResult <- rbind(completeResult, SubmissionResult)
}
}
cat("\nEvaluation finished:\n")
setwd(baseDir)
###############################################################################
### show results ##############################################################
## Largest value for result wins
winningIndex <- which(max(completeResult$RESULT) == completeResult$RESULT)
cat(paste("\nSubmission: *", completeResult$SUBMISSION[winningIndex], "* wins.\nSee data.frame: completeResult for more Details.", sep="" ))
completeResult