2020-03-21 00:37:09 +00:00
|
|
|
package de.wwwu.awolf.presenter.evaluation;
|
2017-09-10 15:45:47 +00:00
|
|
|
|
2020-03-21 00:37:09 +00:00
|
|
|
import de.wwwu.awolf.model.Line;
|
|
|
|
import de.wwwu.awolf.presenter.util.FastElementSelector;
|
2017-09-10 15:45:47 +00:00
|
|
|
|
|
|
|
import java.util.ArrayList;
|
2020-03-21 00:37:09 +00:00
|
|
|
import java.util.List;
|
2017-09-10 15:45:47 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* 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;
|
|
|
|
|
2017-10-15 10:45:47 +00:00
|
|
|
/**
|
|
|
|
* Konstruktor
|
2020-03-20 17:08:18 +00:00
|
|
|
*
|
2017-10-15 10:45:47 +00:00
|
|
|
* @param lines Liste des Geraden
|
|
|
|
* @param m Steigung
|
|
|
|
* @param b y-Achsenabschnitt
|
|
|
|
*/
|
2020-03-21 00:37:09 +00:00
|
|
|
public ScaleDependentMeasure(final List<Line> lines, Double m, Double b) {
|
2017-09-10 15:45:47 +00:00
|
|
|
//Liste mit den Fehler zu jedem Punkt
|
|
|
|
errorValues = new ArrayList<>();
|
|
|
|
|
2017-10-15 10:45:47 +00:00
|
|
|
//Sampson-Fehler Berechnung
|
2017-09-10 15:45:47 +00:00
|
|
|
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
|
2017-10-15 10:45:47 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Mean Square Error:
|
2020-03-20 17:08:18 +00:00
|
|
|
*
|
2017-10-15 10:45:47 +00:00
|
|
|
* @return Ergebnis
|
|
|
|
*/
|
2017-09-10 15:45:47 +00:00
|
|
|
public Double mse() {
|
|
|
|
double error = 0;
|
|
|
|
|
|
|
|
for (Double d : errorValues) {
|
|
|
|
error += Math.pow(d, 2);
|
|
|
|
}
|
|
|
|
|
|
|
|
error /= errorValues.size();
|
|
|
|
|
|
|
|
return error;
|
|
|
|
}
|
|
|
|
|
2017-10-15 10:45:47 +00:00
|
|
|
/**
|
|
|
|
* Root Mean Square Error
|
2020-03-20 17:08:18 +00:00
|
|
|
*
|
2017-10-15 10:45:47 +00:00
|
|
|
* @return Ergebnis
|
|
|
|
*/
|
2017-09-10 15:45:47 +00:00
|
|
|
public Double rmse() {
|
|
|
|
return Math.sqrt(mse());
|
|
|
|
}
|
|
|
|
|
2017-10-15 10:45:47 +00:00
|
|
|
/**
|
|
|
|
* Mean Absolute Error
|
2020-03-20 17:08:18 +00:00
|
|
|
*
|
2017-10-15 10:45:47 +00:00
|
|
|
* @return Ergebnis
|
|
|
|
*/
|
2017-09-10 15:45:47 +00:00
|
|
|
public Double mae() {
|
|
|
|
double error = 0;
|
|
|
|
for (Double d : errorValues) {
|
|
|
|
error += Math.abs(d);
|
|
|
|
}
|
|
|
|
error /= errorValues.size();
|
|
|
|
return error;
|
|
|
|
}
|
|
|
|
|
2017-10-15 10:45:47 +00:00
|
|
|
/**
|
|
|
|
* Median Absolute Error
|
2020-03-20 17:08:18 +00:00
|
|
|
*
|
2017-10-15 10:45:47 +00:00
|
|
|
* @return Ergebnis
|
|
|
|
*/
|
2017-09-10 15:45:47 +00:00
|
|
|
public Double mdae() {
|
|
|
|
return FastElementSelector
|
|
|
|
.randomizedSelect(errorValues, errorValues.size() * 0.5);
|
|
|
|
}
|
|
|
|
}
|