Evaluation Fix.

Terminnierung des Alg. Theil-Sen ist jetzt garantiert. Parameter werden vom der Evaluations Klasse eingelesen und berücksichtigt. Zellen sind nicht mehr Editable. Weitere Approximationsgüten fehlen noch. Die Row und Cols könnten getauscht werden.. Blt wäre das Sinnvoller..
This commit is contained in:
Armin Wolf 2017-08-03 08:27:38 +02:00
parent 7f015eaa0c
commit 2eb1768052
6 changed files with 144 additions and 81 deletions

View File

@ -127,8 +127,13 @@ public class TheilSenEstimator extends Observable implements Algorithm {
* @return Boolscher Wert ob die Bedingung erfüllt ist
*/
private Boolean checkCondition() {
Double kthElement = FastElementSelector.randomizedSelect(xCoordinates, k);
Boolean cond1 = (kthElement > aVariant) && (kthElement <= bVariant);
//Double kthElement = FastElementSelector.randomizedSelect(xCoordinates, k);
//Boolean cond1 = (kthElement > aVariant) && (kthElement <= bVariant);
Boolean conda = k > getIntervalSize(NEGATIV_INF, aVariant, setOfIntersections);
Boolean condb = k <= getIntervalSize(NEGATIV_INF, bVariant, setOfIntersections);
Boolean cond1 = conda && condb;
Boolean cond2 = (getIntervalSize(aVariant+1, bVariant+1, intervalIntersections) <= ((11 * N) / Math.sqrt(r)));
return cond1 && cond2;

View File

@ -1,8 +1,8 @@
package Presenter.Evaluation;
import Model.LineModel;
import Model.Interval;
import Model.Line;
import Model.LineModel;
import Presenter.Algorithms.*;
import Presenter.Generator.DatasetGenerator;
@ -20,6 +20,10 @@ import java.util.Observable;
*/
public class EvaluateAlgorithms extends Observable {
private Double m;
private Double b;
private Integer iterationCount;
private LineModel arrangement;
private Object[] lmsResult;
private Object[] rmResult;
@ -29,13 +33,31 @@ public class EvaluateAlgorithms extends Observable{
private Thread rmThread;
private Thread tsThread;
public EvaluateAlgorithms(){}
public EvaluateAlgorithms(Double m, Double b, Integer iterationCount) {
this.m = m;
this.b = b;
this.iterationCount = iterationCount;
}
public EvaluateAlgorithms(){
this.m = null;
this.b = null;
this.iterationCount = 1;
}
public void run() throws InterruptedException {
for (int i = 0; i < iterationCount; i++) {
this.arrangement = new LineModel();
DatasetGenerator generator = new DatasetGenerator();
DatasetGenerator generator;
if (m != null && b != null) {
generator = new DatasetGenerator(m, b);
} else {
generator = new DatasetGenerator();
}
arrangement.setLines(generator.generateDataset());
IntersectionCounter counter = new IntersectionCounter();
@ -79,21 +101,22 @@ public class EvaluateAlgorithms extends Observable{
lmsThread.join();
rmThread.join();
tsThread.join();
}
}
public String[] getResults(List<Double> errorValues, String name) {
String[] ret = new String[6];
ret[0] = name;
ret[1] = mse(errorValues).toString();
ret[2] = rmse(errorValues).toString();
ret[3] = mae(errorValues).toString();
ret[4] = mdae(errorValues).toString();
ret[5] = "eval";
ArrayList<String> ret = new ArrayList<>();
ret.add("eval");
ret.add(name);
ret.add(mse(errorValues).toString());
ret.add(rmse(errorValues).toString());
ret.add(mae(errorValues).toString());
ret.add(mdae(errorValues).toString());
return ret;
return ret.stream().toArray(String[]::new);
}
/* Skalierungs Abhängige Approximationsgüten */

View File

@ -14,17 +14,29 @@ import java.util.Random;
*/
public class DatasetGenerator {
private Double m;
private Double b;
private Random random;
public DatasetGenerator(){}
public DatasetGenerator(Double m, Double b){
this.m = m;
this.b = b;
random = new Random();
random.setSeed(9999);
}
public DatasetGenerator(){
random = new Random();
random.setSeed(9999);
m = 1 + random.nextDouble();
b = random.nextDouble();
}
public LinkedList<Line> generateDataset(){
LinkedList<Line> lines = new LinkedList<>();
Random random = new Random();
random.setSeed(9999);
double m = 1 + random.nextDouble();
double b = random.nextDouble();
for (int i=1;i<101;i++){
double y = (random.nextGaussian() * 100) % 100;

View File

@ -44,9 +44,6 @@ public class Presenter implements Observer {
public Presenter(LineModel model, MainFrame view) {
this.model = model;
this.view = view;
eval = new EvaluateAlgorithms();
eval.addObserver(this);
}
@ -54,7 +51,7 @@ public class Presenter implements Observer {
public void update(Observable o, Object arg) {
String[] result = ((String[]) arg);
if (result.length > 3){
if (result[0] == "eval"){
SwingUtilities.invokeLater(() -> {
getView().appendEvalResult(result);
});
@ -273,11 +270,27 @@ public class Presenter implements Observer {
}
}
public void startEvaluation(){
public void startEvaluation(String[] args){
if (evalThread == null || !evalThread.isAlive()){
evalThread = new Thread(() ->{
Double m = null;
Double b = null;
Integer i = null;
if (!(args[0].isEmpty() && args[1].isEmpty() && args[2].isEmpty())) {
m = Double.parseDouble(args[0]);
b = Double.parseDouble(args[1]);
i = Integer.parseInt(args[2]);
}
try {
if (m != null && b!= null && i != null) {
eval = new EvaluateAlgorithms(m, b, i);
}else {
eval = new EvaluateAlgorithms();
}
eval.addObserver(this);
eval.run();
} catch (InterruptedException e) {
e.printStackTrace();

View File

@ -11,6 +11,7 @@ import java.awt.*;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
/**
@ -150,8 +151,8 @@ public class MainFrame extends JFrame {
public void appendEvalResult(Object[] res){
SwingUtilities.invokeLater(() -> {
Object[] tmp = res;
evaluationPanel.appendData(res);
Object[] tmp = Arrays.asList(res).subList(1,res.length).toArray();
evaluationPanel.appendData(tmp);
evaluationPanel.repaint();
evaluationPanel.revalidate();
});

View File

@ -49,7 +49,7 @@ public class EvaluationPanel extends JPanel{
buttonPanel = new JPanel(new FlowLayout());
buttonPanel.add(start);
buttonPanel.add(stop);
//buttonPanel.add(stop);
comp = new JPanel();
comp.setLayout(new GridLayout(0,2));
@ -61,7 +61,8 @@ public class EvaluationPanel extends JPanel{
comp.add(iYinterception);
start.addActionListener(e -> {
view.getPresenter().startEvaluation();
String[] params = {iSlope.getText(), iYinterception.getText(), iIteration.getText() };
view.getPresenter().startEvaluation(params);
});
stop.addActionListener(e -> {
@ -69,10 +70,18 @@ public class EvaluationPanel extends JPanel{
});
String[] selections = { "Schätzer","MSE", "RMSE", "MAE", "MdAE"};
model = new DefaultTableModel();
model = new DefaultTableModel(){
@Override
public boolean isCellEditable(int row, int column) {
//all cells false
return false;
}
};
model.setColumnIdentifiers(selections);
table = new JTable(model);
table.setDragEnabled(true);
JScrollPane scrollPane = new JScrollPane(table);
scrollPane.setWheelScrollingEnabled(true);
this.add(scrollPane, BorderLayout.CENTER);