Variable binaryHiddenVar = this.variables.newMultinomialDynamicVariable("binaryHiddenVar" + i,2); binaryHiddenVars.add(binaryHiddenVar); });
@Override protected void buildDAG() { Variable discreteHiddenVar = this.variables.newMultinomialDynamicVariable("discreteHiddenVar", getNumStatesHiddenVar()); dynamicDAG = new DynamicDAG(this.variables); dynamicDAG.getParentSetsTimeT() .stream() .filter(w -> w.getMainVar() != discreteHiddenVar) .forEach(w -> w.addParent(discreteHiddenVar)); dynamicDAG.getParentSetTimeT(discreteHiddenVar).addParent(discreteHiddenVar.getInterfaceVariable()); /* * Learn full covariance matrix */ if(!isDiagonal()) { List<Variable> observedVars = this.variables.getListOfDynamicVariables() .stream() .filter(v -> !v.equals(discreteHiddenVar)) .peek(v-> { if(v.isMultinomial()) throw new UnsupportedOperationException("Full covariance matrix cannot be used with" + " multinomial attributes"); }) .collect(Collectors.toList()); for (int i=0; i<observedVars.size()-1; i++){ for(int j=i+1; j<observedVars.size(); j++) { dynamicDAG.getParentSetTime0(observedVars.get(i)).addParent(observedVars.get(j)); dynamicDAG.getParentSetTimeT(observedVars.get(i)).addParent(observedVars.get(j)); } } } }
@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()); } }
public static DynamicDAG createDynamicNaiveBayesWithHidden(Attributes attributes){ // Create a Variables object from the attributes of the input data stream. DynamicVariables variables = new DynamicVariables(attributes); // Define the global latent binary variable. Variable globalHiddenVar = variables.newMultinomialDynamicVariable("GlobalHidden", 2); // 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 (and the hidden) dynamicDAG.getParentSetsTimeT() .stream() .filter(w -> w.getMainVar() != classVar) .forEach(w -> w.addParent(classVar)); // Link the hidden as parent of all attributes dynamicDAG.getParentSetsTimeT() .stream() .filter(w -> w.getMainVar() != classVar) .forEach(w -> w.addParent(globalHiddenVar)); // Link the class, the hidden and the attributes through time dynamicDAG.getParentSetsTimeT() .stream() .forEach(w -> w.addParent(w.getMainVar().getInterfaceVariable())); // Return the DAG. return dynamicDAG; }
/** * Generates a Dynamic Naive Bayes DAG with a Multinomial class variable. * @param numberClassStates the number of states for the class variable. * @param connectChildrenTemporally a {@code boolean} that indicates whether the children are connected temporally or not. * @return a {@link DynamicDAG} object. */ public static DynamicDAG generateDynamicNaiveBayesDAG(int numberClassStates, boolean connectChildrenTemporally){ DynamicVariables dynamicVariables = new DynamicVariables(); //class variable which is always discrete Variable classVar = dynamicVariables.newMultinomialDynamicVariable(classVarName, numberClassStates); //Discrete variables IntStream.range(1, numberOfDiscreteVars+1) .forEach(i -> dynamicVariables.newMultinomialDynamicVariable(discreteVarName + i, DynamicBayesianNetworkGenerator.numberOfStates)); //Continuous variables IntStream.range(1,numberOfContinuousVars+1) .forEach(i -> dynamicVariables.newGaussianDynamicVariable(continuousVarName + i)); DynamicDAG dag = new DynamicDAG(dynamicVariables); dag.getParentSetsTimeT().stream() .filter(var -> var.getMainVar().getVarID()!=classVar.getVarID()) .forEach(w -> { w.addParent(classVar); if (connectChildrenTemporally) { w.addParent(dynamicVariables.getInterfaceVariable(w.getMainVar())); } } ); dag.getParentSetTimeT(classVar).addParent(dynamicVariables.getInterfaceVariable(classVar)); return dag; }
@Override protected void buildDAG() { Variable discreteHiddenVar = this.variables.newMultinomialDynamicVariable("discreteHiddenVar", getNumStates()); dynamicDAG = new DynamicDAG(this.variables); dynamicDAG.getParentSetsTimeT()
Variable multinomialVar = variables.newMultinomialDynamicVariable("MultinomialVar", 2); Variable multinomialVar2 = variables.newMultinomialDynamicVariable("MultinomialVar2", Arrays.asList("TRUE, FALSE"));
@Override protected void buildDAG() { Variable discreteHiddenVar = this.variables.newMultinomialDynamicVariable("discreteHiddenVar", getNumStates()); Variable gaussianHiddenVar = this.variables.newGaussianDynamicVariable("gaussianHiddenVar");
Variable discreteHiddenVar = this.variables.newMultinomialDynamicVariable("discreteHiddenVar", getNumStates());
.forEach(i -> variables.newMultinomialDynamicVariable("DiscreteVar" + i, DynamicBayesianNetworkGenerator.numberOfStates+n[i]));
Variable varH1 = dynamicVariables.newMultinomialDynamicVariable("H1",this.getNumberOfStates()); .forEach(i -> dynamicVariables.newMultinomialDynamicVariable("H" + i, this.getNumberOfStates())); .forEach(i -> dynamicVariables.newMultinomialDynamicVariable("A" + i, this.getNumberOfStates()));
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; }
.forEach(i -> variables.newMultinomialDynamicVariable("DiscreteVar" + i, DynamicBayesianNetworkGenerator.numberOfStates));
/** * In this example we show how to create an input-outputString KF with Gaussian mixtures (as in Figure 4.29 of Deliverable 2.1). */ public static void VerdandeInputOutputHMM() throws IOException { DataStream<DynamicDataInstance> data = DynamicDataStreamLoader.loadFromFile("datasets/simulated/syntheticDataVerdandeScenario3.arff"); Attribute attDepth = data.getAttributes().getAttributeByName("depth"); Attribute attGammaDiff = data.getAttributes().getAttributeByName("gammaDiff"); DynamicVariables dynamicVariables = new DynamicVariables(); Variable observedDepth = dynamicVariables.newDynamicVariable(attDepth); Variable observedGammaDiff = dynamicVariables.newDynamicVariable(attGammaDiff); Variable formationNo = dynamicVariables.newMultinomialLogisticDynamicVariable("FormationNo", 2); Variable shift = dynamicVariables.newMultinomialDynamicVariable("Shift",2); DynamicDAG dynamicDAG = new DynamicDAG(dynamicVariables); dynamicDAG.getParentSetTimeT(formationNo).addParent(observedDepth); dynamicDAG.getParentSetTimeT(formationNo).addParent(dynamicVariables.getInterfaceVariable(formationNo)); //TODO Error trying to add a duplicate parent. A -> B <- Aclone. We are considering A and AClone the same variables? Is that right? dynamicDAG.getParentSetTimeT(shift).addParent(formationNo); //dynamicDAG.getParentSetTimeT(shift).addParent(dynamicVariables.getInterfaceVariable(formationNo)); dynamicDAG.getParentSetTimeT(shift).addParent(dynamicVariables.getInterfaceVariable(shift)); dynamicDAG.getParentSetTimeT(observedGammaDiff).addParent(shift); System.out.println("-------------------------------------\n"); System.out.println("Input-outputString HMM (Figure 4.31 of D2.1)\n"); System.out.println(dynamicDAG.toString()); DynamicBayesianNetwork dbn = new DynamicBayesianNetwork(dynamicDAG); System.out.println(dbn.toString()); DynamicBayesianNetworkWriter.save(dbn, "networks/simulated/HuginVerdandeIOHMM.dbn"); }
Variable fire = variables.newMultinomialDynamicVariable(attributes.getAttributeByName("Fire")); Variable temperature = variables.newGaussianDynamicVariable("Temperature"); Variable smoke = variables.newMultinomialDynamicVariable("Smoke", 2); Variable sensorT1 = variables.newGaussianDynamicVariable(attributes.getAttributeByName("SensorTemp1")); Variable sensorT2 = variables.newGaussianDynamicVariable(attributes.getAttributeByName("SensorTemp2"));
Variable H = dynamicVariables.newMultinomialDynamicVariable("H", 2); Variable H_Interface = dynamicVariables.getInterfaceVariable(H);
Variable fire = variables.newMultinomialDynamicVariable("Fire", 2); Variable temperature = variables.newGaussianDynamicVariable("Temperature"); Variable smoke = variables.newMultinomialDynamicVariable("Smoke", 2); Variable sensorT1 = variables.newGaussianDynamicVariable("SensorTemp1"); Variable sensorT2 = variables.newGaussianDynamicVariable("SensorTemp2");