@Override public double max() { return vector.max(); }
@Override public double max() { return vector.max(); }
@Override public double max() { return this.mainVector.max(); }
@Override public double max(int column) { return getColumnVector(column).max(); }
@Override public DoubleVector apply(DoubleVector vector) { double max = vector.max(); DoubleVector exp = vector.subtract(max).exp(); return exp.divide(exp.sum()); }
/** * Calculates the probability that the given sequence occurs. * * @return value between 0d and 1d, where 1d is very likely that the sequence * is happening. */ public double getProbabilityForSequence(int[] stateSequence) { DoubleVector distribution = getTransitionProbabilities(stateSequence); // normalize it by the maximum of the log probabilities double max = distribution.max(); double probabilitySum = 0.0d; for (int i = 0; i < distribution.getDimension(); i++) { double probability = distribution.get(i); double normalizedProbability = probability - max; // add up the log probabilities probabilitySum += normalizedProbability; } // no we can exp them to get the real probability return FastMath.exp(probabilitySum); }
@Override public DoubleVector predict(DoubleVector features) { // clamp the features to the visible units, calculate the joint // probability for each hidden state and put it into the vector DoubleVector probabilities = emissionProbabilityMatrix .multiplyVectorRow(features); double max = probabilities.max(); for (int state = 0; state < probabilities.getDimension(); state++) { probabilities.set(state, FastMath.exp(probabilities.get(state) - max) * hiddenPriorProbability.get(state)); } // normalize again return probabilities.divide(probabilities.sum()); }
public DoubleVector predict(DoubleVector features, DoubleVector previousOutcome) { // clamp the features to the visible units, calculate the joint // probability for each hidden state and put it into the vector DoubleVector probabilities = emissionProbabilityMatrix .multiplyVectorRow(features); // we can add here, both are logarithms probabilities.add(transitionProbabilityMatrix .multiplyVectorRow(previousOutcome)); double max = probabilities.max(); for (int state = 0; state < probabilities.getDimension(); state++) { probabilities.set(state, FastMath.exp(probabilities.get(state) - max) * hiddenPriorProbability.get(state)); } // normalize again return probabilities.divide(probabilities.sum()); }