public double entropy () { double h = 0; double p; for (AssignmentIterator it = assignmentIterator (); it.hasNext ();) { p = logValue (it); if (!Double.isInfinite (p)) h -= p * Math.exp (p); it.advance (); } return h; }
public double entropy () { double h = 0; double p; for (AssignmentIterator it = assignmentIterator (); it.hasNext ();) { p = logValue (it); if (!Double.isInfinite (p)) h -= p * Math.exp (p); it.advance (); } return h; }
public double entropy () { double h = 0; double p; for (AssignmentIterator it = assignmentIterator (); it.hasNext ();) { p = logValue (it); if (!Double.isInfinite (p)) h -= p * Math.exp (p); it.advance (); } return h; }
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; }
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; }
public void testUniformGrid () { UndirectedGrid grid = (UndirectedGrid) RandomGraphs.createUniformGrid (3); assertEquals (9, grid.numVariables ()); assertEquals (12, grid.factors ().size()); BruteForceInferencer inf = new BruteForceInferencer (); TableFactor joint = (TableFactor) inf.joint (grid); for (AssignmentIterator it = joint.assignmentIterator (); it.hasNext(); it.advance ()) { assertEquals (-9 * Math.log (2), joint.logValue (it), 1e-3); } }
public void testUniformGrid () { UndirectedGrid grid = (UndirectedGrid) RandomGraphs.createUniformGrid (3); assertEquals (9, grid.numVariables ()); assertEquals (12, grid.factors ().size()); BruteForceInferencer inf = new BruteForceInferencer (); TableFactor joint = (TableFactor) inf.joint (grid); for (AssignmentIterator it = joint.assignmentIterator (); it.hasNext(); it.advance ()) { assertEquals (-9 * Math.log (2), joint.logValue (it), 1e-3); } }
private void comparePotentialValues (TableFactor ptl, TableFactor ptl2) { AssignmentIterator it1 = ptl.assignmentIterator (); AssignmentIterator it2 = ptl2.assignmentIterator (); while (it1.hasNext ()) { assertTrue (ptl.value (it1) == ptl.value (it2)); it1.advance (); it2.advance (); } }
private void comparePotentialValues (LogTableFactor ptl, LogTableFactor ptl2) { AssignmentIterator it1 = ptl.assignmentIterator (); AssignmentIterator it2 = ptl2.assignmentIterator (); while (it1.hasNext ()) { assertTrue (ptl.value (it1) == ptl.value (it2)); it1.advance (); it2.advance (); } }
private void comparePotentialValues (TableFactor ptl, TableFactor ptl2) { AssignmentIterator it1 = ptl.assignmentIterator (); AssignmentIterator it2 = ptl2.assignmentIterator (); while (it1.hasNext ()) { assertTrue (ptl.value (it1) == ptl.value (it2)); it1.advance (); it2.advance (); } }
private void comparePotentialValues (LogTableFactor ptl, LogTableFactor ptl2) { AssignmentIterator it1 = ptl.assignmentIterator (); AssignmentIterator it2 = ptl2.assignmentIterator (); while (it1.hasNext ()) { assertTrue (ptl.value (it1) == ptl.value (it2)); it1.advance (); it2.advance (); } }
public double secondDerivative (Factor q, Variable param, Assignment theta) { double e_x = sumGradLog (q, param, theta); Factor q_xs = q.marginalize (xs); double e_x2 = 0.0; for (AssignmentIterator it = xs.assignmentIterator (); it.hasNext(); it.advance()) { Assignment assn = it.assignment (); if (!isAllEqual (assn)) { e_x2 += q_xs.value (it); } } return e_x2 - (e_x * e_x); }
public double secondDerivative (Factor q, Variable param, Assignment theta) { double e_x = sumGradLog (q, param, theta); Factor q_xs = q.marginalize (xs); double e_x2 = 0.0; for (AssignmentIterator it = xs.assignmentIterator (); it.hasNext(); it.advance()) { Assignment assn = it.assignment (); if (!isAllEqual (assn)) { e_x2 += q_xs.value (it); } } return e_x2 - (e_x * e_x); }
private DiscreteFactor constructConditionalCpt (FactorGraph mdl, Variable var, Assignment fullAssn) { List ptlList = mdl.allFactorsContaining (var); LogTableFactor ptl = new LogTableFactor (var); for (AssignmentIterator it = ptl.assignmentIterator (); it.hasNext(); it.advance ()) { Assignment varAssn = it.assignment (); fullAssn.setValue (var, varAssn.get (var)); ptl.setRawValue (varAssn, sumValues (ptlList, fullAssn)); } ptl.normalize (); return ptl; }
private DiscreteFactor constructConditionalCpt (FactorGraph mdl, Variable var, Assignment fullAssn) { List ptlList = mdl.allFactorsContaining (var); LogTableFactor ptl = new LogTableFactor (var); for (AssignmentIterator it = ptl.assignmentIterator (); it.hasNext(); it.advance ()) { Assignment varAssn = it.assignment (); fullAssn.setValue (var, varAssn.get (var)); ptl.setRawValue (varAssn, sumValues (ptlList, fullAssn)); } ptl.normalize (); return ptl; }
private DiscreteFactor constructConditionalCpt (FactorGraph mdl, Variable var, Assignment fullAssn) { List ptlList = mdl.allFactorsContaining (var); LogTableFactor ptl = new LogTableFactor (var); for (AssignmentIterator it = ptl.assignmentIterator (); it.hasNext(); it.advance ()) { Assignment varAssn = it.assignment (); fullAssn.setValue (var, varAssn.get (var)); ptl.setRawValue (varAssn, sumValues (ptlList, fullAssn)); } ptl.normalize (); return ptl; }
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); }
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); }
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); }
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 ()] = logValue (union); it.advance (); } return LogTableFactor.makeFromLogValues (toKeep.toVariableArray (), vals); }