86 lines
2.1 KiB
Java
86 lines
2.1 KiB
Java
/*
|
|
* To change this template, choose Tools | Templates
|
|
* and open the template in the editor.
|
|
*/
|
|
|
|
package org.wiigee.logic;
|
|
|
|
import java.util.Vector;
|
|
|
|
/**
|
|
*
|
|
* @author bepo
|
|
*/
|
|
public class XHMM extends HMM {
|
|
|
|
// the temporal values for scaling
|
|
int[] currSequence;
|
|
double[][] currForward;
|
|
double[][] scaledForward;
|
|
double[][] currBackward;
|
|
double[][] scaledBackward;
|
|
double[] currScaling;
|
|
double[][] currHelper;
|
|
|
|
public XHMM(int numStates, int numObservations) {
|
|
super(numStates, numObservations);
|
|
}
|
|
|
|
@Override
|
|
public void train(Vector<int[]> trainsequence) {
|
|
|
|
}
|
|
|
|
private double[][] getScaledForward(int[] sequence) {
|
|
double[][] fwd = this.forwardProc(sequence);
|
|
double[][] retVal = new double[fwd.length][fwd[0].length];
|
|
for(int t=0; t<fwd.length; t++) {
|
|
for(int i=0; i<fwd[0].length; i++) {
|
|
|
|
// build sum
|
|
double sum = 0.0;
|
|
for(int n=0; n<this.numStates; n++) {
|
|
sum += fwd[t][n];
|
|
}
|
|
|
|
retVal[t][i] = fwd[t][i] / sum;
|
|
}
|
|
}
|
|
return retVal;
|
|
}
|
|
|
|
private double[][] getScaledBackward(int[] sequence) {
|
|
double[][] fwd = this.forwardProc(sequence);
|
|
double[][] bwd = this.backwardProc(sequence);
|
|
double[][] retVal = new double[bwd.length][bwd[0].length];
|
|
for(int t=0; t<bwd.length; t++) {
|
|
for(int i=0; i<bwd[0].length; i++) {
|
|
|
|
// build sum
|
|
double sum = 0.0;
|
|
for(int n=0; n<this.numStates; n++) {
|
|
sum += fwd[t][n];
|
|
}
|
|
|
|
retVal[t][i] = bwd[t][i] / sum;
|
|
}
|
|
}
|
|
return retVal;
|
|
}
|
|
|
|
private double getScalingDenominator(int t, int[] sequence) {
|
|
double retVal = 0.0;
|
|
double[][] fwd = this.forwardProc(sequence);
|
|
double[][] sfwd = this.getScaledForward(sequence);
|
|
double[][] helper = new double[sfwd.length][sfwd[0].length];
|
|
|
|
if(t==0) {
|
|
|
|
}
|
|
|
|
|
|
return retVal;
|
|
}
|
|
|
|
}
|