List of usage examples for org.apache.mahout.classifier.sequencelearning.hmm HmmModel HmmModel
public HmmModel(Matrix transitionMatrix, Matrix emissionMatrix, Vector initialProbabilities)
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); } } } }