/** * Returns a variable given its name. * @param name a {@code String} that represents a valid variable name. * @return a {@link Variable} object. */ public Variable getVariableByName(String name) { Integer index = this.mapping.get(name); if (index==null) { throw new UnsupportedOperationException("Variable " + name + " is not part of the list of Variables"); } else { return this.getVariableById(index.intValue()); } }
/** * Returns the class variable of the classifier * @return A <code>Variable</code> object */ public Variable getClassVariable(){ return this.svb.getLearntDynamicBayesianNetwork().getDynamicVariables().getVariableById(this.classIndex); }
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; }
/** * {@inheritDoc} */ @Override public double getValue(Attribute att, boolean present) { if (att.getIndex() == 0) { return this.sequenceID; } else if (att.getIndex() == 1){ return this.timeID; }else{ return this.getValue(dbn.getDynamicVariables().getVariableById(att.getIndex() - 2)); } }
/** * {@inheritDoc} */ @Override public void setValue(Attribute att, double val, boolean present) { if (att.getIndex() == 0) { this.sequenceID = (int)val; } else if (att.getIndex() == 1){ this.timeID = (int) val; }else { this.setValue(dbn.getDynamicVariables().getVariableById(att.getIndex() - 2), val); } }
Variable classVar = modelHeader.getVariableById(0);
level1Var = variables.getVariableById(random.nextInt(numberOfVariables)); } while (!level1Var.isMultinomial() || level1Var.getName().equals(classVarName)); level2Var = variables.getVariableById(random.nextInt(numberOfVariables)); } while (!level2Var.isMultinomial() || level2Var.getName().equals(classVarName) || level2Var.equals(level1Var));
treeRoot = variables.getVariableById(random.nextInt(numberOfVariables)); } while (!treeRoot.isMultinomial() || treeRoot.getName().equals(classVarName)); level2Var = variables.getVariableById(random.nextInt(numberOfVariables));
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)); 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));
for (int j = 0; j < dynamicVariables.getNumberOfVars(); j++) { Variable dynVar = dynamicVariables.getVariableById(j); Variable staticVar = variables.getVariableByName(dynVar.getName() + "_t" + Integer.toString(i)); staticVar = variables.getVariableByName(dynamicVariables.getVariableById(j).getName() + "_t0"); staticVar = variables.getVariableByName(dynamicVariables.getVariableById(j).getName() + "_t" + Integer.toString(final_i));
int iter = 0; while (dagLinks< numberOfLinks && iter<1000){ 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)); iter = 0; while (dagLinks< numberOfLinks && iter<1000){ 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));
/** * 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; }
/** * Sets the nodes and temporal clones (if exist) in the Hugin model from the AMIDST model. * @param amidstDBN the Dynamic Bayesian network model in AMIDST format. * @throws ExceptionHugin */ private void setNodesAndTemporalClones(DynamicBayesianNetwork amidstDBN) throws ExceptionHugin { DynamicVariables dynamicVars = amidstDBN.getDynamicVariables(); int size = dynamicVars.getNumberOfVars(); //Hugin always inserts variables in position 0, i.e, for an order A,B,C, it stores C,B,A //A reverse order of the variables is used instead. for(int i=1;i<=size;i++){ Variable amidstVar = dynamicVars.getVariableById(size-i); LabelledDCNode n = new LabelledDCNode(huginDBN); n.setName(amidstVar.getName()); n.setNumberOfStates(amidstVar.getNumberOfStates()); n.setLabel(amidstVar.getName()); for (int j=0;j<n.getNumberOfStates();j++){ String stateName = ((FiniteStateSpace)amidstVar.getStateSpaceType()).getStatesName(j); n.setStateLabel(j, stateName); } Node huginVar = this.huginDBN.getNodeByName(amidstVar.getName()); Node clone = huginVar.createTemporalClone(); clone.setName("T_"+huginVar.getName()); clone.setLabel("T_"+huginVar.getLabel()); } }