package edu.fudan.ml.classifier.linear.update; import edu.fudan.ml.loss.Loss; import edu.fudan.ml.types.Instance; /** * 线性分类的参数更新类,采用PA算法 * @author Feng Ji * */ public class LinearMaxPAUpdate extends AbstractPAUpdate { public LinearMaxPAUpdate(Loss loss) { super(loss); } @Override protected int diff(Instance inst, float[] weights, Object target, Object predict) { int[] data = (int[]) inst.getData(); int gold; if (target == null) gold = (Integer) inst.getTarget(); else gold = (Integer) target; int pred = (Integer) predict; for (int i = 0; i < data.length; i++) { if (data[i] != -1) { int ts = data[i] + gold; int ps = data[i] + pred; diffv.put(ts, 1.0f); diffv.put(ps, -1.0f); diffw += weights[ts]-weights[ps]; // w^T(f(x,y)-f(x,ybar)) } } return 1; } }