package com.datascience.core.nominal; import java.util.HashMap; import java.util.Map; /** * User: artur * Date: 4/9/13 */ public class CategoryPriorCalculators { public static class BatchCategoryPriorCalculator implements ICategoryPriorCalculator { @Override public Double getPrior(INominalData data, INominalModel model, String categoryName) { if (data.arePriorsFixed()) return data.getCategoryPrior(categoryName); else return model.getCategoryPriors().get(categoryName); } @Override public Map<String, Double> getPriors(INominalData data, INominalModel model) { if (data.arePriorsFixed()) return data.getCategoryPriors(); else return model.getCategoryPriors(); } @Override public void initializeModelPriors(INominalData data, INominalModel model) { Map<String, Double> priors = new HashMap<String, Double>(); for (String c : data.getCategories()){ priors.put(c, 1. / data.getCategories().size()); } model.setCategoryPriors(priors); } } public static class IncrementalCategoryPriorCalculator implements ICategoryPriorCalculator { @Override public Double getPrior(INominalData data, INominalModel model, String categoryName) { if (data.arePriorsFixed()) return data.getCategoryPrior(categoryName); else if (((IIncrementalNominalModel) model).getPriorDenominator() == 0) return 1. / (double) data.getCategories().size(); else return model.getCategoryPriors().get(categoryName) / ((IIncrementalNominalModel) model).getPriorDenominator(); } @Override public Map<String, Double> getPriors(INominalData data, INominalModel model) { if (data.arePriorsFixed()) return data.getCategoryPriors(); else{ Map<String, Double> ret = new HashMap<String, Double>(); for (String cat : data.getCategories()){ ret.put(cat, getPrior(data, model, cat)); } return ret; } } @Override public void initializeModelPriors(INominalData data, INominalModel model) { Map<String, Double> priors = new HashMap<String, Double>(); for (String c : data.getCategories()){ priors.put(c, 0.); } model.setCategoryPriors(priors); ((IIncrementalNominalModel)model).setPriorDenominator(0); } } }