package com.datascience.mv;
import com.datascience.core.algorithms.INewDataObserver;
import com.datascience.core.base.AssignedLabel;
import com.datascience.core.base.LObject;
import com.datascience.core.base.Worker;
import com.datascience.core.nominal.IIncrementalNominalModel;
import com.datascience.datastoring.datamodels.memory.IncrementalNominalModel;
import com.datascience.core.nominal.CategoryPriorCalculators;
import com.datascience.core.stats.ErrorRateCalculators;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.Map;
/**
* @Author: konrad
*/
public class IncrementalMV extends MajorityVote implements INewDataObserver {
private IIncrementalNominalModel model;
public IncrementalMV(){
super(
new ErrorRateCalculators.BatchErrorRateCalculator(),
new CategoryPriorCalculators.IncrementalCategoryPriorCalculator());
model = new IncrementalNominalModel();
}
@Override
public IIncrementalNominalModel getModel() {
return model;
}
@Override
public Type getModelType() {
return new TypeToken<IncrementalNominalModel>() {} .getType();
}
@Override
public void setModel(Object o){
model = (IIncrementalNominalModel) o;
}
@Override
public void compute() {
//There is nothing that we would make sense to do here
}
public void computeForNewAssign(AssignedLabel<String> assign){
computeResultsForObject(assign.getLobject());
for (AssignedLabel<String> al: getData().getAssignsForObject(assign.getLobject())){
computeWorkersConfusionMatrix(al.getWorker());
}
if (!data.arePriorsFixed()){
model.setPriorDenominator(model.getPriorDenominator()+1);
Map<String, Double> priors = model.getCategoryPriors();
priors.put(assign.getLabel(), model.getCategoryPriors().get(assign.getLabel()) + 1);
model.setCategoryPriors(priors);
}
}
@Override
public void newAssign(AssignedLabel assign) {
computeForNewAssign(assign);
}
@Override
public void newGoldObject(LObject object) {
computeResultsForObject(object);
}
@Override
public void newObject(LObject object) {
computeResultsForObject(object);
}
@Override
public void newWorker(Worker worker) {
}
}