package com.datascience.core.nominal; import com.datascience.core.nominal.decision.DecisionEngine; import com.datascience.core.nominal.decision.LabelProbabilityDistributionCostCalculators; import com.datascience.core.nominal.decision.ObjectLabelDecisionAlgorithms; import java.util.HashMap; import java.util.Map; /** * * @author konrad */ public class Quality { /** * Returns the minimum possible cost of a "spammer" worker, who assigns * completely random labels. * * @return The expected cost of a spammer worker */ static public double getMinSpammerCost(NominalProject project) { DecisionEngine de = new DecisionEngine(new LabelProbabilityDistributionCostCalculators.SelectedLabelBased(new ObjectLabelDecisionAlgorithms.MinCostDecisionAlgorithm()), null); return de.estimateMissclassificationCost(project, project.getAlgorithm().getCategoryPriors()); } static public double getExpSpammerCost(NominalProject project){ DecisionEngine de = new DecisionEngine(new LabelProbabilityDistributionCostCalculators.ExpectedCostAlgorithm(), null); return de.estimateMissclassificationCost(project, project.getAlgorithm().getCategoryPriors()); } static public double fromCost(NominalProject project, double cost){ return 1. - cost / getMinSpammerCost(project); } static public <T> Map<T, Double> fromCosts(NominalProject project, Map<T, Double> costs){ Map<T, Double> quality = new HashMap<T, Double>(); for (Map.Entry<T, Double> e: costs.entrySet()) { quality.put(e.getKey(), fromCost(project, e.getValue())); } return quality; } }