/** KernelCRF.java * Created on Jun 28, 2008 * * @author Sunita Sarawagi * @since 1.3 * @version 1.3 */ package iitb.KernelCRF; import iitb.CRF.CRF; import iitb.CRF.DataIter; import iitb.CRF.DataSequence; import iitb.CRF.Evaluator; import iitb.CRF.FeatureGenerator; import iitb.CRF.Viterbi; import java.io.Serializable; import java.util.Properties; import java.util.Vector; public class KernelCRF extends CRF { /** * */ private static final long serialVersionUID = -5041774715605661933L; public static class SupportVector implements Serializable { /** * */ private static final long serialVersionUID = -5611055066177234585L; DataSequence dataSeq; YSequence yseq; double alpha; public SupportVector(DataSequence dataSeq, YSequence yseq, double alpha) { this.dataSeq = dataSeq; this.yseq = yseq; this.alpha = alpha; } } Vector<SupportVector> svecs; SequenceKernel kernel; public KernelCRF(int numLabels, FeatureGenerator fgen, Properties configOptions) { super(numLabels, fgen, configOptions); } public KernelCRF(int numLabels, FeatureGenerator fgen, String arg) { super(numLabels, fgen, arg); } @Override public double[] train(DataIter trainData, Evaluator evaluator, float instanceWts[]) { return train(trainData,evaluator,instanceWts,null); } @Override public double[] train(DataIter trainData, Evaluator evaluator, float instanceWts[], float misClassCosts[][]) { KernelTrainer trainer = (KernelTrainer) getTrainer(); trainer.train(this, trainData, null, evaluator, instanceWts, misClassCosts); svecs = trainer.getSupportVectors(); kernel=trainer.getKernel(); return new double[getFeatureGenerator().numFeatures()]; // this is just to not break code downstream. } @Override public Viterbi getViterbi(int beamsize) { return new KernelViterbi(this,beamsize); } }