für heute Reicht es...
This commit is contained in:
parent
a4b8a9f261
commit
d22e12f54d
|
@ -3,13 +3,11 @@ 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.*;
|
import Presenter.Algorithms.*;
|
||||||
import Presenter.Generator.DatasetGenerator;
|
import Presenter.Generator.DatasetGenerator;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Observable;
|
import java.util.Observable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -21,35 +19,8 @@ import java.util.Observable;
|
||||||
*/
|
*/
|
||||||
public class EvaluateAlgorithms extends Observable {
|
public class EvaluateAlgorithms extends Observable {
|
||||||
|
|
||||||
private Double m;
|
|
||||||
private Double b;
|
|
||||||
private Integer iterationCount;
|
|
||||||
|
|
||||||
private LineModel arrangement;
|
private LineModel arrangement;
|
||||||
|
|
||||||
private LinkedList<Line> lms;
|
|
||||||
private LinkedList<Line> rm;
|
|
||||||
private LinkedList<Line> ts;
|
|
||||||
|
|
||||||
private LinkedList<Point> nodeLms;
|
|
||||||
private LinkedList<Point> nodeTs;
|
|
||||||
|
|
||||||
private String[] lmsResult;
|
|
||||||
private String[] rmResult;
|
|
||||||
private String[] tsResult;
|
|
||||||
/*
|
|
||||||
ret.add(mse(errorValues).toString());
|
|
||||||
ret.add(rmse(errorValues).toString());
|
|
||||||
ret.add(mae(errorValues).toString());
|
|
||||||
ret.add(mdae(errorValues).toString());
|
|
||||||
|
|
||||||
ret.add(mape(perrorValues).toString());
|
|
||||||
ret.add(mdape(perrorValues).toString());
|
|
||||||
ret.add(rmspe(perrorValues).toString());
|
|
||||||
ret.add(rmdspe(perrorValues).toString());
|
|
||||||
*/
|
|
||||||
private String[] names = {"MSE", "RMSE", "MAE", "MDAE", "MAPE", "MDAPE", "RMSPE", "RMDSPE"};
|
|
||||||
|
|
||||||
private Thread lmsThread;
|
private Thread lmsThread;
|
||||||
private Thread rmThread;
|
private Thread rmThread;
|
||||||
private Thread tsThread;
|
private Thread tsThread;
|
||||||
|
@ -58,105 +29,71 @@ public class EvaluateAlgorithms extends Observable {
|
||||||
private Double[] rmRes = new Double[2];
|
private Double[] rmRes = new Double[2];
|
||||||
private Double[] lmsRes = new Double[2];
|
private Double[] lmsRes = new Double[2];
|
||||||
|
|
||||||
public EvaluateAlgorithms(Double m, Double b, Integer iterationCount) {
|
private DatasetGenerator generator;
|
||||||
this.m = m;
|
|
||||||
this.b = b;
|
|
||||||
this.iterationCount = iterationCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
public EvaluateAlgorithms(){
|
private String[][] names = {{"MSE", "RMSE", "MAE", "MDAE"}, {"MAPE", "MDAPE", "RMSPE", "RMDSPE"}};
|
||||||
this.m = null;
|
|
||||||
this.b = null;
|
//übergebene Parameter
|
||||||
this.iterationCount = 1;
|
private int type;
|
||||||
|
private int iterations;
|
||||||
|
private int alg;
|
||||||
|
|
||||||
|
|
||||||
|
public EvaluateAlgorithms(int type, int iterations, int alg){
|
||||||
|
this.arrangement = new LineModel();
|
||||||
|
generator = new DatasetGenerator();
|
||||||
|
arrangement.setLines(generator.generateDataCloud());
|
||||||
|
this.type = type;
|
||||||
|
this.iterations = iterations;
|
||||||
|
this.alg = alg;
|
||||||
|
|
||||||
|
setChanged();
|
||||||
|
String[] msg = {"eval-dataset-generated"};
|
||||||
|
notifyObservers(msg);
|
||||||
|
|
||||||
|
IntersectionCounter counter = new IntersectionCounter();
|
||||||
|
counter.run(arrangement.getLines(), new Interval(-99999, 99999));
|
||||||
|
counter.calculateIntersectionAbscissas(arrangement);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void run() throws InterruptedException {
|
public void run() throws InterruptedException {
|
||||||
|
|
||||||
|
ArrayList<String> result = new ArrayList<>();
|
||||||
|
|
||||||
this.arrangement = new LineModel();
|
switch (type){
|
||||||
|
case 0:
|
||||||
|
for (int i=0;i<iterations;i++) {
|
||||||
|
|
||||||
DatasetGenerator generator;
|
//der alg der gewählt wurde
|
||||||
|
if (alg == 0) {
|
||||||
if (m != null && b != null) {
|
startLMS();
|
||||||
generator = new DatasetGenerator(m, b);
|
result = getScaleDependentMeasure(arrangement.getLines(), lmsRes[0], lmsRes[1]);
|
||||||
} else {
|
} else if (alg == 1) {
|
||||||
generator = new DatasetGenerator();
|
startRM();
|
||||||
}
|
result = getScaleDependentMeasure(arrangement.getLines(), rmRes[0], rmRes[1]);
|
||||||
|
} else {
|
||||||
arrangement.setLines(generator.generateDataCloud());
|
startTS();
|
||||||
setChanged();
|
result = getScaleDependentMeasure(arrangement.getLines(), tsRes[0], tsRes[1]);
|
||||||
String[] msg = {"eval-dataset-generated"};
|
}
|
||||||
notifyObservers(msg);
|
}
|
||||||
|
break;
|
||||||
IntersectionCounter counter = new IntersectionCounter();
|
case 1:
|
||||||
counter.run(arrangement.getLines(), new Interval(-99999, 99999));
|
break;
|
||||||
counter.calculateIntersectionAbscissas(arrangement);
|
}
|
||||||
|
|
||||||
lms = new LinkedList<>(arrangement.getLines());
|
|
||||||
rm = new LinkedList<>(arrangement.getLines());
|
|
||||||
ts = new LinkedList<>(arrangement.getLines());
|
|
||||||
nodeLms = new LinkedList<>(arrangement.getNodes());
|
|
||||||
nodeTs = new LinkedList<>(arrangement.getNodes());
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
lmsThread = new Thread(() -> {
|
|
||||||
LeastMedianOfSquaresEstimator lmsAlg = new LeastMedianOfSquaresEstimator(lms, nodeLms);
|
|
||||||
lmsAlg.run();
|
|
||||||
lmsAlg.getResult();
|
|
||||||
List<Double> errors = sampsonError(arrangement.getLines(), lmsAlg.getSlope(), lmsAlg.getyInterception());
|
|
||||||
List<Double> perrors = percentigeError(arrangement.getLines(), lmsAlg.getSlope(), lmsAlg.getyInterception());
|
|
||||||
|
|
||||||
lmsRes[0] = lmsAlg.getSlope();
|
|
||||||
lmsRes[1] = lmsAlg.getyInterception();
|
|
||||||
lmsResult = getResults(errors,perrors);
|
|
||||||
|
|
||||||
});
|
|
||||||
rmThread = new Thread(() -> {
|
|
||||||
RepeatedMedianEstimator rmAlg = new RepeatedMedianEstimator(rm);
|
|
||||||
rmAlg.run();
|
|
||||||
rmAlg.getResult();
|
|
||||||
List<Double> errors = sampsonError(arrangement.getLines(), rmAlg.getSlope(), rmAlg.getyInterception());
|
|
||||||
List<Double> perrors = percentigeError(arrangement.getLines(), rmAlg.getSlope(), rmAlg.getyInterception());
|
|
||||||
|
|
||||||
rmRes[0] = rmAlg.getSlope();
|
|
||||||
rmRes[1] = rmAlg.getyInterception();
|
|
||||||
rmResult = getResults(errors,perrors);
|
|
||||||
});
|
|
||||||
tsThread = new Thread(() -> {
|
|
||||||
TheilSenEstimator tsAlg = new TheilSenEstimator(ts, nodeTs);
|
|
||||||
tsAlg.run();
|
|
||||||
tsAlg.getResult();
|
|
||||||
List<Double> errors = sampsonError(arrangement.getLines(), tsAlg.getSlope(), tsAlg.getyInterception());
|
|
||||||
List<Double> perrors = percentigeError(arrangement.getLines(), tsAlg.getSlope(), tsAlg.getyInterception());
|
|
||||||
tsRes[0] = tsAlg.getSlope();
|
|
||||||
tsRes[1] = tsAlg.getyInterception();
|
|
||||||
tsResult = getResults(errors,perrors);
|
|
||||||
});
|
|
||||||
|
|
||||||
lmsThread.start();
|
|
||||||
rmThread.start();
|
|
||||||
tsThread.start();
|
|
||||||
|
|
||||||
lmsThread.join();
|
|
||||||
rmThread.join();
|
|
||||||
tsThread.join();
|
|
||||||
|
|
||||||
createGlobalResult();
|
|
||||||
|
|
||||||
|
//createGlobalResult(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void createGlobalResult(){
|
public void createGlobalResult(ArrayList<String> result){
|
||||||
ArrayList<String> result = new ArrayList<>();
|
ArrayList<String> tableInput = new ArrayList<>();
|
||||||
for (int i=0;i<names.length;i++){
|
|
||||||
result.add("eval");
|
for (int i=0;i<names[type].length;i++) {
|
||||||
result.add(names[i]);
|
tableInput.add("eval");
|
||||||
result.add(tsResult[i]);
|
tableInput.add(names[type][i]);
|
||||||
result.add(rmResult[i]);
|
tableInput.add(result.get(i));
|
||||||
result.add(lmsResult[i]);
|
|
||||||
setChanged();
|
setChanged();
|
||||||
notifyObservers(result.stream().toArray(String[]::new));
|
notifyObservers(result.stream().toArray(String[]::new));
|
||||||
result.clear();
|
tableInput.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
String[] separator = {"eval", "", "", "", ""};
|
String[] separator = {"eval", "", "", "", ""};
|
||||||
|
@ -170,116 +107,85 @@ public class EvaluateAlgorithms extends Observable {
|
||||||
//lms res
|
//lms res
|
||||||
lines.add(lmsRes[0]+"");
|
lines.add(lmsRes[0]+"");
|
||||||
lines.add(lmsRes[1]+"");
|
lines.add(lmsRes[1]+"");
|
||||||
|
//
|
||||||
//rm res
|
// //rm res
|
||||||
lines.add(rmRes[0]+"");
|
// lines.add(rmRes[0]+"");
|
||||||
lines.add(rmRes[1]+"");
|
// lines.add(rmRes[1]+"");
|
||||||
|
//
|
||||||
//ts res
|
// //ts res
|
||||||
lines.add(tsRes[0]+"");
|
// lines.add(tsRes[0]+"");
|
||||||
lines.add(tsRes[1]+"");
|
// lines.add(tsRes[1]+"");
|
||||||
|
|
||||||
setChanged();
|
setChanged();
|
||||||
notifyObservers(lines.stream().toArray(String[]::new));
|
notifyObservers(lines.stream().toArray(String[]::new));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void startLMS() throws InterruptedException {
|
||||||
|
lmsThread = new Thread(() -> {
|
||||||
|
LeastMedianOfSquaresEstimator lmsAlg = new LeastMedianOfSquaresEstimator(arrangement.getLines(), arrangement.getNodes());
|
||||||
|
lmsAlg.run();
|
||||||
|
lmsAlg.getResult();
|
||||||
|
lmsRes[0] = lmsAlg.getSlope();
|
||||||
|
lmsRes[1] = lmsAlg.getyInterception();
|
||||||
|
});
|
||||||
|
lmsThread.start();
|
||||||
|
lmsThread.join();
|
||||||
|
}
|
||||||
|
|
||||||
public String[] getResults(List<Double> errorValues, List<Double> perrorValues) {
|
public void startRM() throws InterruptedException {
|
||||||
|
rmThread = new Thread(() -> {
|
||||||
|
RepeatedMedianEstimator rmAlg = new RepeatedMedianEstimator(arrangement.getLines());
|
||||||
|
rmAlg.run();
|
||||||
|
rmAlg.getResult();
|
||||||
|
rmRes[0] = rmAlg.getSlope();
|
||||||
|
rmRes[1] = rmAlg.getyInterception();
|
||||||
|
});
|
||||||
|
rmThread.start();
|
||||||
|
rmThread.join();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void startTS() throws InterruptedException {
|
||||||
|
tsThread = new Thread(() -> {
|
||||||
|
TheilSenEstimator tsAlg = new TheilSenEstimator(arrangement.getLines(), arrangement.getNodes());
|
||||||
|
tsAlg.run();
|
||||||
|
tsAlg.getResult();
|
||||||
|
tsRes[0] = tsAlg.getSlope();
|
||||||
|
tsRes[1] = tsAlg.getyInterception();
|
||||||
|
});
|
||||||
|
tsThread.start();
|
||||||
|
tsThread.join();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public ArrayList<String> getScaleDependentMeasure(LinkedList<Line> lines, Double m, Double b) {
|
||||||
|
ScaleDependentMeasure scaleDependentMeasure = new ScaleDependentMeasure(lines, m, b);
|
||||||
ArrayList<String> ret = new ArrayList<>();
|
ArrayList<String> ret = new ArrayList<>();
|
||||||
ret.add(mse(errorValues).toString());
|
ret.add(scaleDependentMeasure.mse().toString());
|
||||||
ret.add(rmse(errorValues).toString());
|
ret.add(scaleDependentMeasure.rmse().toString());
|
||||||
ret.add(mae(errorValues).toString());
|
ret.add(scaleDependentMeasure.mae().toString());
|
||||||
ret.add(mdae(errorValues).toString());
|
ret.add(scaleDependentMeasure.mdae().toString());
|
||||||
|
|
||||||
ret.add(mape(perrorValues).toString());
|
return ret;
|
||||||
ret.add(mdape(perrorValues).toString());
|
|
||||||
ret.add(rmspe(perrorValues).toString());
|
|
||||||
ret.add(rmdspe(perrorValues).toString());
|
|
||||||
|
|
||||||
|
|
||||||
return ret.stream().toArray(String[]::new);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Skalierungs Abhängige Approximationsgüten */
|
public ArrayList<String> getPercentigeErrorBasedMeasure(LinkedList<Line> lines, Double m, Double b) {
|
||||||
public Double mse(List<Double> errorValues) {
|
PercentageErrorBasedMeasure percentageErrorBasedMeasure = new PercentageErrorBasedMeasure(lines, m, b);
|
||||||
double error = 0;
|
ArrayList<String> ret = new ArrayList<>();
|
||||||
|
ret.add(percentageErrorBasedMeasure.mape().toString());
|
||||||
for (Double d : errorValues) {
|
ret.add(percentageErrorBasedMeasure.mdape().toString());
|
||||||
error += Math.pow(d, 2);
|
ret.add(percentageErrorBasedMeasure.rmspe().toString());
|
||||||
}
|
ret.add(percentageErrorBasedMeasure.rmdspe().toString());
|
||||||
|
return ret;
|
||||||
error /= errorValues.size();
|
|
||||||
|
|
||||||
return error;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Double rmse(List<Double> errorValues) {
|
public ArrayList<String> getScaledErrorBasedMeasure(LinkedList<Line> lines, Double m, Double b){
|
||||||
return Math.sqrt(mse(errorValues));
|
ScaledErrorBasedMeasure scaledErrorBasedMeasure = new ScaledErrorBasedMeasure(lines, m, b);
|
||||||
}
|
ArrayList<String> ret = new ArrayList<>();
|
||||||
|
ret.add(scaledErrorBasedMeasure.mse().toString());
|
||||||
public Double mae(List<Double> errorValues) {
|
ret.add(scaledErrorBasedMeasure.rmse().toString());
|
||||||
double error = 0;
|
ret.add(scaledErrorBasedMeasure.mae().toString());
|
||||||
|
ret.add(scaledErrorBasedMeasure.mdae().toString());
|
||||||
for (Double d : errorValues) {
|
return ret;
|
||||||
error += Math.abs(d);
|
|
||||||
}
|
|
||||||
|
|
||||||
error /= errorValues.size();
|
|
||||||
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Double mdae(List<Double> errorValues) {
|
|
||||||
return FastElementSelector.randomizedSelect((ArrayList<Double>) errorValues, errorValues.size() * 0.5);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Percentege Error Approximation Measures */
|
|
||||||
public Double mape(List<Double> errorValues){
|
|
||||||
return mae(errorValues);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Double mdape(List<Double> errorValues){
|
|
||||||
return mape(errorValues);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Double rmspe(List<Double> errorValues){
|
|
||||||
return rmse(errorValues);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Double rmdspe(List<Double> errorValues){
|
|
||||||
ArrayList squares = new ArrayList();
|
|
||||||
for (Double d : errorValues){
|
|
||||||
squares.add(Math.pow(d,2));
|
|
||||||
}
|
|
||||||
|
|
||||||
return Math.sqrt(FastElementSelector.randomizedSelect(squares, squares.size() * 0.5));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public List<Double> percentigeError(final LinkedList<Line> lines, Double m, Double b){
|
|
||||||
ArrayList<Double> sampsonError = (ArrayList<Double>) sampsonError(lines, m, b);
|
|
||||||
ArrayList<Double> r = new ArrayList<>();
|
|
||||||
|
|
||||||
for (int j=0;j<sampsonError.size();j++){
|
|
||||||
r.add(100 * sampsonError.get(j) / lines.get(j).getB());
|
|
||||||
}
|
|
||||||
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Double> sampsonError(final LinkedList<Line> lines, Double m, Double b) {
|
|
||||||
|
|
||||||
//Liste mit den Fehler zu jedem Punkt
|
|
||||||
List<Double> sampsonerror = new ArrayList<>();
|
|
||||||
|
|
||||||
for (Line line : lines) {
|
|
||||||
Double error = Math.pow(m * line.getM() - line.getB() + b, 2) / (Math.pow(m, 2) + 1);
|
|
||||||
sampsonerror.add(error);
|
|
||||||
}
|
|
||||||
|
|
||||||
return sampsonerror;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
package Presenter.Evaluation;
|
||||||
|
|
||||||
|
import Model.Line;
|
||||||
|
import Presenter.Algorithms.FastElementSelector;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
|
||||||
|
*
|
||||||
|
* @Author: Armin Wolf
|
||||||
|
* @Email: a_wolf28@uni-muenster.de
|
||||||
|
* @Date: 07.09.2017.
|
||||||
|
*/
|
||||||
|
public class PercentageErrorBasedMeasure {
|
||||||
|
|
||||||
|
|
||||||
|
private ArrayList<Double> percentageError;
|
||||||
|
|
||||||
|
public PercentageErrorBasedMeasure(final LinkedList<Line> lines, Double m, Double b){
|
||||||
|
|
||||||
|
ArrayList<Double> sampson = new ArrayList<>();
|
||||||
|
|
||||||
|
for (Line line : lines) {
|
||||||
|
Double e = Math.pow(m * line.getM() - line.getB() + b, 2) / (Math.pow(m, 2) + 1);
|
||||||
|
sampson.add(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
percentageError = new ArrayList<>();
|
||||||
|
|
||||||
|
for (int j=0;j<sampson.size();j++){
|
||||||
|
percentageError.add(100 * sampson.get(j) / lines.get(j).getB());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Percentege Error Approximation Measures */
|
||||||
|
//verschiedene Eingaben für einen Alg.
|
||||||
|
public Double mape(){
|
||||||
|
double error = 0;
|
||||||
|
|
||||||
|
for (Double d : percentageError) {
|
||||||
|
error += Math.abs(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
error /= percentageError.size();
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double mdape(){
|
||||||
|
|
||||||
|
ArrayList<Double> abs = new ArrayList<>();
|
||||||
|
|
||||||
|
for (Double d : percentageError){
|
||||||
|
abs.add(Math.abs(d));
|
||||||
|
}
|
||||||
|
|
||||||
|
return FastElementSelector.randomizedSelect(abs, abs.size() * 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double rmspe(){
|
||||||
|
double error = 0;
|
||||||
|
|
||||||
|
for (Double d : percentageError) {
|
||||||
|
error += Math.pow(d, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
error /= percentageError.size();
|
||||||
|
|
||||||
|
return Math.sqrt(error);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double rmdspe(){
|
||||||
|
ArrayList squares = new ArrayList();
|
||||||
|
for (Double d : percentageError){
|
||||||
|
squares.add(Math.pow(d,2));
|
||||||
|
}
|
||||||
|
|
||||||
|
return Math.sqrt(FastElementSelector.randomizedSelect(squares, squares.size() * 0.5));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
package Presenter.Evaluation;
|
||||||
|
|
||||||
|
import Model.Line;
|
||||||
|
import Presenter.Algorithms.FastElementSelector;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
|
||||||
|
*
|
||||||
|
* @Author: Armin Wolf
|
||||||
|
* @Email: a_wolf28@uni-muenster.de
|
||||||
|
* @Date: 07.09.2017.
|
||||||
|
*/
|
||||||
|
public class ScaleDependentMeasure {
|
||||||
|
|
||||||
|
private ArrayList<Double> errorValues;
|
||||||
|
|
||||||
|
public ScaleDependentMeasure(final LinkedList<Line> lines, Double m, Double b){
|
||||||
|
//Liste mit den Fehler zu jedem Punkt
|
||||||
|
errorValues = new ArrayList<>();
|
||||||
|
|
||||||
|
for (Line line : lines) {
|
||||||
|
Double e = Math.pow(m * line.getM() - line.getB() + b, 2) / (Math.pow(m, 2) + 1);
|
||||||
|
errorValues.add(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Skalierungs Abhängige Approximationsgüten */
|
||||||
|
//unterschiedliche Alg.- auf einem Datensatz
|
||||||
|
public Double mse() {
|
||||||
|
double error = 0;
|
||||||
|
|
||||||
|
for (Double d : errorValues) {
|
||||||
|
error += Math.pow(d, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
error /= errorValues.size();
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double rmse() {
|
||||||
|
return Math.sqrt(mse());
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double mae() {
|
||||||
|
double error = 0;
|
||||||
|
for (Double d : errorValues) {
|
||||||
|
error += Math.abs(d);
|
||||||
|
}
|
||||||
|
error /= errorValues.size();
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double mdae() {
|
||||||
|
return FastElementSelector
|
||||||
|
.randomizedSelect(errorValues, errorValues.size() * 0.5);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,71 @@
|
||||||
|
package Presenter.Evaluation;
|
||||||
|
|
||||||
|
import Model.Line;
|
||||||
|
import Presenter.Algorithms.FastElementSelector;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
|
||||||
|
*
|
||||||
|
* @Author: Armin Wolf
|
||||||
|
* @Email: a_wolf28@uni-muenster.de
|
||||||
|
* @Date: 07.09.2017.
|
||||||
|
*/
|
||||||
|
public class ScaledErrorBasedMeasure {
|
||||||
|
|
||||||
|
|
||||||
|
private ArrayList<Double> scaledError;
|
||||||
|
|
||||||
|
public ScaledErrorBasedMeasure(final LinkedList<Line> lines, Double m, Double b){
|
||||||
|
//Liste mit den Fehler zu jedem Punkt
|
||||||
|
ArrayList<Double> sampson = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
|
Double denum = 0d;
|
||||||
|
for (int i=2;i<lines.size();i++){
|
||||||
|
denum += Math.abs(lines.get(i).getM() - lines.get(i-1).getM());
|
||||||
|
}
|
||||||
|
denum *= 1/(lines.size() - 1);
|
||||||
|
|
||||||
|
for (Line line : lines) {
|
||||||
|
Double e = Math.pow(m * line.getM() - line.getB() + b, 2) / (Math.pow(m, 2) + 1);
|
||||||
|
sampson.add(e);
|
||||||
|
|
||||||
|
Double val = e / (denum);
|
||||||
|
scaledError.add(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Skalierungs Abhängige Approximationsgüten */
|
||||||
|
//unterschiedliche Alg.- auf einem Datensatz
|
||||||
|
public Double mse() {
|
||||||
|
double error = 0;
|
||||||
|
for (Double d : scaledError) {
|
||||||
|
error += Math.pow(d, 2);
|
||||||
|
}
|
||||||
|
error /= scaledError.size();
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double rmse() {
|
||||||
|
return Math.sqrt(mse());
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double mae() {
|
||||||
|
double error = 0;
|
||||||
|
for (Double d : scaledError) {
|
||||||
|
error += Math.abs(d);
|
||||||
|
}
|
||||||
|
error /= scaledError.size();
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Double mdae() {
|
||||||
|
return FastElementSelector
|
||||||
|
.randomizedSelect(scaledError, scaledError.size() * 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -312,7 +312,7 @@ public class Presenter implements Observer {
|
||||||
if (evalThread == null || !evalThread.isAlive()){
|
if (evalThread == null || !evalThread.isAlive()){
|
||||||
evalThread = new Thread(() ->{
|
evalThread = new Thread(() ->{
|
||||||
try {
|
try {
|
||||||
eval = new EvaluateAlgorithms();
|
eval = new EvaluateAlgorithms(0,1,0);
|
||||||
eval.addObserver(this);
|
eval.addObserver(this);
|
||||||
eval.run();
|
eval.run();
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
|
|
Loading…
Reference in New Issue