}); dynamicDAG = new DynamicDAG(this.variables); dynamicDAG.getParentSetsTimeT() .stream() .filter(w -> !gaussianHiddenVars.contains(w.getMainVar())) dynamicDAG.getParentSetTimeT(gaussianHiddenVar).addParent(gaussianHiddenVar.getInterfaceVariable()); dynamicDAG.getParentSetTime0(gaussianHiddenVars.get(i)).addParent(gaussianHiddenVars.get(j)); dynamicDAG.getParentSetTimeT(gaussianHiddenVars.get(i)).addParent(gaussianHiddenVars.get(j)); dynamicDAG.getParentSetTime0(observedVars.get(i)).addParent(observedVars.get(j)); dynamicDAG.getParentSetTimeT(observedVars.get(i)).addParent(observedVars.get(j));
/** * Returns a textual representation of the parent set of this DynamicDAG. * @return a String description of the parent set of this DynamicDAG. */ public String toString() { StringBuilder str = new StringBuilder(); str.append("\nDynamic DAG at Time 0\n"); for (Variable var : this.getDynamicVariables()) { str.append(var.getName() + " has "+ this.getParentSetTime0(var).getNumberOfParents() + " parent(s): " + this.parentSetTime0.get(var.getVarID()).toString() + "\n"); } str.append("\nDynamic DAG at Time T\n"); for (Variable var : this.getDynamicVariables()) { str.append(var.getName() + " has "+ this.getParentSetTimeT(var).getNumberOfParents() + " parent(s): " + this.getParentSetTimeT(var).toString() + "\n"); } return str.toString(); }
public static void main(String[] agrs) throws IOException, ClassNotFoundException { DynamicBayesianNetworkGenerator.setNumberOfContinuousVars(2); DynamicBayesianNetworkGenerator.setNumberOfDiscreteVars(8); DynamicBayesianNetworkGenerator.setNumberOfStates(2); DynamicBayesianNetworkGenerator.setNumberOfLinks(5); DynamicBayesianNetwork dynamicBayesianNetwork; dynamicBayesianNetwork = DynamicBayesianNetworkGenerator.generateDynamicNaiveBayes(new Random(0), 2, true); System.out.println("DYNAMIC NAIVE BAYES"); System.out.println(dynamicBayesianNetwork.getDynamicDAG().toString()); dynamicBayesianNetwork = DynamicBayesianNetworkGenerator.generateDynamicFAN(new Random(0), 2, true); System.out.println("DYNAMIC FAN"); System.out.println(dynamicBayesianNetwork.getDynamicDAG().toString()); dynamicBayesianNetwork = DynamicBayesianNetworkGenerator.generateDynamicTAN(new Random(0), 2, true); System.out.println("DYNAMIC TAN"); System.out.println(dynamicBayesianNetwork.getDynamicDAG().toString()); dynamicBayesianNetwork = DynamicBayesianNetworkGenerator.generateDynamicBayesianNetwork(); System.out.println("DYNAMIC BN"); System.out.println(dynamicBayesianNetwork.getDynamicDAG().toString()); } }
@Override public void setDAG(DynamicDAG dag) { this.dynamicDAG = dag; this.dagTime0=this.dynamicDAG.toDAGTime0(); this.dagTimeT=this.dynamicDAG.toDAGTimeT(); }
/** * Creates a new EF_BayesianNetwork object given a {@link DynamicDAG} object. * @param dag a {@link DynamicDAG} object. */ public EF_DynamicBayesianNetwork(DynamicDAG dag) { this.bayesianNetworkTime0 = new EF_BayesianNetwork(dag.getParentSetsTime0()); this.bayesianNetworkTimeT = new EF_BayesianNetwork(dag.getParentSetsTimeT()); }
this.globalDynamicDAG = new DynamicDAG(variables); globalDynamicDAG.getParentSetTimeT(variable).addParent(classVariable); for (int i = 0; i < this.numberOfGlobalVars ; i++) { globalDynamicDAG.getParentSetTimeT(variable).addParent(hiddenVars.get(i)); this.globalDynamicDAG.getParentSetTimeT(classVariable).addParent(classVariable.getInterfaceVariable()); System.out.println(globalDynamicDAG.toString());
@Override protected void buildDAG() { //Obtain the predictive attributes List<Variable> attrVars = variables.getListOfDynamicVariables().stream() .filter(v -> !v.equals(classVar)).collect(Collectors.toList()); //Create the hidden variabels hiddenMultinomial = variables.newMultinomialDynamicVariable("M", numStatesHidden); contHiddenList = new ArrayList<Variable>(); for(int i=0; i<numContinuousHidden; i++) { contHiddenList.add(variables.newGaussianDynamicVariable("Z"+Integer.toString(i))); } dynamicDAG = new DynamicDAG(variables); //arcs from the class to the hidden variables dynamicDAG.getParentSetTimeT(hiddenMultinomial).addParent(classVar); contHiddenList.stream().forEach(z -> dynamicDAG.getParentSetTimeT(z).addParent(classVar)); //arcs from the hidden vars to each attribute attrVars.stream().forEach(x->dynamicDAG.getParentSetTimeT(x).addParent(hiddenMultinomial)); for (Variable z : contHiddenList) { attrVars.stream().forEach(x->dynamicDAG.getParentSetTimeT(x).addParent(z)); } //Add dynamic links on class and continuous layer dynamicDAG.getParentSetTimeT(classVar).addParent(classVar.getInterfaceVariable()); for (Variable variable : contHiddenList) { dynamicDAG.getParentSetTimeT(variable).addParent(variable.getInterfaceVariable()); } }
/** * This method returns a DynamicDAG object with naive Bayes structure for the given attributes. * @param attributes object of the class Attributes * @param classIndex integer value indicating the possition of the class * @return object of the class DynamicDAG */ public static DynamicDAG getNaiveBayesStructure(Attributes attributes, int classIndex){ //We create a Variables object from the attributes of the data stream DynamicVariables dynamicVariables = new DynamicVariables(attributes); //We define the predicitive class variable Variable classVar = dynamicVariables.getVariableById(classIndex); //Then, we create a DAG object with the defined model header DynamicDAG dag = new DynamicDAG(dynamicVariables); //We set the links of the DAG. dag.getParentSetsTimeT().stream() .filter(var -> var.getMainVar().getVarID()!=classVar.getVarID()) .forEach(w -> { w.addParent(classVar); //Connect children in consecutive time steps w.addParent(dynamicVariables.getInterfaceVariable(w.getMainVar())); } ); //Connect the class variable in consecutive time steps dag.getParentSetTimeT(classVar).addParent(dynamicVariables.getInterfaceVariable(classVar)); return dag; }
} while (!level2Var.isMultinomial() || level2Var.getName().equals(classVarName) || level2Var.equals(level1Var)); dynamicDAG.getParentSetTime0(level2Var).addParent(level1Var); dynamicDAG.getParentSetTimeT(level2Var).addParent(level1Var); variablesLevel2.add(level2Var); dynamicDAG.getParentSetTime0(currentVar).addParent(possibleParent); dynamicDAG.getParentSetTimeT(currentVar).addParent(possibleParent); if (dynamicDAG.toDAGTime0().containCycles() || dynamicDAG.toDAGTimeT().containCycles()) { System.out.println("ERROR: DAG WITH CYCLES"); System.out.println(dynamicDAG.toString()); System.exit(-1);
dynamicDAG = new DynamicDAG(this.variables); throw new UnsupportedOperationException("Invalid configuration: all the input variables must be " + "discrete"); dynamicDAG.getParentSetTimeT(discreteHiddenVar).addParent(inputVar); for (Variable outputVar : outputVars) { dynamicDAG.getParentSetTimeT(outputVar).addParent(inputVar); dynamicDAG.getParentSetTimeT(outputVar).addParent(discreteHiddenVar); dynamicDAG.getParentSetTimeT(discreteHiddenVar).addParent(discreteHiddenVar.getInterfaceVariable()); dynamicDAG.getParentSetTime0(inputVars.get(i)).addParent(inputVars.get(j)); dynamicDAG.getParentSetTimeT(inputVars.get(i)).addParent(inputVars.get(j)); dynamicDAG.getParentSetTime0(outputVars.get(i)).addParent(outputVars.get(j)); dynamicDAG.getParentSetTimeT(outputVars.get(i)).addParent(outputVars.get(j));
/** * Sets the MAP variable for this DynamicMAPInference. * @param MAPvariable a valid {@link Variable} object. */ public void setMAPvariable(Variable MAPvariable) { boolean parents0 = model.getDynamicDAG().getParentSetTime0(MAPvariable).getNumberOfParents()>0; boolean parentsT = model.getDynamicDAG().getParentSetTimeT(MAPvariable).getParents().stream().anyMatch(parent -> !parent.isInterfaceVariable()); if (parents0 || parentsT) { System.out.println("Error: The dynamic MAP variable must not have parents"); System.exit(-5); } if (!MAPvariable.isMultinomial()) { System.out.println("Error: The dynamic MAP variable must be multinomial"); System.exit(-10); } this.MAPvariable = MAPvariable; this.MAPvarName = MAPvariable.getName(); }
DynamicDAG dynamicDAG = new DynamicDAG(dynamicVariables); dynamicDAG.getParentSetsTimeT().stream() .filter(pset -> pset.getMainVar().getVarID() != A.getVarID()) .filter(pset -> pset.getMainVar().getVarID() != H.getVarID()) pset.addParent(H); }); dynamicDAG.getParentSetTimeT(A).addParent(A_Interface); dynamicDAG.getParentSetTimeT(B).addParent(B_Interface); dynamicDAG.getParentSetTimeT(E).addParent(E_Interface); dynamicDAG.getParentSetTimeT(G).addParent(G_Interface); dynamicDAG.getParentSetTimeT(H).addParent(H_Interface); System.out.println(dynamicDAG.toString());
.forEach(i -> dynamicVariables.newGaussianDynamicVariable("C" + i)); DynamicDAG dag = new DynamicDAG(dynamicVariables); dag.getParentSetTimeT(varH1).addParent(varH1.getInterfaceVariable()); dag.getParentSetsTimeT().stream() .filter(v -> !v.getMainVar().getName().contains("A") && !v.getMainVar().getName().contains("C") && dag.getParentSetsTimeT().stream() .filter(var -> !var.getMainVar().getName().contains("H")) .forEach(w -> { dag.getDynamicVariables().getListOfDynamicVariables().stream() .filter(x -> x.getName().contains("H") && x.getVarID()!=varH1.getVarID()) dag.getParentSetsTimeT().stream() .filter(var -> var.getMainVar().getVarID()!=varH1.getVarID()) .forEach(w -> { dynamicSampler.setHiddenVar(varH1); if(this.isActivateMiddleLayer()) { dag.getDynamicVariables().getListOfDynamicVariables().stream() .filter(x -> x.getName().contains("H") && x.getVarID()!=varH1.getVarID())
DynamicDAG dynamicDAG = new DynamicDAG(dynamicVariables); dynamicDAG.setName("CajarMarModel"); dynamicDAG.getParentSetTimeT(defaulter).addParent(dynamicVariables.getInterfaceVariable(defaulter)); dynamicDAG.getParentSetTimeT(sex).addParent(defaulter); dynamicDAG.getParentSetTimeT(creditCard).addParent(defaulter); dynamicDAG.getParentSetTimeT(creditCard).addParent(dynamicVariables.getInterfaceVariable(creditCard)); dynamicDAG.getParentSetTimeT(balance).addParent(defaulter); dynamicDAG.getParentSetTimeT(balance).addParent(dynamicVariables.getInterfaceVariable(balance)); dynamicDAG.getParentSetTimeT(withDraw).addParent(defaulter); dynamicDAG.getParentSetTimeT(withDraw).addParent(dynamicVariables.getInterfaceVariable(withDraw)); dynamicDAG.getParentSetTimeT(salary).addParent(defaulter); dynamicDAG.getParentSetTimeT(salary).addParent(dynamicVariables.getInterfaceVariable(salary)); dynamicDAG.getParentSetTimeT(monthlyBalance).addParent(defaulter); dynamicDAG.getParentSetTimeT(monthlyBalance).addParent(dynamicVariables.getInterfaceVariable(balance)); dynamicDAG.getParentSetTimeT(monthlyBalance).addParent(dynamicVariables.getInterfaceVariable(monthlyBalance)); dynamicDAG.getParentSetTimeT(movements).addParent(defaulter); dynamicDAG.getParentSetTimeT(movements).addParent(creditCard); System.out.println(dynamicDAG.toString());
public static DynamicDAG createDynamicNaiveBayes(Attributes attributes){ // Create a Variables object from the attributes of the input data stream. DynamicVariables variables = new DynamicVariables(attributes); // Define the class variable. Variable classVar = variables.getVariableById(0); // Create a DAG object with the defined variables. DynamicDAG dynamicDAG = new DynamicDAG(variables); // Link the class as parent of all attributes dynamicDAG.getParentSetsTimeT() .stream() .filter(w -> w.getMainVar() != classVar) .forEach(w -> w.addParent(classVar)); // Link the class and the attributes through time dynamicDAG.getParentSetsTimeT() .stream() .forEach(w -> w.addParent(w.getMainVar().getInterfaceVariable())); // Return the DAG. return dynamicDAG; }
public static DynamicBayesianNetwork createDBN1(int numVars) throws Exception { DynamicVariables dynamicVariables = new DynamicVariables(); Variable classVar = dynamicVariables.newMultinomialDynamicVariable("C", 2); for (int i = 0; i < numVars; i++) { dynamicVariables.newGaussianDynamicVariable("A" + i); } DynamicDAG dag = new DynamicDAG(dynamicVariables); for (int i = 0; i < numVars; i++) { dag.getParentSetTimeT(dynamicVariables.getVariableByName("A" + i)).addParent(classVar); if (connectDBN) dag.getParentSetTimeT(dynamicVariables.getVariableByName("A" + i)).addParent(dynamicVariables.getVariableByName("A" + i).getInterfaceVariable()); } //dag.getParentSetTimeT(classVar).addParent(classVar.getInterfaceVariable()); dag.setName("dbn1"); DynamicBayesianNetwork dbn = new DynamicBayesianNetwork(dag); dbn.randomInitialization(new Random(1)); return dbn; }
if (dag.getParentSetTime0(var2).contains(var1) || !var2.getDistributionType().isParentCompatible(var1) || dag.getParentSetTime0(var2).getNumberOfParents()>=3) continue; dag.getParentSetTime0(var2).addParent(var1); dagLinks++; if (dag.getParentSetTimeT(var2).contains(var1) || !var2.getDistributionType().isParentCompatible(var1) || dag.getParentSetTimeT(var2).getNumberOfParents()>=3) continue; dag.getParentSetTimeT(var2).addParent(var1); dagLinks++; dag.getParentSetTimeT(variable).addParent(variable.getInterfaceVariable()); if (dag.containCycles()) throw new IllegalStateException("DAG with cycles");
/** * Returns the DAG at time T of this DynamicDAG. * @return a {@link DAG} object. */ public DAG toDAGTimeT(){ List<Variable> allVariables = new ArrayList<>(); allVariables.addAll(this.getDynamicVariables().getListOfDynamicVariables()); allVariables.addAll(this.getDynamicVariables().getListOfInterfaceVariables()); Variables staticVariables = Variables.auxiliarBuilder(allVariables); DAG dag = new DAG(staticVariables); dag.setName(this.getName()); for (Variable dynamicVariable : dynamicVariables) { for (Variable parent : this.getParentSetTimeT(dynamicVariable)) { dag.getParentSet(dynamicVariable).addParent(parent); } } return dag; }
/** * Return the list of non-observed and temporally connected variables for time T. * @return a {@code List} of {@link Variable}. */ private List<Variable> getTargetVarsTimeT(){ return this.model.getDynamicVariables().getListOfDynamicVariables().stream() .filter(var -> !var.isInterfaceVariable()) .filter(var -> Utils.isMissingValue(this.assignment.getValue(var))) .filter(var -> { boolean notContainInterfaceVar = true; for (Variable variable : this.model.getDynamicDAG().getParentSetTimeT(var)) { notContainInterfaceVar = notContainInterfaceVar && !variable.isInterfaceVariable(); } return !notContainInterfaceVar; }) .collect(Collectors.toList()); }
public static List<Variable> getCausalOrderTimeT(DynamicDAG dag){ DynamicVariables variables = dag.getDynamicVariables(); int nNrOfAtts = variables.getNumberOfVars(); List<Variable> order = new ArrayList(); boolean[] bDone = new boolean[variables.getNumberOfVars()]; for (Variable var: variables){ bDone[var.getVarID()] = false; } for (int iAtt = 0; iAtt < nNrOfAtts; iAtt++) { boolean allParentsDone = false; for (Variable var2 : variables){ if (!bDone[var2.getVarID()]) { allParentsDone = true; for (Variable parent: dag.getParentSetTimeT(var2)) { if (parent.isInterfaceVariable()) continue; allParentsDone = allParentsDone && bDone[parent.getVarID()]; } if (allParentsDone){ order.add(var2); bDone[var2.getVarID()] = true; } } } } return order; }