/** * 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; }
/** * Method to set the class variable. Note that it should be multinomial * @param className String with the name of the class variable * @throws WrongConfigurationException is thrown when the variable is not a multinomial. */ public T setClassName(String className) throws WrongConfigurationException { setClassVar(variables.getVariableByName(className)); return (T)this; }
@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()); } }
/** * Returns an interface variable given its name. * @param name a {@code String} that represents a valid interface variable name. * @return a {@link Variable} object. */ public Variable getInterfaceVariableByName(String name) { return this.getInterfaceVariable(this.getVariableByName(name)); }
public DynamicClassifier(Attributes attributes) { super(attributes); classVar = variables.getListOfDynamicVariables().get(variables.getNumberOfVars()-1); dynamicInferenceAlgoPredict = new FactoredFrontierForDBN(getInferenceAlgoPredict()); InferenceEngineForDBN.setInferenceAlgorithmForDBN(dynamicInferenceAlgoPredict); }
/** * Creates a new DynamicDAG from a set of given dynamic variables. * @param dynamicVariables1 a set of variables of type {@link DynamicVariables}. */ public DynamicDAG(DynamicVariables dynamicVariables1) { this.dynamicVariables = dynamicVariables1; this.parentSetTime0 = new ArrayList(dynamicVariables.getNumberOfVars()); this.parentSetTimeT = new ArrayList(dynamicVariables.getNumberOfVars()); for (Variable var : dynamicVariables) { parentSetTime0.add(var.getVarID(), new ParentSetImpl(var)); parentSetTimeT.add(var.getVarID(), new ParentSetImpl(var)); } this.dynamicVariables.block(); }
attributeList.add(attOLATMEAS); DynamicVariables dynamicVariables = new DynamicVariables(); Variable vlatSIGMA = dynamicVariables.newDynamicVariable(attVLATSIGMA); Variable vlatMEAS = dynamicVariables.newDynamicVariable(attVLATMEAS); Variable olatSIGMA = dynamicVariables.newDynamicVariable(attOLATSIGMA); Variable olatMEAS = dynamicVariables.newDynamicVariable(attOLATMEAS); Variable vlatREAL = dynamicVariables.newRealDynamicVariable(vlatMEAS); Variable olatREAL = dynamicVariables.newRealDynamicVariable(olatMEAS); Variable aLAT = dynamicVariables.newGaussianDynamicVariable("A_LAT"); Variable latEv = dynamicVariables.newMultinomialLogisticDynamicVariable("LE", Arrays.asList("Yes", "No")); dynamicDAG.getParentSetTimeT(olatMEAS).addParent(olatREAL); dynamicDAG.getParentSetTimeT(aLAT).addParent(dynamicVariables.getInterfaceVariable(aLAT)); dynamicDAG.getParentSetTimeT(vlatREAL).addParent(dynamicVariables.getInterfaceVariable(vlatREAL)); dynamicDAG.getParentSetTimeT(olatREAL).addParent(dynamicVariables.getInterfaceVariable(olatREAL)); dynamicDAG.getParentSetTimeT(olatREAL).addParent(dynamicVariables.getInterfaceVariable(vlatREAL));
DynamicVariables dynamicVariables = new DynamicVariables(data.getAttributes()); DynamicDAG dynamicDAG = new DynamicDAG(dynamicVariables); Variable A = dynamicVariables.getVariableByName("A"); Variable B = dynamicVariables.getVariableByName("B"); Variable C = dynamicVariables.getVariableByName("C"); Variable D = dynamicVariables.getVariableByName("D"); Variable E = dynamicVariables.getVariableByName("E"); Variable G = dynamicVariables.getVariableByName("G"); Variable A_Interface = dynamicVariables.getInterfaceVariable(A); Variable B_Interface = dynamicVariables.getInterfaceVariable(B); Variable E_Interface = dynamicVariables.getInterfaceVariable(E); Variable G_Interface = dynamicVariables.getInterfaceVariable(G);
DynamicVariables variables = new DynamicVariables(); .forEach(i -> variables.newMultinomialDynamicVariable("DiscreteVar" + i, DynamicBayesianNetworkGenerator.numberOfStates+n[i])); .forEach(i -> variables.newGaussianDynamicVariable("GaussianVar" + i)); int dagLinks = variables.getNumberOfVars()-1; while (dagLinks< numberOfLinks){ Variable var1 = variables.getVariableById(random.nextInt(variables.getNumberOfVars())); int max = variables.getNumberOfVars() - var1.getVarID() - 1; if (max == 0) continue; Variable var2 = variables.getVariableById(var1.getVarID() + 1 + random.nextInt(max)); dagLinks = variables.getNumberOfVars()-1; while (dagLinks< numberOfLinks){ Variable var1 = variables.getVariableById(random.nextInt(variables.getNumberOfVars())); int max = variables.getNumberOfVars() - var1.getVarID() - 1; if (max == 0) continue; Variable var2 = variables.getVariableById(var1.getVarID() + 1 + random.nextInt(max));
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; }
public static void main(String[] args) throws Exception { DynamicVariables variables = new DynamicVariables(); Variable gaussianVar = variables.newGaussianDynamicVariable("GaussianVar"); Variable multinomialVar = variables.newMultinomialDynamicVariable("MultinomialVar", 2); Variable multinomialVar2 = variables.newMultinomialDynamicVariable("MultinomialVar2", Arrays.asList("TRUE, FALSE")); variables.block(); Variable mainMultinomialVar = variables.getVariableFromInterface(multinomialVarInt);
DynamicVariables variables = new DynamicVariables(); 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 sensorSmoke = variables.newGaussianDynamicVariable(attributes.getAttributeByName("SensorSmoke"));
DynamicVariables dynamicVariables = new DynamicVariables(data.getAttributes()); Variable A = dynamicVariables.getVariableByName("A"); Variable B = dynamicVariables.getVariableByName("B"); Variable C = dynamicVariables.getVariableByName("C"); Variable D = dynamicVariables.getVariableByName("D"); Variable E = dynamicVariables.getVariableByName("E"); Variable G = dynamicVariables.getVariableByName("G"); Variable A_Interface = dynamicVariables.getInterfaceVariable(A); Variable B_Interface = dynamicVariables.getInterfaceVariable(B); Variable E_Interface = dynamicVariables.getInterfaceVariable(E); Variable G_Interface = dynamicVariables.getInterfaceVariable(G); Variable H = dynamicVariables.newMultinomialDynamicVariable("H", 2); Variable H_Interface = dynamicVariables.getInterfaceVariable(H);
DynamicVariables variables = new DynamicVariables(attributes); String className = attributes.getFullListOfAttributes().get(classIndex).getName(); hiddenVars = new ArrayList<Variable>(); hiddenVars.add(variables.newGaussianDynamicVariable("GlobalHidden_"+i)); Variable classVariable = variables.getVariableByName(className); continue; Variable variable = variables.getVariableByName(att.getName()); globalDynamicDAG.getParentSetTimeT(variable).addParent(classVariable); for (int i = 0; i < this.numberOfGlobalVars ; i++) {
/** * 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; }
/** * 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"); }
@Override public boolean isValidConfiguration() { boolean isValid = this.variables.getListOfDynamicVariables() .stream().allMatch(var -> var.isNormal()); if(!isValid) setErrorMessage("Invalid configuration: all the variables must be real"); return isValid; }
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; }
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; }
dynMAP.setNumberOfTimeSteps(nTimeSteps); Variable mapVariable = dynamicBayesianNetwork.getDynamicVariables().getVariableByName("ClassVar"); dynMAP.setMAPvariable(mapVariable); List<Variable> varsDynamicModel = dynamicBayesianNetwork.getDynamicVariables().getListOfDynamicVariables();