List of usage examples for weka.core Statistics lnGamma
public static double lnGamma(double x)
From source file:es.jarias.FMC.BDeu.java
License:Open Source License
protected double localBdeuScore(int X, Integer[] parents) { int numParents = parents.length; // Hyper-Parameters double ess = 10; double kappa = 1 / (ess + 1); // Count number of values for each parent int cardinality = 1; for (int i : parents) { cardinality *= m_numValues[i];/* www . j ava 2 s .co m*/ } int[][] Ni_jk = new int[cardinality][m_numValues[X]]; double Np_ijk = (1.0 * ess) / (m_numValues[X] * cardinality); double Np_ij = (1.0 * ess) / cardinality; // initialize for (int j = 0; j < cardinality; j++) for (int k = 0; k < m_numValues[X]; k++) Ni_jk[j][k] = 0; for (int i = 0; i < m_numCases; i++) { int iCPT = 0; for (int iParent = 0; iParent < numParents; iParent++) { iCPT = (int) (iCPT * m_numValues[iParent] + dataset.instance(i).value(parents[iParent])); } Ni_jk[iCPT][(int) dataset.instance(i).value(X)]++; } double fLogScore = 0.0; for (int iParent = 0; iParent < cardinality; iParent++) { double N_ij = 0; double N_ijk = 0; for (int iSymbol = 0; iSymbol < m_numValues[X]; iSymbol++) { if (Ni_jk[iParent][iSymbol] != 0) { N_ijk = Ni_jk[iParent][iSymbol]; fLogScore += Statistics.lnGamma(N_ijk + Np_ijk); fLogScore -= Statistics.lnGamma(Np_ijk); N_ij += N_ijk; } } if (Np_ij != 0) fLogScore += Statistics.lnGamma(Np_ij); if (Np_ij + N_ij != 0) fLogScore -= Statistics.lnGamma(Np_ij + N_ij); } fLogScore += Math.log(kappa) * cardinality * (m_numValues[X] - 1); return fLogScore; }