double[] values = posteriorProb.getProbabilities(); if (values[0]>values[1]) { predValue = 0;
distA_Time0.setProbabilities(new double[]{0.3, 0.7}); distB_Time0.getMultinomial(0).setProbabilities(new double[]{0.4, 0.1, 0.5}); distB_Time0.getMultinomial(1).setProbabilities(new double[]{0.2, 0.5, 0.3}); distC_Time0.getMultinomial(0).setProbabilities(new double[]{0.4, 0.6}); distC_Time0.getMultinomial(1).setProbabilities(new double[]{0.2, 0.8}); distD_Time0.getMultinomial(0).setProbabilities(new double[]{0.7, 0.3}); distD_Time0.getMultinomial(1).setProbabilities(new double[]{0.1, 0.9}); distE_Time0.getMultinomial(0).setProbabilities(new double[]{0.8, 0.2}); distE_Time0.getMultinomial(1).setProbabilities(new double[]{0.1, 0.9}); distG_Time0.getMultinomial(0).setProbabilities(new double[]{0.6, 0.4}); distG_Time0.getMultinomial(1).setProbabilities(new double[]{0.7, 0.3}); distA_TimeT.getMultinomial(0).setProbabilities(new double[]{0.15, 0.85}); distA_TimeT.getMultinomial(1).setProbabilities(new double[]{0.1, 0.9}); distB_TimeT.getMultinomial(0).setProbabilities(new double[]{0.1, 0.2, 0.7}); distB_TimeT.getMultinomial(1).setProbabilities(new double[]{0.6, 0.1, 0.3}); distB_TimeT.getMultinomial(2).setProbabilities(new double[]{0.3, 0.4, 0.3}); distB_TimeT.getMultinomial(3).setProbabilities(new double[]{0.2, 0.1, 0.7}); distB_TimeT.getMultinomial(4).setProbabilities(new double[]{0.5, 0.1, 0.4}); distB_TimeT.getMultinomial(5).setProbabilities(new double[]{0.1, 0.1, 0.8}); distC_TimeT.getMultinomial(0).setProbabilities(new double[]{0.4, 0.6}); distC_TimeT.getMultinomial(1).setProbabilities(new double[]{0.2, 0.8});
multinomial = new Multinomial(staticVar); multinomial.setProbabilities(probs1); multinomial_multinomialParents.setMultinomial(s, multinomial);
/** * Sets the distribution of a multinomial variable in the Hugin model from the corresponding distribution in the * AMIDST model. * @param dist the AMIDST distribution to be converted. * @throws ExceptionHugin */ private void setMultinomial(Multinomial dist) throws ExceptionHugin { Variable amidstVar = dist.getVariable(); Node huginVar = this.huginBN.getNodeByName(amidstVar.getName()); int nStates = amidstVar.getNumberOfStates(); double[] finalArray = new double[nStates]; double[] sourceArray = dist.getProbabilities(); System.arraycopy(sourceArray, 0, finalArray, 0, nStates); huginVar.getTable().setData(finalArray); }
@Override public Multinomial predict(DataInstance instance) { if (!Utils.isMissingValue(instance.getValue(classVar))) System.out.println("Class Variable can not be set."); inferenceAlgoPredict.setModel(this.getModel()); this.inferenceAlgoPredict.setEvidence(instance); System.out.println(instance); this.inferenceAlgoPredict.runInference(); List<Multinomial> posteriors = new ArrayList<>(); for (Variable classVariable : classVariables) { posteriors.add(this.inferenceAlgoPredict.getPosterior(classVariable)); } double[] vectorPosteriors = new double[classVar.getNumberOfStates()]; for (Multinomial posterior : posteriors) { for (int i = 0; i < classVar.getNumberOfStates(); i++) { vectorPosteriors[i] += posterior.getParameters()[i]; } } posteriors.get(0).setProbabilities(Utils.normalize(vectorPosteriors)); return posteriors.get(0); }
/** * {@inheritDoc} */ @Override public <E extends UnivariateDistribution> E getPosterior(Variable var) { try { Node huginNode = huginBN.getNodeByName(var.getName()); if (var.isMultinomial()) { Multinomial dist = new Multinomial(var); for(int i=0;i<var.getNumberOfStates();i++){ dist.setProbabilityOfState(i, ((DiscreteNode) huginNode).getBelief(i)); } return (E)dist; } else if (var.isNormal()) { Normal dist = new Normal(var); dist.setMean(((ContinuousChanceNode)huginNode).getMean()); dist.setVariance(((ContinuousChanceNode) huginNode).getVariance()); return (E)dist; } else { throw new IllegalArgumentException("Variable type not allowed."); } } catch (ExceptionHugin exceptionHugin) { exceptionHugin.printStackTrace(); } return null; }
/** * Predicts the class membership probabilities for a given instance. * @param instance the data instance to be classified. * @return an array of doubles containing the estimated membership probabilities of the data instance for each class label. */ public double[] predict(DataInstance instance) { if (learnedBN==null) throw new IllegalArgumentException("The model has not been learned"); if (!Utils.isMissingValue(instance.getValue(targetVar))) System.out.println("Class Variable can not be set."); this.inference.setEvidence(instance); this.inference.runInference(); Multinomial dist = this.inference.getPosterior(targetVar); return dist.getParameters(); }
Multinomial multinomial1 = (Multinomial) multinomial_multinomialParents.getMultinomial(dynamicParentsConfiguration); multinomial1.setVar(staticVariable); multinomial1.setConditioningVariables(multinomialParents);
System.out.println("Probability of Fire: " + multinomial.getProbabilityOfState(1));
/** * Sets the distribution of a multinomial variable with no parents in the AMIDST model * from the corresponding distribution in the Hugin model. * @param huginVar the Hugin variable with the distribution to be converted. * @throws ExceptionHugin */ private void setMultinomial(Node huginVar) throws ExceptionHugin { int indexNode = this.huginBN.getNodes().indexOf(huginVar); Variable amidstVar = this.amidstBN.getVariables().getVariableById(indexNode); int numStates = amidstVar.getNumberOfStates(); double[] huginProbabilities = huginVar.getTable().getData(); double[] amidstProbabilities = new double[numStates]; for (int k = 0; k < numStates; k++) { amidstProbabilities[k] = huginProbabilities[k]; } Multinomial dist = this.amidstBN.getConditionalDistribution(amidstVar); dist.setProbabilities(amidstProbabilities); }
double[] values = posteriorProb.getProbabilities(); if (values[0]>values[1]) { predValue = 0;
int nMergedStates = staticVar.getNumberOfStates(); Multinomial multinomial = new Multinomial(staticVar); multinomial.setProbabilities(probs); return multinomial;
fireprob.setProbabilities(new double[]{0.999, 0.001}); smokeProb.getMultinomial(1).setProbabilities(new double[]{0.001, 0.999}); fireprobTimeT.getMultinomial(0).setProbabilities(new double[]{0.999, 0.001}); fireprobTimeT.getMultinomial(1).setProbabilities(new double[]{0.01, 0.99}); smokeProbTimeT.getMultinomial(1).setProbabilities(new double[]{0.001, 0.999}); smokeProbTimeT.getMultinomial(3).setProbabilities(new double[]{0.001, 0.999});
double[] values = posteriorProb.getProbabilities(); if (values[0]>values[1]) { predValue = 0;
/** * {@inheritDoc} */ @Override public <E extends UnivariateDistribution> E getPredictivePosterior(Variable var, int nTimesAhead) { UnivariateDistribution posteriorDistribution = null; try { LabelledDCNode node = (LabelledDCNode) domainObject.getNodeByName("T"+this.timeWindow+"." + var.getName()); this.domainObject.computeDBNPredictions(nTimesAhead); posteriorDistribution = var.newUnivariateDistribution(); double[] probabilities = new double[(int) node.getNumberOfStates()]; for (int i = 0; i < node.getNumberOfStates(); i++) { probabilities[i] = node.getPredictedBelief(i,nTimesAhead-1); } ((Multinomial) posteriorDistribution).setProbabilities(probabilities); } catch (ExceptionHugin exceptionHugin) { exceptionHugin.printStackTrace(); } return (E)posteriorDistribution; }
/** * Sets the distribution of a multinomial variable with multinomial parents in the Hugin model from the * corresponding distribution in the AMIDST model. * * @param dist the AMIDST distribution to be converted. * @throws ExceptionHugin */ private void setMultinomial_MultinomialParents(Multinomial_MultinomialParents dist) throws ExceptionHugin { Variable amidstVar = dist.getVariable(); Node huginVar = this.huginBN.getNodeByName(amidstVar.getName()); List<Multinomial> probabilities = dist.getMultinomialDistributions(); List<Variable> conditioningVariables = dist.getConditioningVariables(); int numParentAssignments = MultinomialIndex.getNumberOfPossibleAssignments(conditioningVariables); int nStates = amidstVar.getNumberOfStates(); int sizeArray = numParentAssignments * nStates; double[] finalArray = new double[sizeArray]; for(int i=0;i<numParentAssignments;i++){ double[] sourceArray = probabilities.get(i).getProbabilities(); System.arraycopy(sourceArray, 0, finalArray, i*nStates, nStates); } huginVar.getTable().setData(finalArray); }
/** * {@inheritDoc} */ @Override public <E extends UnivariateDistribution> E getFilteredPosterior(Variable var) { UnivariateDistribution posteriorDistribution = null; String targetVariableName = (this.timeID==0)? "T0." : "T"+this.timeWindow+"."; try { LabelledDCNode node = (LabelledDCNode) domainObject.getNodeByName(targetVariableName + var.getName()); posteriorDistribution = var.newUnivariateDistribution(); double[] probabilities = new double[(int) node.getNumberOfStates()]; for (int i = 0; i < node.getNumberOfStates(); i++) { probabilities[i] = node.getBelief(i); } ((Multinomial) posteriorDistribution).setProbabilities(probabilities); domainObject.moveDBNWindow(1); } catch (ExceptionHugin exceptionHugin) { exceptionHugin.printStackTrace(); } return ((E) posteriorDistribution); }
@Override public double[] distributionForInstance(Instance instance) throws Exception { if(bnModel_ == null) { throw new UnsupportedOperationException("The model was not learnt"); //return new double[0]; } DataInstance dataInstance = new DataInstanceFromDataRow(new DataRowWeka(instance, this.attributes_)); double realValue = dataInstance.getValue(clusterVar_); dataInstance.setValue(clusterVar_, eu.amidst.core.utils.Utils.missingValue()); this.inferenceAlgorithm_.setEvidence(dataInstance); this.inferenceAlgorithm_.runInference(); Multinomial multinomial = this.inferenceAlgorithm_.getPosterior(clusterVar_); dataInstance.setValue(clusterVar_, realValue); return multinomial.getProbabilities(); }
amidstProbabilities[k] = huginProbabilitiesTimeT[k]; dist_TimeT.setProbabilities(amidstProbabilities); }else { Multinomial_MultinomialParents dist_TimeT = amidstDBN.getConditionalDistributionTimeT(amidstVar); amidstProbabilities[k] = huginProbabilitiesTimeT[i * numStates + k]; dist_TimeT.getMultinomial(i).setProbabilities(amidstProbabilities); amidstProbabilities[k] = huginProbabilitiesTime0[k]; dist_Time0.setProbabilities(amidstProbabilities); } else { Multinomial_MultinomialParents dist_Time0 = amidstDBN.getConditionalDistributionTime0(amidstVar); amidstProbabilities[k] = huginProbabilitiesTime0[i * numStates + k]; dist_Time0.getMultinomial(i).setProbabilities(amidstProbabilities);
/** * Calculates the class membership probabilities for the given test instance. * * @param instance the instance to be classified * @return predicted class probability distribution * @exception Exception if there is a problem generating the prediction */ @Override public double[] distributionForInstance(Instance instance) throws Exception { if(bnModel_ == null) { throw new UnsupportedOperationException("The model was not learnt"); //return new double[0]; } DataInstance dataInstance = new DataInstanceFromDataRow(new DataRowWeka(instance, this.attributes_)); double realValue = dataInstance.getValue(classVar_); dataInstance.setValue(classVar_, eu.amidst.core.utils.Utils.missingValue()); this.inferenceAlgorithm_.setEvidence(dataInstance); this.inferenceAlgorithm_.runInference(); Multinomial multinomial = this.inferenceAlgorithm_.getPosterior(classVar_); dataInstance.setValue(classVar_, realValue); return multinomial.getProbabilities(); }