package com.datascience.core.nominal; import com.datascience.core.base.Algorithm; import com.datascience.core.results.WorkerResult; import com.datascience.core.stats.IErrorRateCalculator; import com.datascience.core.results.DatumResult; import com.datascience.datastoring.datamodels.memory.NominalModel; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.Map; /** * @Author: konrad */ public abstract class NominalAlgorithm extends Algorithm<String, INominalData, DatumResult, WorkerResult> { protected IErrorRateCalculator errorRateCalculator; protected ICategoryPriorCalculator priorCalculator; protected INominalModel model; public NominalAlgorithm(IErrorRateCalculator errorRateCalculator, ICategoryPriorCalculator priorCalculator){ this.errorRateCalculator = errorRateCalculator; this.priorCalculator = priorCalculator; model = new NominalModel(); } public IErrorRateCalculator getErrorRateCalculator(){ return errorRateCalculator; } public void initializeOnCategories(){ if (!data.arePriorsFixed()) { priorCalculator.initializeModelPriors(data, getModel()); } } public double prior(String categoryName) { return priorCalculator.getPrior(data, getModel(), categoryName); } public Map<String, Double> getCategoryPriors() { return priorCalculator.getPriors(data, getModel()); } @Override public INominalModel getModel(){ return model; } @Override public void setModel(Object o){ model = (INominalModel) o; } @Override public Type getModelType() { return new TypeToken<NominalModel>() {} .getType(); } }