/** * Moves the exponential family distributions. * @param toTemporalCloneNode a {@link Node} object. * @param fromNode a {@link Node} object. */ private static void moveNodeQDist(Node toTemporalCloneNode, Node fromNode){ EF_UnivariateDistribution uni = fromNode.getQDist().deepCopy(toTemporalCloneNode.getMainVariable()); toTemporalCloneNode.setPDist(uni); toTemporalCloneNode.setQDist(uni); }
private static void moveNodeQDist(Node toTemporalCloneNode, Node fromNode){ EF_UnivariateDistribution uni = fromNode.getQDist().deepCopy(toTemporalCloneNode.getMainVariable()); toTemporalCloneNode.setPDist(uni); toTemporalCloneNode.setQDist(uni); }
@Override public void flatMap(Batch<DataPosteriorAssignment> data, Collector<DataPosteriorAssignment> out) { for (int i = 0; i < data.getElements().size(); i++) { for (Variable latentVariable : latentInterfaceVariables) { DataPosteriorAssignment dataPosteriorAssignment = data.getElements().get(i); if (!dataPosteriorAssignment.isObserved(latentVariable)){ UnivariateDistribution dist = dataPosteriorAssignment.getPosterior().getPosterior(latentVariable); Variable interfaceVariable = this.svb.getDAG().getVariables().getVariableByName(latentVariable.getName() + DynamicVariables.INTERFACE_SUFFIX); this.svb.getPlateuStructure().getNodeOfVar(latentVariable, i).setPDist(dist.toEFUnivariateDistribution().deepCopy(interfaceVariable)); this.svb.getPlateuStructure().getNodeOfVar(latentVariable, i).setAssignment(null); } } } DataOnMemory<DataInstance> dataBatch = new DataOnMemoryListContainer<DataInstance>( attributes, data.getElements().stream() .map(d -> new DataInstanceFromAssignment(d.getPosterior().getId(), d.getAssignment(), attributes, variables)) .collect(Collectors.toList()) ); List<DataPosteriorAssignment> posteriorAssignments = svb.computePosteriorAssignment(dataBatch, latentVariables); for (DataPosteriorAssignment posterior: posteriorAssignments){ out.collect(posterior); } }
/** * Updates the model at time T using a given list of {@link DynamicDataInstance}s. * @param batch a {@code List} of {@link DynamicDataInstance}s. * @return a {@code double} value. */ private double updateModelTimeT(List<DynamicDataInstance> batch) { this.plateauStructure.setEvidenceTimeT(batch); this.plateauStructure.runInferenceTimeT(); for (Variable var: plateauStructure.getEFLearningBNTimeT().getParametersVariables()){ EF_UnivariateDistribution uni = plateauStructure.getEFParameterPosteriorTimeT(var).deepCopy(); plateauStructure.getEFLearningBNTimeT().setDistribution(var,uni); this.plateauStructure.getNodeOfVarTimeT(var,0).setPDist(uni); } return this.plateauStructure.getLogProbabilityOfEvidenceTimeT(); }
/** * Updates the model at time 0 using a given {@link DynamicDataInstance}. * @param dataInstance a {@link DynamicDataInstance} object. * @return a {@code double} value. */ private double updateModelTime0(DynamicDataInstance dataInstance) { this.plateauStructure.setEvidenceTime0(dataInstance); this.plateauStructure.runInferenceTime0(); for (Variable var: plateauStructure.getEFLearningBNTime0().getParametersVariables()){ EF_UnivariateDistribution uni = plateauStructure.getEFParameterPosteriorTime0(var).deepCopy(); plateauStructure.getEFLearningBNTime0().setDistribution(var, uni); this.plateauStructure.getNodeOfVarTime0(var).setPDist(uni); } return this.plateauStructure.getLogProbabilityOfEvidenceTime0(); }
UnivariateDistribution dist = dataPosteriorAssignment.getPosterior().getPosterior(latentVariable); Variable interfaceVariable = this.svb.getDAG().getVariables().getVariableByName(latentVariable.getName() + DynamicVariables.INTERFACE_SUFFIX); this.svb.getPlateuStructure().getNodeOfVar(latentVariable, i).setPDist(dist.toEFUnivariateDistribution().deepCopy(interfaceVariable)); this.svb.getPlateuStructure().getNodeOfVar(latentVariable, i).setAssignment(null);