package edu.fudan.ml.classifier.linear.inf;
import edu.fudan.ml.classifier.Predict;
import edu.fudan.ml.feature.Generator;
import edu.fudan.ml.types.Instance;
import edu.fudan.ml.types.sv.ISparseVector;
/**
* @author xpqiu
* @version 1.0
*/
public class LinearMax extends Inferencer {
private static final long serialVersionUID = -7602321210007971450L;
private Generator generator;
private int ysize;
public LinearMax(Generator generator, int ysize) {
this.generator = generator;
this.ysize = ysize;
}
public Predict getBest(Instance inst) {
return getBest(inst, 1);
}
public Predict getBest(Instance inst, int n) {
Integer target = null;
if (isUseTarget && inst.getTarget() != null)
target = (Integer) inst.getTarget();
Predict<Integer> pred = new Predict<Integer>(n);
Predict<Integer> oracle = null;
if (target != null) {
oracle = new Predict<Integer>(n);
}
for (int i = 0; i < ysize; i++) {
ISparseVector fv = generator.getVector(inst, i);
float score = fv.dotProduct(weights);
if (target != null && target == i)
oracle.add(i,score);
else
pred.add(i,score);
}
return pred;
}
}