Example usage for org.apache.mahout.classifier.sequencelearning.hmm HmmModel HmmModel

List of usage examples for org.apache.mahout.classifier.sequencelearning.hmm HmmModel HmmModel

Introduction

In this page you can find the example usage for org.apache.mahout.classifier.sequencelearning.hmm HmmModel HmmModel.

Prototype

public HmmModel(Matrix transitionMatrix, Matrix emissionMatrix, Vector initialProbabilities) 

Source Link

Document

Generates a Hidden Markov model using the specified parameters

Usage

From source file:org.eclipse.tracecompass.internal.totalads.algorithms.hiddenmarkovmodel.HmmMahout.java

License:Open Source License

/**
 * Initializes HMM with the customized transition, emission and initial
 * probabilities rather than using Mahout's initialization. Specially this
 * function makes sure that initial probabilities are equal.
 *
 * @param numSymbols/* w w  w .j  av a2 s.c om*/
 *            Number of Symbols
 * @param numStates
 *            Number of States
 */
public void initializeHMMWithCustomizeInitialValues(int numSymbols, int numStates) {
    // Generating transition probabilities with random numbers
    Random random = new Random();
    double start = 0.0001;
    double end = 1.0000;
    DenseMatrix tansitionProbabilities = new DenseMatrix(numStates, numStates);

    // Measuring Transition Probabilities
    double[] rowSums = new double[numStates];
    Arrays.fill(rowSums, 0.0);

    for (int row = 0; row < numStates; row++) {
        for (int col = 0; col < numStates; col++) {
            tansitionProbabilities.set(row, col, getRandomRealNumber(start, end, random));
            rowSums[row] += tansitionProbabilities.get(row, col);
        }
    }

    for (int row = 0; row < numStates; row++) {
        for (int col = 0; col < numStates; col++) {
            tansitionProbabilities.set(row, col, (tansitionProbabilities.get(row, col) / rowSums[row]));
        }
    }

    // Assigning initial state probabilities Pi; i.e. probabilities at time
    // 1
    DenseVector initialProbabilities = new DenseVector(numStates);
    double initialProb = 1 / ((double) numStates);
    for (int idx = 0; idx < numStates; idx++) {
        initialProbabilities.set(idx, initialProb);
    }

    // Measuring Emission probabilities of each symbol
    DenseMatrix emissionProbabilities = new DenseMatrix(numStates, numSymbols);
    Arrays.fill(rowSums, 0.0);// Utilizing the same rowSums variable
    random = new Random();

    for (int row = 0; row < numStates; row++) {
        for (int col = 0; col < numSymbols; col++) {
            emissionProbabilities.set(row, col, getRandomRealNumber(start, end, random));
            rowSums[row] += emissionProbabilities.get(row, col);
        }
    }

    for (int row = 0; row < numStates; row++) {
        for (int col = 0; col < numSymbols; col++) {
            emissionProbabilities.set(row, col, emissionProbabilities.get(row, col) / rowSums[row]);
        }
    }

    fHmm = new HmmModel(tansitionProbabilities, emissionProbabilities, initialProbabilities);

}

From source file:org.eclipse.tracecompass.internal.totalads.algorithms.hiddenmarkovmodel.HmmMahout.java

License:Open Source License

/**
 * Update HMM based on an incremental version as described in
 * http://goanna.cs.rmit.edu.au/~jiankun/Sample_Publication/ICON04_Dau.pdf
 *
 * @param sequence/*from ww w. java 2  s  .c  o m*/
 *            The sequence
 * @param dataAccessObject
 *            Data access object
 * @param database
 *            Model name
 * @throws TotalADSDBMSException
 *             Validation exception
 */
public void updatePreviousModel(Integer[] sequence, IDataAccessObject dataAccessObject, String database)
        throws TotalADSDBMSException {
    int[] seq = new int[sequence.length];
    for (int i = 0; i < sequence.length; i++) {
        seq[i] = sequence[i];
    }

    double prob = 1.0;
    Matrix transition = fHmm.getTransitionMatrix().divide(prob);
    Matrix emission = fHmm.getEmissionMatrix().divide(prob);
    Vector initial = fHmm.getInitialProbabilities().divide(prob);

    HmmMahout oldHMM = new HmmMahout();
    oldHMM.loadHmm(dataAccessObject, database);
    if (oldHMM.fHmm != null) {
        transition = oldHMM.fHmm.getTransitionMatrix().plus(transition);
        emission = oldHMM.fHmm.getEmissionMatrix().plus(emission);
        initial = oldHMM.fHmm.getInitialProbabilities().plus(initial);
    }

    HmmMahout newHMM = new HmmMahout();
    newHMM.fHmm = new HmmModel(transition, emission, initial);
    newHMM.saveHMM(database, dataAccessObject);
}

From source file:org.eclipse.tracecompass.internal.totalads.algorithms.hiddenmarkovmodel.HmmMahout.java

License:Open Source License

/**
 * Loads the model directly from a database
 *
 * @param dao/*from  www . ja  va  2s.c om*/
 *            Data access object
 * @param modelName
 *            Model (or database) name
 * @throws TotalADSDBMSException
 *             DBMS exception
 */
public void loadHmm(IDataAccessObject dao, String modelName) throws TotalADSDBMSException {

    try (IDBCursor cursor = dao.selectAll(modelName, HmmModelCollection.COLLECTION_NAME.toString())) {
        if (cursor.hasNext()) {
            Gson gson = new Gson();
            if (cursor.hasNext()) {
                IDBRecord dbObject = cursor.next();
                Object emissionProb = dbObject.get(HmmModelCollection.EMISSIONPROB.toString());
                Object transsitionProb = dbObject.get(HmmModelCollection.TRANSITIONPROB.toString());
                Object initialProb = dbObject.get(HmmModelCollection.INTITIALPROB.toString());

                DenseMatrix emissionMatrix = gson.fromJson(emissionProb.toString(), DenseMatrix.class);
                DenseMatrix transitionMatrix = gson.fromJson(transsitionProb.toString(), DenseMatrix.class);
                DenseVector initialProbVector = gson.fromJson(initialProb.toString(), DenseVector.class);

                fHmm = new HmmModel(transitionMatrix, emissionMatrix, initialProbVector);
            }

        }
    }
}