public DynamicModel(Attributes attributes) { this.variables = new DynamicVariables(attributes); if (!this.isValidConfiguration()) throw new WrongConfigurationException(getErrorMessage()); }
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 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; }
@Override protected void buildDAG() { /*number of continuous hidden variable*/ int numHiddenVars=3; /** Create a set of dynamic variables from the given attributes**/ variables = new DynamicVariables(attributes); /* List of continuous hidden vars*/ List<Variable> gaussianHiddenVars = new ArrayList<>(); for(int i=0; i<numHiddenVars; i++) { Variable Hi = variables.newGaussianDynamicVariable("gaussianHiddenVar" + i); gaussianHiddenVars.add(Hi); } DynamicDAG dynamicDAG = new DynamicDAG(this.variables); for (Variable h : gaussianHiddenVars) { dynamicDAG.getParentSetTimeT(h).addParent(h.getInterfaceVariable()); } for (Variable variable: variables) { if (gaussianHiddenVars.contains(variable)) continue; for (Variable h : gaussianHiddenVars) { dynamicDAG.getParentSetTimeT(variable).addParent(h); } } //This is needed to maintain coherence in the DynamicModel class. this.variables = variables; this.dynamicDAG = dynamicDAG; }
DynamicVariables modelHeader = new DynamicVariables(attributes);
/** * 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; }
public static void main(String[] args) throws Exception { DynamicVariables variables = new DynamicVariables();
DynamicVariables variables = new DynamicVariables(attributes); String className = attributes.getFullListOfAttributes().get(classIndex).getName(); hiddenVars = new ArrayList<Variable>();
/** * 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; }
/** * Learns the dynamic graphical structure for this DynamicNaiveBayesClassifier given an input data stream. * @param dataStream a {@link DataStream} of {@link DynamicDataInstance}s. * @return a {@link DynamicDAG} object. */ private DynamicDAG dynamicNaiveBayesStructure(DataStream<DynamicDataInstance> dataStream){ DynamicVariables dynamicVariables = new DynamicVariables(dataStream.getAttributes()); Variable classVar = dynamicVariables.getVariableById(this.getClassVarID()); DynamicDAG dag = new DynamicDAG(dynamicVariables); dag.getParentSetsTimeT().stream() .filter(w -> w.getMainVar().getVarID() != classVar.getVarID()) .forEach(w -> { w.addParent(classVar); if(isConnectChildrenTemporally()) w.addParent(dynamicVariables.getInterfaceVariable(w.getMainVar())); }); dag.getParentSetTimeT(classVar).addParent(dynamicVariables.getInterfaceVariable(classVar)); return dag; }
DynamicVariables variables = new DynamicVariables();
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; }
DynamicVariables dynamicVariables = new DynamicVariables(attributes); DynamicDAG dynamicDAG = new DynamicDAG(dynamicVariables);
DynamicVariables variables = new DynamicVariables();
/** * 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"); }
attributeList.add(attROP); DynamicVariables dynamicVariables = new DynamicVariables();
DynamicVariables dynamicVariables = new DynamicVariables(data.getAttributes());
DynamicVariables dynamicVariables = new DynamicVariables(data.getAttributes()); DynamicDAG dynamicDAG = new DynamicDAG(dynamicVariables);
DynamicVariables variables = new DynamicVariables();
public static DynamicBayesianNetwork createDynamicFireDetectorModel() { DynamicVariables variables = new DynamicVariables();