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:
parent
7f015eaa0c
commit
2eb1768052
|
@ -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;
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
});
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue