algorithms-for-computing-li.../src/main/java/Presenter/Evaluation/ScaledErrorBasedMeasure.java

72 lines
1.6 KiB
Java

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);
}
}