package com.datascience.utils; import java.util.Collection; import java.util.HashMap; import java.util.Map; /** * @author Konrad Kurdej */ public class ProbabilityDistributions { static public Double calculateLabelCost(String calcLabel, Map<String, Double> labelProbabilities, CostMatrix<String> costMatrix) { if (calcLabel == null) { return Double.NaN; } double sum = 0.; for (String label: costMatrix.getKnownValues()) { double cost = costMatrix.getCost(label, calcLabel); double prob = labelProbabilities.get(label); sum += cost * prob; } return sum; } static public <T> Map<T, Double> generateConstantDistribution( Collection<T> objects, double value) { Map<T, Double> cd = new HashMap<T, Double>(); for (T object : objects) { cd.put(object, value); } return cd; } static public <T> Map<T, Double> generateUniformDistribution( Collection<T> objects) { Map<T, Double> inital = new HashMap<T, Double>(); return generateUniformDistribution(objects, inital); } static public <T> Map<T, Double> generateUniformDistribution( Collection<T> objects, Map<T, Double> initialDistribution) { double revn = 1. / objects.size(); for (T object : objects) { initialDistribution.put(object, revn); } return initialDistribution; } static public Map<String, Double> generateGoldDistribution(Collection<String> categories, String correctCat){ Map<String, Double> ret = generateConstantDistribution(categories, 0.); ret.put(correctCat, 1.); return ret; } }