/** * Computes the log probability for a given DynamicDataInstance. * @param dataInstance a {@link DynamicDataInstance} object. * @return a {@code double} that represents the log probability value. * TODO: the logbasemeasure and the lognormalizer are positives or negatives terms (Andres) */ public double computeLogProbabilityOf(DynamicDataInstance dataInstance){ return this.naturalParameters.dotProduct(this.getSufficientStatistics(dataInstance)) + this.computeLogBaseMeasure(dataInstance) - this.computeLogNormalizer(); }
public double[][] getLambdaNaturalParameters(){ double[][] out = new double[this.ef_TExpQ.length][maxsize]; for (int i = 0; i < out.length; i++) { for (int j = 0; j < out[i].length; j++) { out[i][j] = this.ef_TExpQ[i][j].getNaturalParameters().get(0); } } return out; }
@Override public double getPosteriorSampleSize() { double sum = 0; for (Variable variable : this.nonReplicatedVariablesList) { sum+=this.ef_learningmodel.getDistribution(variable).getNaturalParameters().sum(); } return sum; } }
public static double[] computeLocalKLDirichletBinary(EF_Dirichlet dirichletQ, EF_Dirichlet dirichletP) { double[] localKL = new double[dirichletP.sizeOfSufficientStatistics()]; int nstates = localKL.length; double sumCountsQ = dirichletQ.getNaturalParameters().sum(); double sumCountsP = dirichletP.getNaturalParameters().sum(); ParameterVariables parameterVariables = new ParameterVariables(0); Variable binary = parameterVariables.newDirichletParameter("Local",2); EF_Dirichlet localQ = new EF_Dirichlet(binary); EF_Dirichlet localP = new EF_Dirichlet(binary); for (int i = 0; i < localKL.length; i++) { double alphaQ = dirichletQ.getNaturalParameters().get(i); double alphaP = dirichletP.getNaturalParameters().get(i); localQ.getNaturalParameters().set(0,alphaQ); localQ.getNaturalParameters().set(1,sumCountsQ-alphaQ); localQ.fixNumericalInstability(); localQ.updateMomentFromNaturalParameters(); localP.getNaturalParameters().set(0,alphaP); localP.getNaturalParameters().set(1,sumCountsP-alphaP); localP.fixNumericalInstability(); localP.updateMomentFromNaturalParameters(); localKL[i] = localQ.kl(localP.getNaturalParameters(),localP.computeLogNormalizer()); } return localKL; }
int size = q.getNaturalParameters().size(); int nstates = 0; for (int i = 0; i < size; i++) { double nqi = q.getNaturalParameters().get(i); double npi = p.getNaturalParameters().get(i); if (npi > (LIMIT+0.01) || nqi > (LIMIT+0.01)) { nstates++; double nqi = q.getNaturalParameters().get(i); double npi = p.getNaturalParameters().get(i); localQ.getNaturalParameters().set(count,nqi); localP.getNaturalParameters().set(count,npi); count++;
this.ef_TExpP.getNaturalParameters().set(0,delta); this.ef_TExpP.updateMomentFromNaturalParameters(); ef_TExpQ[i].getNaturalParameters().set(0, - kl_q_pt_1[i] + kl_q_p0[i] + this.ef_TExpP.getNaturalParameters().get(0)); ef_TExpQ[i].fixNumericalInstability(); ef_TExpQ[i].updateMomentFromNaturalParameters();
public static double[] computeLocalKLDirichlet(EF_Dirichlet dirichletQ, EF_Dirichlet dirichletP) { double[] localKL = new double[dirichletP.sizeOfSufficientStatistics()]; int nstates = localKL.length; double sumCountsQ = dirichletQ.getNaturalParameters().sum(); double sumCountsP = dirichletP.getNaturalParameters().sum(); for (int i = 0; i < localKL.length; i++) { double alphaQ = dirichletQ.getNaturalParameters().get(i); double alphaP = dirichletP.getNaturalParameters().get(i); double kl = alphaQ - alphaP; kl*=dirichletQ.getMomentParameters().get(i); kl-=(Gamma.logGamma(alphaQ) - Gamma.logGamma(sumCountsQ)/nstates); kl+=(Gamma.logGamma(alphaP) - Gamma.logGamma(sumCountsP)/nstates); localKL[i] = kl; } return localKL; }
this.ef_TExpP.getNaturalParameters().set(0,delta); this.ef_TExpP.updateMomentFromNaturalParameters(); ef_TExpQ[i][j].getNaturalParameters().set(0, - kl_q_pt_1[i][j] + kl_q_p0[i][j] + this.ef_TExpP.getNaturalParameters().get(0)); ef_TExpQ[i][j].fixNumericalInstability(); ef_TExpQ[i][j].updateMomentFromNaturalParameters();
public double[] getLambdaNaturalParameters(){ double[] out = new double[this.prior.getNumberOfBaseVectors()]; for (int i = 0; i < out.length; i++) { out[i] = this.ef_TExpQ[i].getNaturalParameters().get(0); } return out; }