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); }
/** * Sets the model for this DynamicMAPInference. * @param model a {@link DynamicBayesianNetwork} object. */ public void setModel(DynamicBayesianNetwork model) { this.model = model; this.unfoldedStaticModel = DynamicToStaticBNConverter.convertDBNtoBN(model,nTimeSteps); }
/** * Returns a {@code DataStream} 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 DataStream} of randomly sampled {@link DynamicAssignment}s. */ public DataStream<DynamicDataInstance> sampleToDataBase(int nSequences, int sequenceLength){ random = new Random(seed); return new TemporalDataStream(this,nSequences,sequenceLength); }
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"); } }
public static void main(String[] args) { DynamicBayesianNetworkGenerator.setNumberOfContinuousVars(0); DynamicBayesianNetworkGenerator.setNumberOfDiscreteVars(5); DynamicBayesianNetworkGenerator.setNumberOfStates(2); DynamicBayesianNetworkGenerator.setNumberOfLinks(5); DynamicBayesianNetwork dynamicNaiveBayes = DynamicBayesianNetworkGenerator.generateDynamicNaiveBayes(new Random(0), 2, true); System.out.println("ORIGINAL DYNAMIC DAG:"); System.out.println(dynamicNaiveBayes.getDynamicDAG().toString()); //System.out.println(dynamicNaiveBayes.toString()); System.out.println(); //dynamicNaiveBayes.getDynamicVariables().getListOfDynamicVariables().forEach(var -> System.out.println(var.getName())); //dynamicNaiveBayes.getDynamicVariables().getListOfDynamicVariables().forEach(var -> System.out.println(var.getName())); BayesianNetwork bn = DynamicToStaticBNConverter.convertDBNtoBN(dynamicNaiveBayes,4); System.out.println("NEW STATIC DAG:"); System.out.println(); System.out.println(bn.getDAG().toString()); System.out.println(); System.out.println("ORIGINAL DYNAMIC BN:"); System.out.println(dynamicNaiveBayes.toString()); System.out.println("STATIC BN:"); System.out.println(bn.toString()); } }
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 void main(String[] args) throws Exception{ int nOfDisc; int nOfCont; DataStream<DynamicDataInstance> dataGaussians = null; String path = "datasets/simulated/"; nOfCont = 3; nOfDisc = 2; dataGaussians = DataSetGenerator.generate(1,1000,nOfDisc,nOfCont); DataStreamWriter.writeDataToFile(dataGaussians, path+"exampleDS_d"+nOfDisc+"_c"+nOfCont+".arff"); nOfCont = 5; nOfDisc = 0; dataGaussians = DataSetGenerator.generate(1,10000,nOfDisc,nOfCont); DataStreamWriter.writeDataToFile(dataGaussians, path+"exampleDS_d"+nOfDisc+"_c"+nOfCont+".arff"); dataGaussians = DataSetGenerator.generate(1,50,nOfDisc,nOfCont); DataStreamWriter.writeDataToFile(dataGaussians, path+"exampleDS_d"+nOfDisc+"_c"+nOfCont+"_small.arff"); nOfCont = 0; nOfDisc = 5; dataGaussians = DataSetGenerator.generate(1,1000,nOfDisc,nOfCont); DataStreamWriter.writeDataToFile(dataGaussians, path+"exampleDS_d"+nOfDisc+"_c"+nOfCont+".arff"); }
/** * Creates a new DynamicBayesianNetworkSampler given an input {@link DynamicBayesianNetwork} object. * @param network1 an input {@link DynamicBayesianNetwork} object. */ public DynamicBayesianNetworkSampler(DynamicBayesianNetwork network1){ network=network1; this.causalOrderTime0 = eu.amidst.dynamic.utils.Utils.getCausalOrderTime0(network.getDynamicDAG()); this.causalOrderTimeT = eu.amidst.dynamic.utils.Utils.getCausalOrderTimeT(network.getDynamicDAG()); }
/** * Generates a Dynamic Naive Bayes model with randomly initialized distributions. * @param random an object of type {@link java.util.Random}. * @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 DynamicBayesianNetwork} object. */ public static DynamicBayesianNetwork generateDynamicNaiveBayes(Random random, int numberClassStates, boolean connectChildrenTemporally){ DynamicBayesianNetwork network = new DynamicBayesianNetwork( DynamicBayesianNetworkGenerator.generateDynamicNaiveBayesDAG(numberClassStates, connectChildrenTemporally)); network.randomInitialization(random); return network; }
/** * 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)); }
/** * {@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); } }
/** * {@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)); } }
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); }
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()); } } }
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"); }
public static void main(String[] args) { DataStream<DynamicDataInstance> dataHybrid= DataSetGenerator.generate(1,1000,3,10); DataStream<DynamicDataInstance> dataGaussians = DataSetGenerator.generate(1,1000,0,10); //DataStream<DynamicDataInstance> data = DynamicDataStreamLoader // .loadFromFile("datasets/syntheticDataVerdandeScenario3.arff"); System.out.println("------------------Factorial HMM (diagonal matrix) from streaming------------------"); FactorialHMM factorialHMM = new FactorialHMM(dataHybrid.getAttributes()); System.out.println(factorialHMM.getDynamicDAG()); factorialHMM.updateModel(dataHybrid); System.out.println(factorialHMM.getModel()); System.out.println("------------------Factorial HMM (full cov. matrix) from streaming------------------"); factorialHMM = new FactorialHMM(dataGaussians.getAttributes()); factorialHMM.setDiagonal(false); System.out.println(factorialHMM.getDynamicDAG()); factorialHMM.updateModel(dataGaussians); System.out.println(factorialHMM.getModel()); System.out.println("------------------Factorial HMM (diagonal matrix) from batches------------------"); factorialHMM = new FactorialHMM(dataHybrid.getAttributes()); System.out.println(factorialHMM.getDynamicDAG()); for (DataOnMemory<DynamicDataInstance> batch : dataHybrid.iterableOverBatches(100)) { factorialHMM.updateModel(batch); } System.out.println(factorialHMM.getModel()); }
/** * 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()); }
public static void main(String[] args) { DataStream<DynamicDataInstance> dataGaussians = DataSetGenerator.generate(1,1000,0,10); DataStream<DynamicDataInstance> dataHybrid = DataSetGenerator.generate(1,1000,2,10); //DataStream<DynamicDataInstance> data = DynamicDataStreamLoader // .loadFromFile("datasets/syntheticDataVerdandeScenario3.arff"); System.out.println("------------------HMM (diagonal matrix) from streaming------------------"); HiddenMarkovModel HMM = new HiddenMarkovModel(dataHybrid.getAttributes()); System.out.println(HMM.getDynamicDAG()); HMM.updateModel(dataHybrid); System.out.println(HMM.getModel()); System.out.println("------------------HMM (full cov. matrix) from streaming------------------"); HMM = new HiddenMarkovModel(dataGaussians.getAttributes()); HMM.setDiagonal(false); System.out.println(HMM.getDynamicDAG()); HMM.updateModel(dataGaussians); System.out.println(HMM.getModel()); System.out.println("------------------HMM (diagonal matrix) from batches------------------"); HMM = new HiddenMarkovModel(dataHybrid.getAttributes()); System.out.println(HMM.getDynamicDAG()); for (DataOnMemory<DynamicDataInstance> batch : dataHybrid.iterableOverBatches(100)) { HMM.updateModel(batch); } System.out.println(HMM.getModel()); }
public static void main(String[] args) { DataStream<DynamicDataInstance> dataGaussians = DataSetGenerator.generate(1,1000,0,10); //DataStream<DynamicDataInstance> data = DynamicDataStreamLoader // .loadFromFile("datasets/syntheticDataVerdandeScenario3.arff"); System.out.println("------------------SKF (diagonal matrix) from streaming------------------"); SwitchingKalmanFilter SKF = new SwitchingKalmanFilter(dataGaussians.getAttributes()); System.out.println(SKF.getDynamicDAG()); SKF.updateModel(dataGaussians); System.out.println(SKF.getModel()); System.out.println("------------------SKF (full cov. matrix) from streaming------------------"); SKF = new SwitchingKalmanFilter(dataGaussians.getAttributes()); SKF.setDiagonal(false); System.out.println(SKF.getDynamicDAG()); SKF.updateModel(dataGaussians); System.out.println(SKF.getModel()); System.out.println("------------------SKF (diagonal matrix) from batches------------------"); SKF = new SwitchingKalmanFilter(dataGaussians.getAttributes()); System.out.println(SKF.getDynamicDAG()); for (DataOnMemory<DynamicDataInstance> batch : dataGaussians.iterableOverBatches(100)) { SKF.updateModel(batch); } System.out.println(SKF.getModel()); } }