public static void main(String[] args) throws WrongConfigurationException { int seed=6236; int nSamples=5000; int nContinuousVars=10; DataStream<DataInstance> data = DataSetGenerator.generate(seed,nSamples,0,nContinuousVars); Model model = new FactorAnalysis(data.getAttributes()); System.out.println(model.getDAG()); model.updateModel(data); // for (DataOnMemory<DataInstance> batch : data.iterableOverBatches(1000)) { // model.updateModel(batch); // } System.out.println(model.getModel()); System.out.println(model.getPosteriorDistribution("LatentVar0").toString()); }
/** * {@inheritDoc} */ @Override public void setModel(DynamicBayesianNetwork model_) { model = model_; ef_model = new EF_DynamicBayesianNetwork(this.model); this.vmpTime0.setEFModel(ef_model.getBayesianNetworkTime0()); nodesTimeT = this.ef_model.getBayesianNetworkTimeT().getDistributionList() .stream() .map(dist -> new Node(dist)) .collect(Collectors.toList()); nodesClone = this.ef_model.getBayesianNetworkTime0().getDistributionList() .stream() .map(dist -> { Variable temporalClone = this.model.getDynamicVariables().getInterfaceVariable(dist.getVariable()); EF_UnivariateDistribution uni = temporalClone.getDistributionType().newUnivariateDistribution().toEFUnivariateDistribution(); Node node = new Node(uni); node.setActive(false); return node; }) .collect(Collectors.toList()); List<Node> allNodes = new ArrayList(); allNodes.addAll(nodesTimeT); allNodes.addAll(nodesClone); this.vmpTimeT.setNodes(allNodes); this.vmpTimeT.updateChildrenAndParents(); }
/** * Moves the posterior distribution of a given {@link Variable} from a {@link BayesianNetwork} object to another. * @param infAlg an {@link InferenceAlgorithm} object. * @param bnTo a {@link BayesianNetwork} object to which the posterior distribution should be moved. * @param var a given {@link Variable}. */ private void moveNodeQDist(InferenceAlgorithm infAlg, BayesianNetwork bnTo, Variable var){ //Recover original model and do the copy, then set again. Variable temporalClone = this.model.getDynamicVariables().getInterfaceVariable(var); UnivariateDistribution posteriorDist = infAlg.getPosterior(var).deepCopy(temporalClone); bnTo.setConditionalDistribution(temporalClone, posteriorDist); }
baseDistributionProbabilities = posteriorMAPVariableDistributions.get(baseModelIndex).get(baseDistributionIndex).getParameters(); int nStatesBaseDistribution = baseDistributionProbabilities.length; int baseDistrib_nMergedVars = (int) Math.round(Math.log(nStatesBaseDistribution) / Math.log(nStates)); int currentDistrib_nMergedVars = (int) Math.round(Math.log(currentDistrib.getVariable().getNumberOfStates()) / Math.log(nStates)); int current_nMergedVarsBaseDist = (int) Math.round(Math.log(baseDistributionProbabilities.length) / Math.log(nStates)); probabilities[currentState] += currentDistrib.getParameters()[m]; int previousDistrib_nMergedVars = (int) Math.round(Math.log(previousDistrib.getVariable().getNumberOfStates()) / Math.log(nStates)); probabilities[currentState] += previousDistrib.getParameters()[n] * currentDistrib.getParameters()[m];
double sampledValue = network.getConditionalDistributionsTime0().get(var.getVarID()).getUnivariateDistribution(dataPresent).sample(random); dataPresent.setValue(var, sampledValue); double sampledValue = network.getConditionalDistributionsTimeT().get(var.getVarID()).getUnivariateDistribution(d).sample(random); dataPresent.setValue(var, sampledValue);
double [] probabilities = posteriorMAPDistributionsStaticModel.stream().map(dist -> argMax(dist.getParameters())).mapToDouble(array -> array[0]).toArray(); double MAPsequenceProbability = Math.exp(Arrays.stream(probabilities).map(prob -> Math.log(prob)).sum()); int [] MAPsequence = posteriorMAPDistributionsStaticModel.stream().map(dist -> argMax(dist.getParameters())).mapToInt(array -> (int) array[1]).toArray();
/** * Samples an {@link Assignment} randomly from a {@link BayesianNetwork} conditioned to a given Assignment. * The assignment must only contains assignments from head nodes. * @param random, a random number generator * @param conditionAssignment, an {@link Assignment} object. * @return A sampled Assignment */ public static Assignment sample(BayesianNetwork network, List<Variable> causalOrder, Random random, Assignment conditionAssignment) { HashMapAssignment assignment = new HashMapAssignment(network.getNumberOfVars()); for (Variable var : causalOrder) { if (Utils.isMissingValue(conditionAssignment.getValue(var))) { double sampledValue = network.getConditionalDistribution(var).getUnivariateDistribution(assignment).sample(random); assignment.setValue(var, sampledValue); }else{ assignment.setValue(var,conditionAssignment.getValue(var)); } } return assignment; }
stringBuilder.append(Arrays.toString(uniDist.getParameters())); stringBuilder.append(" , "); }); UnivariateDistribution thisDistribution = thisModelPosteriors.get(k); int indexMaxProbability = (int)argMax(thisDistribution.getParameters())[1]; int thisDistribNumberOfMergedVars = (int) Math.round(Math.log(thisDistribution.getVariable().getNumberOfStates()) / Math.log(MAPvariable.getNumberOfStates()));
public static void main(String[] args) throws WrongConfigurationException { DataStream<DataInstance> data = DataSetGenerator.generate(1234,500, 0, 1); GaussianMixture GMM = new GaussianMixture(data.getAttributes()); GMM.setDiagonal(false); GMM.setNumStatesHiddenVar(2); GMM.updateModel(data); for (DataOnMemory<DataInstance> batch : data.iterableOverBatches(100)) { GMM.updateModel(batch); } System.out.println(GMM.getModel()); System.out.println(GMM.getDAG()); System.out.println("HiddenVar"); System.out.println(GMM.getPosteriorDistribution("HiddenVar").toString()); /* try { DataStreamWriter.writeDataToFile(data, "tmp/gmm2vars.arff"); } catch (IOException e) { e.printStackTrace(); } */ } }
.map(dist -> { Variable temporalClone = this.dbnModel.getDynamicVariables().getInterfaceVariable(dist.getVariable()); EF_UnivariateDistribution uni = temporalClone.getDistributionType().newUnivariateDistribution().toEFUnivariateDistribution(); Node node = new Node(uni); node.setActive(false);
.forEach(v -> map.put(v,this.infAlgTimeT.getPosterior(v).deepCopy(v.getInterfaceVariable())));
@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); } }
model.updateModel(batch); System.out.println(model.getPosteriorDistribution("GlobalHidden_0"). toString());
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);
public static void main(String[] args) throws WrongConfigurationException { DataStream<DataInstance> data = DataSetGenerator.generate(0,1000, 0, 10); System.out.println(data.getAttributes().toString()); String className = "GaussianVar0"; BayesianLinearRegression BLR = new BayesianLinearRegression(data.getAttributes()) .setClassName(className) .setWindowSize(100) .setDiagonal(false); BLR.updateModel(data); for (DataOnMemory<DataInstance> batch : data.iterableOverBatches(100)) { BLR.updateModel(batch); } System.out.println(BLR.getModel()); System.out.println(BLR.getDAG()); List<DataInstance> dataTest = data.stream().collect(Collectors.toList()).subList(0,5); for(DataInstance d : dataTest) { Assignment assignment = new HashMapAssignment(BLR.getModel().getNumberOfVars()-1); for (int i=0; i<BLR.getModel().getNumberOfVars(); i++) { Variable v = BLR.getModel().getVariables().getVariableById(i); if(!v.equals(BLR.getClassVar())) assignment.setValue(v,d.getValue(v)); } UnivariateDistribution posterior = InferenceEngine.getPosterior(BLR.getClassVar(), BLR.getModel(),assignment); System.out.println(posterior.toString()); } }
System.out.println("["+instance.getSequenceID()+","+instance.getTimeID()+"]"+dist.toString()); distAhead = InferenceEngineForDBN.getPredictivePosterior(targetVar,1); System.out.println("PP: "+distAhead.toString()); System.out.println("["+instance.getSequenceID()+","+instance.getTimeID()+"]"+dist.toString()); distAhead = InferenceEngineForDBN.getPredictivePosterior(targetVar,1); System.out.println("PP: "+distAhead.toString()); System.out.println("["+instance.getSequenceID()+","+instance.getTimeID()+"]"+dist.toString()); distAhead = InferenceEngineForDBN.getPredictivePosterior(targetVar,1); System.out.println("PP: "+distAhead.toString());
System.out.println((inferenceForBN.getPosterior(ClassVar)).toString());