[ce076b]: / src / biodiscml / TestingAndEvaluate.java

Download this file

123 lines (109 with data), 4.5 kB

  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
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/*
* Test and evaluate
*/
package biodiscml;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.HashMap;
import utils.Weka_module;
/**
*
* @author Mickael
*/
public class TestingAndEvaluate {
TestingAndEvaluate() {
}
/**
* class exist and we know the outcome, so we evaluate the predictor
*
* @param modelFile
* @param TEST_FILE
* @param TEST_RESULTS_FILE
*/
public void TestingAndEvaluate(String modelFile, String TEST_FILE,
String TEST_RESULTS_FILE, boolean missingClass) {
Weka_module weka = new Weka_module();
weka.setCSVFile(new File(TEST_FILE));
weka.csvToArff(Main.isClassification);
getClassesAndFeaturesFromModel(modelFile, weka);
weka.setDataFromArff();
Weka_module.ClassificationResultsObject cr = null;
Weka_module.RegressionResultsObject rr = null;
try {
PrintWriter pw = new PrintWriter(new FileWriter(TEST_RESULTS_FILE));
System.out.println("Test results stored in " + TEST_RESULTS_FILE);
if (Main.isClassification) {
cr = (Weka_module.ClassificationResultsObject) weka.testClassifierFromFileSource(new File(weka.ARFFfile), modelFile, Main.isClassification);
System.out.println("instance\tactual\tpredicted\terror\t" + cr.classes + "\n" + cr.predictions);
pw.println("instance\tactual\tpredicted\terror\t" + cr.classes + "\n" + cr.predictions);
if (!missingClass) {
System.out.println(cr.toStringDetailsTesting());
pw.println(cr.toStringDetailsTesting());
}
} else {
rr = (Weka_module.RegressionResultsObject) weka.testClassifierFromFileSource(new File(weka.ARFFfile), modelFile, Main.isClassification);
System.out.println("instance\tactual\tpredicted\terror\t" + cr.classes + "\n" + rr.predictions);
pw.println("instance\tactual\tpredicted\terror\t" + cr.classes + "\n" + rr.predictions);
if (!missingClass) {
System.out.println(rr.toStringDetails());
pw.println(rr.toStringDetails());
}
}
pw.flush();
pw.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
*
* @param modelFile
* @param weka
* @param TEST_FILE
* @param TEST_RESULTS_FILE
*/
public void getClassesAndFeaturesFromModel(String modelFile, Weka_module weka) {
//get classes from model
String classes = weka.getClassesFromClassifier(modelFile, false).get(0);
HashMap<String, String> hmFeatures = weka.getFullFeaturesFromClassifier(modelFile);
//load model
File arffFile = new File(weka.ARFFfile);
File newarffFile = new File(weka.ARFFfile + ".tmp");
try {
BufferedReader br = new BufferedReader(new FileReader(arffFile));
PrintWriter pw = new PrintWriter(new FileWriter(newarffFile));
String line = "";
while (br.ready()) {
line = br.readLine();
if (line.contains("@attribute class {")) {
pw.println(classes);
} else {
if (line.startsWith("@attribute Instance ")) {
pw.println(line);
} else if (line.startsWith("@attribute ") && line.contains("{") && line.contains("}")) {
String featureName = line.replaceAll("\\{.*", "").replace(("@attribute"), "").trim();
if (hmFeatures.get(featureName) != null) {
pw.println("@attribute " + featureName + " " + hmFeatures.get(featureName));
} else {
pw.println(line);
}
} else {
pw.println(line);
}
}
}
pw.close();
br.close();
arffFile.delete();
newarffFile.renameTo(arffFile);
} catch (Exception e) {
if (Main.debug) {
e.printStackTrace();
}
}
}
}