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; }
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; }
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; }
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();
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();