Example usage for org.apache.mahout.math DenseMatrix set

List of usage examples for org.apache.mahout.math DenseMatrix set

Introduction

In this page you can find the example usage for org.apache.mahout.math DenseMatrix set.

Prototype

@Override
    public void set(String rowLabel, int row, double[] rowData) 

Source Link

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  a  v  a 2  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);

}