private DenseDoubleVector getProbabilityDistribution(DoubleVector document) { int numClasses = classPriorProbability.getLength(); DenseDoubleVector distribution = new DenseDoubleVector(numClasses); // loop through all classes and get the max probable one for (int i = 0; i < numClasses; i++) { double probability = getProbabilityForClass(document, i); distribution.set(i, probability); } double maxProbability = distribution.max(); double probabilitySum = 0.0d; // we normalize it back for (int i = 0; i < numClasses; i++) { double probability = distribution.get(i); double normalizedProbability = FastMath.exp(probability - maxProbability + classPriorProbability.get(i)); distribution.set(i, normalizedProbability); probabilitySum += normalizedProbability; } // since the sum is sometimes not 1, we need to divide by the sum distribution = (DenseDoubleVector) distribution.divide(probabilitySum); return distribution; }
private DenseDoubleVector getProbabilityDistribution(DoubleVector document) { int numClasses = model.getClassPriorProbability().getLength(); DenseDoubleVector distribution = new DenseDoubleVector(numClasses); // loop through all classes and get the max probable one for (int i = 0; i < numClasses; i++) { double probability = getProbabilityForClass(document, i); distribution.set(i, probability); } double maxProbability = distribution.max(); double probabilitySum = 0.0d; // we normalize it back for (int i = 0; i < numClasses; i++) { double probability = distribution.get(i); double normalizedProbability = FastMath.exp(probability - maxProbability + model.getClassPriorProbability().get(i)); distribution.set(i, normalizedProbability); probabilitySum += normalizedProbability; } // since the sum is sometimes not 1, we need to divide by the sum distribution = (DenseDoubleVector) distribution.divide(probabilitySum); return distribution; }