public static void main(String[] args) throws Exception{ Stopwatch watch = Stopwatch.createStarted(); DynamicBayesianNetworkGenerator dbnGenerator = new DynamicBayesianNetworkGenerator(); dbnGenerator.setNumberOfContinuousVars(0); dbnGenerator.setNumberOfDiscreteVars(3); dbnGenerator.setNumberOfStates(2); DynamicBayesianNetwork network = DynamicBayesianNetworkGenerator.generateDynamicNaiveBayes(new Random(0), 2, true); DynamicBayesianNetworkSampler sampler = new DynamicBayesianNetworkSampler(network); sampler.setSeed(0); DataStream<DynamicDataInstance> dataStream = sampler.sampleToDataBase(3,2); DataStreamWriter.writeDataToFile(dataStream, "./datasets/simulated/dnb-samples.arff"); System.out.println(watch.stop()); for (DynamicAssignment dynamicdataassignment : sampler.sampleToDataBase(3, 2)){ System.out.println("\n Sequence ID" + dynamicdataassignment.getSequenceID()); System.out.println("\n Time ID" + dynamicdataassignment.getTimeID()); System.out.println(dynamicdataassignment.outputString()); } } }
/** * Returns a {@code Stream} of randomly sampled {@link DynamicAssignment}s. * @param nSequences an {@code int} that represents the number of sequences. * @param sequenceLength an {@code int} that represents the length of each sequence. * @return a {@code Stream} of randomly sampled {@link DynamicAssignment}s. */ private Stream<DynamicAssignment> getSampleStream(int nSequences, int sequenceLength) { LocalRandomGenerator randomGenerator = new LocalRandomGenerator(seed); return IntStream.range(0,nSequences).mapToObj(Integer::new) .flatMap(i -> sample(network, causalOrderTime0, causalOrderTimeT, randomGenerator.current(), i, sequenceLength)); }
public static void generateEvidenceData() throws Exception { DynamicBayesianNetwork network = createDynamicFireDetectorModel(); DynamicBayesianNetworkSampler sampler = new DynamicBayesianNetworkSampler(network); sampler.setSeed(1); sampler.setLatentVar(network.getDynamicVariables().getVariableByName("Temperature")); sampler.setLatentVar(network.getDynamicVariables().getVariableByName("Smoke")); DataStream<DynamicDataInstance> dataStream = sampler.sampleToDataBase(1, 10); DataStreamWriter.writeDataToFile(dataStream, "./datasets/TimeIndexedSensorReadingsEvidence.arff"); }
DynamicBayesianNetworkSampler dynamicSampler = new DynamicBayesianNetworkSampler(extendedDBN); dynamicSampler.setHiddenVar(classVar); DataStream<DynamicDataInstance> dataPredict = dynamicSampler.sampleToDataBase(1,10);
dataPresent.setValue(var, sampledValue); data[0] = replicateOnPast(dataPresent); data[1] = filter(dataPresent); dataPresent.setValue(var, sampledValue); data[0] = replicateOnPast(dataPresent); dataPresent = filter(dataPresent); d = new DynamicDataInstanceImpl(network, replicateOnPast(data[1]), dataPresent, sequenceID, k); data[1] = filter(dataPresent);
/** * Creates a new temporal data stream. * @param sampler1 a {@link DynamicBayesianNetworkSampler} object. * @param nSequences1 an {@code int} that represents the number of sequences in the data stream to be sampled. * @param sequenceLength1 an {@code int} that represents the length of each sequence. */ TemporalDataStream(DynamicBayesianNetworkSampler sampler1, int nSequences1, int sequenceLength1){ this.sampler=sampler1; this.nSequences = nSequences1; this.sequenceLength = sequenceLength1; List<Attribute> list = new ArrayList<>(); list.add(new Attribute(0,Attributes.SEQUENCE_ID_ATT_NAME, new RealStateSpace())); list.add(new Attribute(1,Attributes.TIME_ID_ATT_NAME, new RealStateSpace())); list.addAll(this.sampler.network.getDynamicVariables().getListOfDynamicVariables().stream() .filter(var -> !sampler1.getLatentVars().contains(var)) .map(var -> new Attribute(var.getVarID() + 2, var.getName(), var.getStateSpaceType())).collect(Collectors.toList())); this.atts= new Attributes(list); }
DynamicBayesianNetworkSampler dynamicSampler = new DynamicBayesianNetworkSampler(extendedDBN); dynamicSampler.setHiddenVar(classVar); DataStream<DynamicDataInstance> dataPredict = dynamicSampler.sampleToDataBase(1,10);
public static DataStream<DynamicDataInstance> generate(int seed, int nSquences, int nSamplesPerSequence, int nDiscreteAtts, int nContinuousAttributes){ DynamicBayesianNetworkGenerator.setSeed(seed); DynamicBayesianNetworkGenerator.setNumberOfContinuousVars(nContinuousAttributes); DynamicBayesianNetworkGenerator.setNumberOfDiscreteVars(nDiscreteAtts); DynamicBayesianNetworkGenerator.setNumberOfStates(2); int nTotal = nDiscreteAtts+nContinuousAttributes; int nLinksMin = nTotal-1; int nLinksMax = nTotal*(nTotal-1)/2; DynamicBayesianNetworkGenerator.setNumberOfLinks((int)(0.8*nLinksMin + 0.2*nLinksMax)); DynamicBayesianNetwork dbn = DynamicBayesianNetworkGenerator.generateDynamicBayesianNetwork(); DynamicBayesianNetworkSampler sampler = new DynamicBayesianNetworkSampler(dbn); sampler.setSeed(seed); return sampler.sampleToDataBase(nSquences,nSamplesPerSequence); }
DynamicBayesianNetworkSampler dynamicSampler = new DynamicBayesianNetworkSampler(extendedDBN); dynamicSampler.setHiddenVar(classVar); DataStream<DynamicDataInstance> dataPredict = dynamicSampler.sampleToDataBase(1, 10);
public static void generateData() throws Exception { DynamicBayesianNetwork network = createDynamicFireDetectorModel(); DynamicBayesianNetworkSampler sampler = new DynamicBayesianNetworkSampler(network); sampler.setSeed(1); sampler.setLatentVar(network.getDynamicVariables().getVariableByName("Temperature")); sampler.setLatentVar(network.getDynamicVariables().getVariableByName("Smoke")); DataStream<DynamicDataInstance> dataStream = sampler.sampleToDataBase(100,1000); DataStreamWriter.writeDataToFile(dataStream, "./datasets/TimeIndexedSensorReadings.arff"); dataStream = sampler.sampleToDataBase(1,10); DataStreamWriter.writeDataToFile(dataStream, "./datasets/TimeIndexedSensorReadingsEvidence.arff"); } public static void generateEvidenceData() throws Exception {
public static DataStream<DynamicDataInstance> generate(int seed, int nSamples, int[] nDiscreteStates, int nContinuousAttributes){ DynamicBayesianNetworkGenerator.setSeed(seed); DynamicBayesianNetworkGenerator.setNumberOfContinuousVars(nContinuousAttributes); DynamicBayesianNetworkGenerator.setNumberOfDiscreteVars(nDiscreteStates.length); DynamicBayesianNetworkGenerator.setNumberOfStates(0); int nTotal = nDiscreteStates.length+nContinuousAttributes; int nLinksMin = nTotal-1; int nLinksMax = nTotal*(nTotal-1)/2; DynamicBayesianNetworkGenerator.setNumberOfLinks((int)(0.8*nLinksMin + 0.2*nLinksMax)); DynamicBayesianNetwork dbn = DynamicBayesianNetworkGenerator.generateDynamicBayesianNetwork(nDiscreteStates); DynamicBayesianNetworkSampler sampler = new DynamicBayesianNetworkSampler(dbn); sampler.setSeed(seed); return sampler.sampleToDataBase(nSamples/50,50); }
DynamicBayesianNetworkSampler dynamicSampler = new DynamicBayesianNetworkSampler(dbn); dynamicSampler.setHiddenVar(varH1); if(this.isActivateMiddleLayer()) { dag.getDynamicVariables().getListOfDynamicVariables().stream() .filter(x -> x.getName().contains("H") && x.getVarID()!=varH1.getVarID()) .forEach(v -> dynamicSampler.setHiddenVar(v)); DataStream<DynamicDataInstance> dataPredict = dynamicSampler.sampleToDataBase(this.getNumOfSequences(), this.getSequenceLength());
public static void main(String[] args) throws Exception{ //We first generate a DBN with 3 continuous and 3 discrete variables with 2 states DynamicBayesianNetworkGenerator dbnGenerator = new DynamicBayesianNetworkGenerator(); dbnGenerator.setNumberOfContinuousVars(3); dbnGenerator.setNumberOfDiscreteVars(3); dbnGenerator.setNumberOfStates(2); //Create a NB-like structure with temporal links in the children (leaves) and 2 states for //the class variable DynamicBayesianNetwork network = DynamicBayesianNetworkGenerator.generateDynamicNaiveBayes( new Random(0), 2, true); //Create the sampler from this network DynamicBayesianNetworkSampler sampler = new DynamicBayesianNetworkSampler(network); sampler.setSeed(0); //Sample a dataStream of 3 sequences of 1000 samples each DataStream<DynamicDataInstance> dataStream = sampler.sampleToDataBase(3,1000); //Save the created data sample in a file DataStreamWriter.writeDataToFile(dataStream, "./datasets/simulated/dnb-samples.arff"); } }
/** * Generate a DataStream with the given number of samples and attributes (discrete and continuous). * @param seed, the seed of the random number generator. * @param nSamples, the number of samples of the data stream. * @param nDiscreteAtts, the number of discrete attributes. * @param nContinuousAttributes, the number of continuous attributes. * @return A valid {@code DataStream} object. */ public static DataStream<DynamicDataInstance> generate(int seed, int nSamples, int nDiscreteAtts, int nContinuousAttributes){ DynamicBayesianNetworkGenerator.setSeed(seed); DynamicBayesianNetworkGenerator.setNumberOfContinuousVars(nContinuousAttributes); DynamicBayesianNetworkGenerator.setNumberOfDiscreteVars(nDiscreteAtts); DynamicBayesianNetworkGenerator.setNumberOfStates(2); int nTotal = nDiscreteAtts+nContinuousAttributes; int nLinksMin = nTotal-1; int nLinksMax = nTotal*(nTotal-1)/2; DynamicBayesianNetworkGenerator.setNumberOfLinks((int)(0.8*nLinksMin + 0.2*nLinksMax)); DynamicBayesianNetwork dbn = DynamicBayesianNetworkGenerator.generateDynamicBayesianNetwork(); DynamicBayesianNetworkSampler sampler = new DynamicBayesianNetworkSampler(dbn); sampler.setSeed(seed); return sampler.sampleToDataBase(nSamples/50,50); }
public static void main(String[] args) throws IOException { Random random = new Random(1); //We first generate a dynamic Bayesian network (NB structure with class and attributes temporally linked) DynamicBayesianNetworkGenerator.setNumberOfContinuousVars(2); DynamicBayesianNetworkGenerator.setNumberOfDiscreteVars(5); DynamicBayesianNetworkGenerator.setNumberOfStates(3); DynamicBayesianNetwork dbnRandom = DynamicBayesianNetworkGenerator.generateDynamicNaiveBayes(random,2,true); //Sample dynamic data from the created dbn with random parameters DynamicBayesianNetworkSampler sampler = new DynamicBayesianNetworkSampler(dbnRandom); sampler.setSeed(0); //Sample 3 sequences of 100K instances DataStream<DynamicDataInstance> data = sampler.sampleToDataBase(3,10000); /*Parameter Learning with ML*/ //We fix the DAG structure, the data and learn the DBN ParameterLearningAlgorithm parallelMaximumLikelihood = new ParallelMaximumLikelihood(); parallelMaximumLikelihood.setWindowsSize(1000); parallelMaximumLikelihood.setDynamicDAG(dbnRandom.getDynamicDAG()); parallelMaximumLikelihood.initLearning(); parallelMaximumLikelihood.updateModel(data); DynamicBayesianNetwork dbnLearnt = parallelMaximumLikelihood.getLearntDBN(); //We print the model System.out.println(dbnLearnt.toString()); }
DynamicBayesianNetworkSampler sampler = new DynamicBayesianNetworkSampler(dbnRandom); sampler.setSeed(0); DataStream<DynamicDataInstance> data = sampler.sampleToDataBase(3,10000);