fix in der Visualisierung der Evaluation

This commit is contained in:
Armin Wolf 2017-09-12 07:58:33 +02:00
parent 634d9361ea
commit c4cb0ca3e7
2 changed files with 40 additions and 27 deletions

View File

@ -3,6 +3,7 @@ package presenter.evaluation;
import model.Interval; import model.Interval;
import model.Line; import model.Line;
import model.LineModel; import model.LineModel;
import model.Point;
import presenter.algorithms.IntersectionCounter; import presenter.algorithms.IntersectionCounter;
import presenter.algorithms.LeastMedianOfSquaresEstimator; import presenter.algorithms.LeastMedianOfSquaresEstimator;
import presenter.algorithms.RepeatedMedianEstimator; import presenter.algorithms.RepeatedMedianEstimator;
@ -24,6 +25,13 @@ public class EvaluateAlgorithms extends Observable {
private LineModel arrangement; private LineModel arrangement;
private LinkedList<Line> lmsL;
private LinkedList<Line> rmL;
private LinkedList<Line> tsL;
private LinkedList<Point> lmsP;
private LinkedList<Point> tsP;
private Thread lmsThread; private Thread lmsThread;
private Thread rmThread; private Thread rmThread;
private Thread tsThread; private Thread tsThread;
@ -34,7 +42,7 @@ public class EvaluateAlgorithms extends Observable {
private DatasetGenerator generator; private DatasetGenerator generator;
private String[][] names = {{"MSE", "RMSE", "MAE", "MDAE"}, {"MAPE", "MDAPE", "RMSPE", "RMDSPE"}}; private String[][] names = {{"MSE", "RMSE", "MAE", "MDAE","Steigung","y-Achsenabschnitt"}, {"MAPE", "MDAPE", "RMSPE", "RMDSPE","Steigung","y-Achsenabschnitt"}};
//übergebene Parameter //übergebene Parameter
private int type; private int type;
@ -75,19 +83,28 @@ public class EvaluateAlgorithms extends Observable {
IntersectionCounter counter = new IntersectionCounter(); IntersectionCounter counter = new IntersectionCounter();
counter.run(arrangement.getLines(), new Interval(-99999, 99999)); counter.run(arrangement.getLines(), new Interval(-99999, 99999));
counter.calculateIntersectionAbscissas(arrangement); counter.calculateIntersectionAbscissas(arrangement);
lmsL = new LinkedList<>(arrangement.getLines());
rmL = new LinkedList<>(arrangement.getLines());
tsL = new LinkedList<>(arrangement.getLines());
lmsP = new LinkedList<>(arrangement.getNodes());
tsP = new LinkedList<>(arrangement.getNodes());
} }
public void run() throws InterruptedException { public void run() throws InterruptedException {
setChanged(); setChanged();
String[] msg = {"eval-dataset-generated"}; String[] msg = {"eval-dataset-generated"};
notifyObservers(msg); notifyObservers(msg);
ArrayList<String> result; ArrayList<String> result;
ArrayList<ArrayList<String>> multipleResults = new ArrayList<>(); ArrayList<ArrayList<String>> multipleResults = new ArrayList<>();
startLMS();
startRM();
startTS();
switch (type) { switch (type) {
case 0: case 0:
result = new ArrayList<>();
//der alg der gewählt wurde //der alg der gewählt wurde
if (alg == 0) { if (alg == 0) {
startLMS(); startLMS();
@ -106,12 +123,9 @@ public class EvaluateAlgorithms extends Observable {
sendTableApproximationData(result, alg); sendTableApproximationData(result, alg);
break; break;
case 1: case 1:
result = new ArrayList<>();
ArrayList<Double[]> lineRes; ArrayList<Double[]> lineRes;
switch (alg) { switch (alg) {
case 3: case 3:
startLMS();
startRM();
result = getPercentigeErrorBasedMeasure(arrangement.getLines(), lmsRes[0], lmsRes[1]); result = getPercentigeErrorBasedMeasure(arrangement.getLines(), lmsRes[0], lmsRes[1]);
multipleResults.add(result); multipleResults.add(result);
@ -123,12 +137,10 @@ public class EvaluateAlgorithms extends Observable {
lineRes = new ArrayList<>(); lineRes = new ArrayList<>();
lineRes.add(lmsRes); lineRes.add(lmsRes);
lineRes.add(rmRes); lineRes.add(rmRes);
sendPloteLineResults(lineRes, new Integer[]{0, 1}); sendPloteLineResults(lineRes, new Integer[]{0,1});
break; break;
case 4: case 4:
startLMS();
startTS();
result = getPercentigeErrorBasedMeasure(arrangement.getLines(), lmsRes[0], lmsRes[1]); result = getPercentigeErrorBasedMeasure(arrangement.getLines(), lmsRes[0], lmsRes[1]);
multipleResults.add(result); multipleResults.add(result);
result = fillPseudoResults(); result = fillPseudoResults();
@ -142,9 +154,6 @@ public class EvaluateAlgorithms extends Observable {
sendPloteLineResults(lineRes, new Integer[]{0, 2}); sendPloteLineResults(lineRes, new Integer[]{0, 2});
break; break;
case 5: case 5:
startRM();
startTS();
result = fillPseudoResults(); result = fillPseudoResults();
multipleResults.add(result); multipleResults.add(result);
result = getPercentigeErrorBasedMeasure(arrangement.getLines(), rmRes[0], rmRes[1]); result = getPercentigeErrorBasedMeasure(arrangement.getLines(), rmRes[0], rmRes[1]);
@ -158,10 +167,6 @@ public class EvaluateAlgorithms extends Observable {
sendPloteLineResults(lineRes, new Integer[]{1, 2}); sendPloteLineResults(lineRes, new Integer[]{1, 2});
break; break;
case 6: case 6:
startLMS();
startRM();
startTS();
result = getPercentigeErrorBasedMeasure(arrangement.getLines(), lmsRes[0], lmsRes[1]); result = getPercentigeErrorBasedMeasure(arrangement.getLines(), lmsRes[0], lmsRes[1]);
multipleResults.add(result); multipleResults.add(result);
result = getPercentigeErrorBasedMeasure(arrangement.getLines(), rmRes[0], rmRes[1]); result = getPercentigeErrorBasedMeasure(arrangement.getLines(), rmRes[0], rmRes[1]);
@ -266,8 +271,9 @@ public class EvaluateAlgorithms extends Observable {
} }
public void startLMS() throws InterruptedException { public void startLMS() throws InterruptedException {
lmsThread = new Thread(() -> { lmsThread = new Thread(() -> {
LeastMedianOfSquaresEstimator lmsAlg = new LeastMedianOfSquaresEstimator(arrangement.getLines(), arrangement.getNodes()); LeastMedianOfSquaresEstimator lmsAlg = new LeastMedianOfSquaresEstimator(lmsL,lmsP);
lmsAlg.run(); lmsAlg.run();
lmsAlg.getResult(); lmsAlg.getResult();
lmsRes[0] = lmsAlg.getSlope(); lmsRes[0] = lmsAlg.getSlope();
@ -279,7 +285,7 @@ public class EvaluateAlgorithms extends Observable {
public void startRM() throws InterruptedException { public void startRM() throws InterruptedException {
rmThread = new Thread(() -> { rmThread = new Thread(() -> {
RepeatedMedianEstimator rmAlg = new RepeatedMedianEstimator(arrangement.getLines()); RepeatedMedianEstimator rmAlg = new RepeatedMedianEstimator(rmL);
rmAlg.run(); rmAlg.run();
rmAlg.getResult(); rmAlg.getResult();
rmRes[0] = rmAlg.getSlope(); rmRes[0] = rmAlg.getSlope();
@ -287,11 +293,12 @@ public class EvaluateAlgorithms extends Observable {
}); });
rmThread.start(); rmThread.start();
rmThread.join(); rmThread.join();
} }
public void startTS() throws InterruptedException { public void startTS() throws InterruptedException {
tsThread = new Thread(() -> { tsThread = new Thread(() -> {
TheilSenEstimator tsAlg = new TheilSenEstimator(arrangement.getLines(), arrangement.getNodes()); TheilSenEstimator tsAlg = new TheilSenEstimator(tsL,tsP);
tsAlg.run(); tsAlg.run();
tsAlg.getResult(); tsAlg.getResult();
tsRes[0] = tsAlg.getSlope(); tsRes[0] = tsAlg.getSlope();
@ -302,34 +309,40 @@ public class EvaluateAlgorithms extends Observable {
} }
public ArrayList<String> getScaleDependentMeasure(LinkedList<Line> lines, Double m, Double b) { public ArrayList<String> getScaleDependentMeasure(final LinkedList<Line> lines, final Double m, final Double b) {
ScaleDependentMeasure scaleDependentMeasure = new ScaleDependentMeasure(lines, m, b); ScaleDependentMeasure scaleDependentMeasure = new ScaleDependentMeasure(lines, m, b);
ArrayList<String> ret = new ArrayList<>(); ArrayList<String> ret = new ArrayList<>();
ret.add(scaleDependentMeasure.mse().toString()); ret.add(scaleDependentMeasure.mse().toString());
ret.add(scaleDependentMeasure.rmse().toString()); ret.add(scaleDependentMeasure.rmse().toString());
ret.add(scaleDependentMeasure.mae().toString()); ret.add(scaleDependentMeasure.mae().toString());
ret.add(scaleDependentMeasure.mdae().toString()); ret.add(scaleDependentMeasure.mdae().toString());
ret.add(m.toString());
ret.add(b.toString());
return ret; return ret;
} }
public ArrayList<String> getPercentigeErrorBasedMeasure(LinkedList<Line> lines, Double m, Double b) { public ArrayList<String> getPercentigeErrorBasedMeasure(final LinkedList<Line> lines, final Double m, final Double b) {
PercentageErrorBasedMeasure percentageErrorBasedMeasure = new PercentageErrorBasedMeasure(lines, m, b); PercentageErrorBasedMeasure percentageErrorBasedMeasure = new PercentageErrorBasedMeasure(lines, m, b);
ArrayList<String> ret = new ArrayList<>(); ArrayList<String> ret = new ArrayList<>();
ret.add(percentageErrorBasedMeasure.mape().toString()); ret.add(percentageErrorBasedMeasure.mape().toString());
ret.add(percentageErrorBasedMeasure.mdape().toString()); ret.add(percentageErrorBasedMeasure.mdape().toString());
ret.add(percentageErrorBasedMeasure.rmspe().toString()); ret.add(percentageErrorBasedMeasure.rmspe().toString());
ret.add(percentageErrorBasedMeasure.rmdspe().toString()); ret.add(percentageErrorBasedMeasure.rmdspe().toString());
ret.add(m.toString());
ret.add(b.toString());
return ret; return ret;
} }
public ArrayList<String> getScaledErrorBasedMeasure(LinkedList<Line> lines, Double m, Double b) { public ArrayList<String> getScaledErrorBasedMeasure(final LinkedList<Line> lines, final Double m, final Double b) {
ScaledErrorBasedMeasure scaledErrorBasedMeasure = new ScaledErrorBasedMeasure(lines, m, b); ScaledErrorBasedMeasure scaledErrorBasedMeasure = new ScaledErrorBasedMeasure(lines, m, b);
ArrayList<String> ret = new ArrayList<>(); ArrayList<String> ret = new ArrayList<>();
ret.add(scaledErrorBasedMeasure.mse().toString()); ret.add(scaledErrorBasedMeasure.mse().toString());
ret.add(scaledErrorBasedMeasure.rmse().toString()); ret.add(scaledErrorBasedMeasure.rmse().toString());
ret.add(scaledErrorBasedMeasure.mae().toString()); ret.add(scaledErrorBasedMeasure.mae().toString());
ret.add(scaledErrorBasedMeasure.mdae().toString()); ret.add(scaledErrorBasedMeasure.mdae().toString());
ret.add(m.toString());
ret.add(b.toString());
return ret; return ret;
} }
@ -339,10 +352,11 @@ public class EvaluateAlgorithms extends Observable {
result.add(" "); result.add(" ");
result.add(" "); result.add(" ");
result.add(" "); result.add(" ");
result.add(" ");
result.add(" ");
return result; return result;
} }
public LinkedList<Line> getData() { public LinkedList<Line> getData() {
return arrangement.getLines(); return arrangement.getLines();
} }

View File

@ -149,7 +149,6 @@ public class EvaluationPanel extends JPanel {
//Tabelle //Tabelle
model.setColumnIdentifiers(selections); model.setColumnIdentifiers(selections);
table.setDragEnabled(true); table.setDragEnabled(true);
JScrollPane scrollPane = new JScrollPane(table); JScrollPane scrollPane = new JScrollPane(table);
@ -293,9 +292,9 @@ public class EvaluationPanel extends JPanel {
String[] name = {"LMS", "RM", "TS"}; String[] name = {"LMS", "RM", "TS"};
for (Double[] o : alg) { for (Double[] o : alg) {
Double m = o[1];
Double b = o[1];
int i = o[0].intValue(); int i = o[0].intValue();
Double m = o[1];
Double b = o[2];
plotPanel.addLineToPlot(m, b, color[i], name[i]); plotPanel.addLineToPlot(m, b, color[i], name[i]);
} }
} }