@Override public Vector format(Object value){ List<String> labels = getLabels(); HasProbability hasProbability = (HasProbability)value; double[] probabilities = new double[labels.size()]; for(int i = 0; i < labels.size(); i++){ String label = labels.get(i); probabilities[i] = hasProbability.getProbability(label); } return new DenseVector(probabilities); }
public void add(HasProbability hasProbability){ if(this.weights != null){ throw new IllegalStateException(); } // End if if(this.hasProbabilities != null){ this.hasProbabilities.add(hasProbability); } Set<String> categories = hasProbability.getCategories(); for(String category : categories){ Double probability = hasProbability.getProbability(category); add(category, probability); } this.size++; }
static private Double getProbability(Object object, OutputField outputField){ HasProbability hasProbability = TypeUtil.cast(HasProbability.class, object); String value = getCategoryValue(object, outputField); return hasProbability.getProbability(value); }
public void add(HasProbability hasProbability, double weight){ if(this.weights == null){ throw new IllegalStateException(); } // End if if(weight < 0d){ throw new IllegalArgumentException(); } // End if if(this.hasProbabilities != null){ this.hasProbabilities.add(hasProbability); } Set<String> categories = hasProbability.getCategories(); for(String category : categories){ Double probability = hasProbability.getProbability(category); add(category, weight, probability); } this.size++; this.weights.add(weight); }
static public Double getDiscreteResidual(Object object, FieldValue expectedObject){ HasProbability hasProbability = TypeUtil.cast(HasProbability.class, object); String value = (String)TypeUtil.cast(DataType.STRING, getPredictedValue(object)); String expectedValue = (String)TypeUtil.cast(DataType.STRING, FieldValueUtil.getValue(expectedObject)); boolean equals = (value).equals(expectedValue); return Double.valueOf((equals ? 1d : 0d) - hasProbability.getProbability(value)); }
private ValueMap<String, V> averageMap(List<HasProbability> hasProbabilities){ if(hasProbabilities.size() == 1){ HasProbability hasProbability = hasProbabilities.get(0); ValueFactory<V> valueFactory = getValueFactory(); ValueMap<String, V> result = new ValueMap<>(); Set<String> categories = hasProbability.getCategories(); for(String category : categories){ Double probability = hasProbability.getProbability(category); Value<V> value = valueFactory.newValue(probability); result.put(category, value); } return result; } else { ProbabilityAggregator<V> aggregator = new ProbabilityAggregator<V>(0){ @Override public ValueFactory<V> getValueFactory(){ return ProbabilityAggregator.this.getValueFactory(); } }; for(HasProbability hasProbability : hasProbabilities){ aggregator.add(hasProbability); } return aggregator.averageMap(); } }