List of usage examples for org.apache.mahout.math DenseMatrix set
@Override
public void set(String rowLabel, int row, double[] rowData)
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); }