public double sumGradLog (Factor q, Variable param, Assignment theta) { if (param != alpha) throw new IllegalArgumentException (); Factor q_xs = q.marginalize (xs); double qDiff = 0.0; for (AssignmentIterator it = xs.assignmentIterator (); it.hasNext(); it.advance()) { Assignment assn = it.assignment (); if (!isAllEqual (assn)) { qDiff += -q_xs.value (it); } } return qDiff; }
protected Factor slice_general (Variable[] vars, Assignment observed) { VarSet toKeep = new HashVarSet (vars); toKeep.removeAll (observed.varSet ()); double[] vals = new double [toKeep.weight ()]; AssignmentIterator it = toKeep.assignmentIterator (); while (it.hasNext ()) { Assignment union = Assignment.union (observed, it.assignment ()); vals[it.indexOfCurrentAssn ()] = value (union); it.advance (); } return new TableFactor (toKeep, vals); }
private void collectSomeUnsupportedWeights (InstanceList training, BitSet[] weightsPresent) { for (int ii = 0; ii < training.size(); ii++) { Instance inst = training.get (ii); UnrolledGraph unrolled = new UnrolledGraph (inst, new Template[] { this }, new ArrayList (), true); for (Iterator it = unrolled.unrolledVarSetIterator (); it.hasNext();) { UnrolledVarSet vs = (UnrolledVarSet) it.next (); Factor f = vs.getFactor (); Factor nrmed = f.normalize (); for (AssignmentIterator assnIt = nrmed.assignmentIterator (); assnIt.hasNext ();) { if (nrmed.value (assnIt) > SOME_UNSUPPORTED_THRESHOLD) { addPresentFeatures (weightsPresent [assnIt.indexOfCurrentAssn ()], vs.fv); } assnIt.advance (); } } } }
private static double mean (Factor factor) { if (factor.varSet ().size() != 1) throw new IllegalArgumentException ("mean() only works on Factors of size 1, tried "+factor); Variable v0 = factor.varSet ().get (0); double mean = 0.0; for (AssignmentIterator it = factor.assignmentIterator (); it.hasNext();) { Assignment assn = (Assignment) it.next (); int val0 = assn.get (v0); mean += factor.value (assn) * val0; } return mean; }
public double value (AssignmentIterator assn) { return rawValue (assn.indexOfCurrentAssn ()); }
public double logValue (AssignmentIterator it) { return logValue (it.assignment ()); }
public void testLazyAssignment () { Variable vars [] = { new Variable (2), new Variable (2), }; double[] probs = { 0.1, 10.3, 17, 0.5 }; TableFactor ptl = new TableFactor (vars, probs); AssignmentIterator it = ptl.assignmentIterator (); it.advance (); it.advance (); Assignment assn = it.assignment (); assertEquals (2, assn.size ()); assertEquals (1, assn.get (vars [0])); assertEquals (0, assn.get (vars [1])); }
public void testSparseValueAndLogValue () { Variable[] vars = new Variable[] { new Variable (2), new Variable (2) }; int[] szs = { 2, 2 }; int[] idxs1 = new int[] { 1, 3 }; double[] vals1 = new double[]{ 4.0, 8.0 }; LogTableFactor ptl1 = LogTableFactor.makeFromMatrix (vars, new SparseMatrixn (szs, idxs1, vals1)); AssignmentIterator it = ptl1.assignmentIterator (); assertEquals (1, it.indexOfCurrentAssn ()); assertEquals (Math.log (4), ptl1.logValue (it), 1e-5); assertEquals (Math.log (4), ptl1.logValue (it.assignment ()), 1e-5); assertEquals (4, ptl1.value (it), 1e-5); assertEquals (4, ptl1.value (it.assignment ()), 1e-5); it = ptl1.varSet ().assignmentIterator (); assertEquals (0, it.indexOfCurrentAssn ()); assertEquals (Double.NEGATIVE_INFINITY, ptl1.logValue (it), 1e-5); assertEquals (Double.NEGATIVE_INFINITY, ptl1.logValue (it.assignment ()), 1e-5); assertEquals (0, ptl1.value (it), 1e-5); assertEquals (0, ptl1.value (it.assignment ()), 1e-5); }
public static double localMagnetization (Inferencer inferencer, Variable var) { if (var.getNumOutcomes () != 2) throw new IllegalArgumentException (); Factor marg = inferencer.lookupMarginal (var); AssignmentIterator it = marg.assignmentIterator (); double v1 = marg.value (it); it.advance (); double v2 = marg.value (it); return v1 - v2; }
private void collectSomeUnsupportedWeights (InstanceList training, BitSet[] weightsPresent) { for (int ii = 0; ii < training.size(); ii++) { Instance inst = training.get (ii); UnrolledGraph unrolled = new UnrolledGraph (inst, new Template[] { this }, new ArrayList (), true); for (Iterator it = unrolled.unrolledVarSetIterator (); it.hasNext();) { UnrolledVarSet vs = (UnrolledVarSet) it.next (); Factor f = vs.getFactor (); Factor nrmed = f.normalize (); for (AssignmentIterator assnIt = nrmed.assignmentIterator (); assnIt.hasNext ();) { if (nrmed.value (assnIt) > SOME_UNSUPPORTED_THRESHOLD) { addPresentFeatures (weightsPresent [assnIt.indexOfCurrentAssn ()], vs.fv); } assnIt.advance (); } } } }
private static double mean (Factor factor) { if (factor.varSet ().size() != 1) throw new IllegalArgumentException ("mean() only works on Factors of size 1, tried "+factor); Variable v0 = factor.varSet ().get (0); double mean = 0.0; for (AssignmentIterator it = factor.assignmentIterator (); it.hasNext();) { Assignment assn = (Assignment) it.next (); int val0 = assn.get (v0); mean += factor.value (assn) * val0; } return mean; }
public void setRawValue (AssignmentIterator it, double value) { probs.setSingleValue (it.indexOfCurrentAssn (), value); }
public double logValue (AssignmentIterator it) { return logValue (it.assignment ()); }
public void testLazyAssignment () { Variable vars [] = { new Variable (2), new Variable (2), }; double[] probs = { 0.1, 10.3, 17, 0.5 }; TableFactor ptl = new TableFactor (vars, probs); AssignmentIterator it = ptl.assignmentIterator (); it.advance (); it.advance (); Assignment assn = it.assignment (); assertEquals (2, assn.size ()); assertEquals (1, assn.get (vars [0])); assertEquals (0, assn.get (vars [1])); }
public void testSparseValueAndLogValue () { Variable[] vars = new Variable[] { new Variable (2), new Variable (2) }; int[] szs = { 2, 2 }; int[] idxs1 = new int[] { 1, 3 }; double[] vals1 = new double[]{ 4.0, 8.0 }; LogTableFactor ptl1 = LogTableFactor.makeFromMatrix (vars, new SparseMatrixn (szs, idxs1, vals1)); AssignmentIterator it = ptl1.assignmentIterator (); assertEquals (1, it.indexOfCurrentAssn ()); assertEquals (Math.log (4), ptl1.logValue (it), 1e-5); assertEquals (Math.log (4), ptl1.logValue (it.assignment ()), 1e-5); assertEquals (4, ptl1.value (it), 1e-5); assertEquals (4, ptl1.value (it.assignment ()), 1e-5); it = ptl1.varSet ().assignmentIterator (); assertEquals (0, it.indexOfCurrentAssn ()); assertEquals (Double.NEGATIVE_INFINITY, ptl1.logValue (it), 1e-5); assertEquals (Double.NEGATIVE_INFINITY, ptl1.logValue (it.assignment ()), 1e-5); assertEquals (0, ptl1.value (it), 1e-5); assertEquals (0, ptl1.value (it.assignment ()), 1e-5); }
public static double localMagnetization (Inferencer inferencer, Variable var) { if (var.getNumOutcomes () != 2) throw new IllegalArgumentException (); Factor marg = inferencer.lookupMarginal (var); AssignmentIterator it = marg.assignmentIterator (); double v1 = marg.value (it); it.advance (); double v2 = marg.value (it); return v1 - v2; }
public double sumGradLog (Factor q, Variable param, Assignment theta) { if (param != alpha) throw new IllegalArgumentException (); Factor q_xs = q.marginalize (xs); double qDiff = 0.0; for (AssignmentIterator it = xs.assignmentIterator (); it.hasNext(); it.advance()) { Assignment assn = it.assignment (); if (!isAllEqual (assn)) { qDiff += -q_xs.value (it); } } return qDiff; }
protected Factor slice_general (Variable[] vars, Assignment observed) { VarSet toKeep = new HashVarSet (vars); toKeep.removeAll (observed.varSet ()); double[] vals = new double [toKeep.weight ()]; AssignmentIterator it = toKeep.assignmentIterator (); while (it.hasNext ()) { Assignment union = Assignment.union (observed, it.assignment ()); vals[it.indexOfCurrentAssn ()] = value (union); it.advance (); } return new TableFactor (toKeep, vals); }