@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[] 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; }
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; }