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 scaledError; public ScaledErrorBasedMeasure(final LinkedList lines, Double m, Double b) { //Liste mit den Fehler zu jedem Punkt ArrayList 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); } }