Example usage for org.apache.commons.math3.distribution MultivariateNormalDistribution MultivariateNormalDistribution

List of usage examples for org.apache.commons.math3.distribution MultivariateNormalDistribution MultivariateNormalDistribution

Introduction

In this page you can find the example usage for org.apache.commons.math3.distribution MultivariateNormalDistribution MultivariateNormalDistribution.

Prototype

public MultivariateNormalDistribution(final double[] means, final double[][] covariances)
        throws SingularMatrixException, DimensionMismatchException, NonPositiveDefiniteMatrixException 

Source Link

Document

Creates a multivariate normal distribution with the given mean vector and covariance matrix.

Usage

From source file:es.csic.iiia.planes.util.InverseWishartDistributionTest.java

private double testGaussian(double scale) {
    double[] means = new double[] { 0, 0 };
    double[][] covariances = new double[][] { { scale, 0 }, { 0, scale } };
    MultivariateNormalDistribution uniform = new MultivariateNormalDistribution(means, covariances);
    DescriptiveStatistics stats = new DescriptiveStatistics(NORMAL_SAMPLES);
    for (int i = 0; i < NORMAL_SAMPLES; i++) {
        double[] xy = uniform.sample();
        final double x = xy[0];
        final double y = xy[1];
        stats.addValue(Math.sqrt(x * x + y * y));
    }/*w  w w. ja va  2  s.c  om*/

    return stats.getPercentile(90);
}

From source file:es.csic.iiia.planes.util.InverseWishartDistributionTest.java

private double computeRadius(InverseWishartDistribution instance) {
    double[] means = new double[] { 0, 0 };
    MultivariateNormalDistribution uniform = null;

    while (uniform == null) {
        try {//from   www . j  a  v a2 s. c  o m
            double[][] covariances = instance.sample().getData();
            uniform = new MultivariateNormalDistribution(means, covariances);
        } catch (MathUnsupportedOperationException ex) {
        }
    }

    DescriptiveStatistics stats = new DescriptiveStatistics(NORMAL_SAMPLES);
    for (int i = 0; i < NORMAL_SAMPLES; i++) {
        double[] xy = uniform.sample();
        final double x = xy[0];
        final double y = xy[1];
        stats.addValue(Math.sqrt(x * x + y * y));
    }

    return stats.getPercentile(90);
}

From source file:common.matrix.GaussianProbaTest.java

@Test
public void MultinomialTest() {
    final Graph graph = new GraphBuilder().withPlugin(new MLXPlugin()).withScheduler(new NoopScheduler())
            .build();//from www. ja v a2 s.  c o  m
    graph.connect(new Callback<Boolean>() {
        @Override
        public void on(Boolean result) {

            GaussianMixtureNode gaussianNodeLive = (GaussianMixtureNode) graph.newTypedNode(0, 0,
                    GaussianMixtureNode.NAME);

            gaussianNodeLive.set(GaussianMixtureNode.FROM, "f1;f2");

            int test = 100;
            int feat = 2;

            double[][] b = new double[test][feat];
            double[] v = new double[feat];
            Random random = new Random();

            for (int i = 0; i < test; i++) {
                for (int j = 0; j < feat; j++) {
                    v[j] = random.nextDouble() * (1 + 100 * j);
                    b[i][j] = v[j];
                }
                gaussianNodeLive.set("f1", b[i][0]);
                gaussianNodeLive.set("f2", b[i][1]);

                gaussianNodeLive.learn(new Callback<Boolean>() {
                    @Override
                    public void on(Boolean result) {

                    }
                });
            }

            double[] ravg = gaussianNodeLive.getAvg();
            Matrix rcovData = gaussianNodeLive.getCovariance(ravg, null);

            double[][] temp = new double[rcovData.rows()][];
            for (int i = 0; i < rcovData.rows(); i++) {
                temp[i] = new double[rcovData.columns()];
                for (int j = 0; j < rcovData.columns(); j++) {
                    temp[i][j] = rcovData.get(i, j);
                }
            }

            //Test probability calculation.
            MultivariateNormalDistribution apache = new MultivariateNormalDistribution(ravg, temp);

            double eps = 1e-8;
            double d = apache.density(v);
            //System.out.println("apache: " + d);

            double y = gaussianNodeLive.getProbability(v, null, false);
            //System.out.println("live: " + y);

            Assert.assertTrue(Math.abs(d - y) < eps);

        }
    });
}

From source file:es.csic.iiia.planes.generator.HotspotFactory.java

@Override
public MultivariateNormalDistribution buildDistribution(Configuration config, Random r) {
    final double w = config.getWidth();
    final double h = config.getHeight();
    double maxd = interpolator.value(config.getHotspotRadius(), config.getHotspotFreedomDegrees());
    double factor = 1 / maxd;

    if (covDistribution == null) {
        RealMatrix m = new Array2DRowRealMatrix(new double[][] { { factor, 0 }, { 0, factor } });
        covDistribution = new InverseWishartDistribution(m, config.getHotspotFreedomDegrees());
        covDistribution.reseedRandomGenerator(r.nextLong());
    }/*from  ww  w .  j  ava 2  s  .  c o m*/

    double[] means = new double[] { r.nextInt(config.getWidth()), r.nextInt(config.getHeight()), };
    double[][] covariance = getCovarianceMatrix();
    MultivariateNormalDistribution distribution = new MultivariateNormalDistribution(means, covariance);
    distribution.reseedRandomGenerator(r.nextLong());
    return distribution;
}

From source file:edu.oregonstate.eecs.mcplan.ml.GaussianMixtureModel.java

private void makeMixture() {
    for (int i = 0; i < k_; ++i) {
        //         System.out.println( "makeMixture(): component " + i );
        try {//ww w .j ava2  s .co  m
            p_[i] = new MultivariateNormalDistribution(mu_[i].toArray(), Sigma_[i].getData());
        } catch (final SingularMatrixException ex) {
            //            System.out.println( "Fixing Sigma " + i + "(Singular)" );
            fixSigma(i);
            --i;
        } catch (final NonPositiveDefiniteMatrixException ex) {
            //            System.out.println( "Fixing Sigma " + i + "(Non-positive definite)" );
            fixSigma(i);
            --i;
        }
    }
}

From source file:com.datumbox.framework.core.statistics.distributions.ContinuousDistributions.java

/**
 * Samples from Multinomial Normal Distribution.
 * /* ww  w.  jav a  2 s  . co m*/
 * @param mean
 * @param covariance
 * @return              A multinomialGaussianSample from the Multinomial Normal Distribution
 */
public static double[] multinomialGaussianSample(double[] mean, double[][] covariance) {
    MultivariateNormalDistribution gaussian = new MultivariateNormalDistribution(mean, covariance);
    gaussian.reseedRandomGenerator(RandomGenerator.getThreadLocalRandom().nextLong());
    return gaussian.sample();
}

From source file:com.datumbox.framework.statistics.distributions.ContinuousDistributions.java

/**
 * Samples from Multinomial Normal Distribution.
 * /*ww w . j  av  a 2  s .co m*/
 * @param mean
 * @param covariance
 * @return              A multinomialGaussianSample from the Multinomial Normal Distribution
 */
public static double[] multinomialGaussianSample(double[] mean, double[][] covariance) {
    MultivariateNormalDistribution gaussian = new MultivariateNormalDistribution(mean, covariance);
    gaussian.reseedRandomGenerator(RandomValue.randomGenerator.nextLong());
    return gaussian.sample();
}

From source file:com.datumbox.framework.core.statistics.distributions.ContinuousDistributions.java

/**
 * Calculates the PDF of Multinomial Normal Distribution for a particular x.
 * //www .j a  va 2  s  . co  m
 * @param mean
 * @param covariance
 * @param x             The x record
 * @return              The multinomialGaussianPdf of x
 */
public static double multinomialGaussianPdf(double[] mean, double[][] covariance, double[] x) {
    MultivariateNormalDistribution gaussian = new MultivariateNormalDistribution(mean, covariance);
    return gaussian.density(x);
}

From source file:org.apache.hadoop.hive.ql.abm.simulation.MCSimNode.java

public List<SimulationResult> simulate(IntArrayList[] requests) {
    init(requests);//from   w w  w .  j av a 2 s  .c o  m

    if (dimension == 0) {
        return null;
    }

    if (parent == null) {
        return defaultSimulate();
    }

    List<SimulationResult> parRet = parent.simulate(targets);

    if (parRet == null) {
        return defaultSimulate();
    }

    List<SimulationResult> ret = new ArrayList<SimulationResult>();

    for (SimulationResult res : parRet) {
        ArrayList<IntArrayList> condIds = res.lastCondId;

        boolean[] fake = new boolean[dimension];
        double[] mu = new double[dimension];
        double[][] A = new double[dimension][dimension];
        double[][] B = new double[res.invSigma.getColumnDimension()][dimension];
        double[] zero = new double[dimension];

        for (int i = 0; i < within1.length; ++i) {
            IntArrayList cIds = condIds.get(i);
            within1[i].fill(cIds, fake, mu, A);
            InterDistOracle[] w2s = within2[i];
            for (int j = i + 1; j < within2.length; ++j) {
                w2s[j].fillSym(cIds, condIds.get(j), fake, mu, A);
            }
        }

        int dif = between.size() - res.condIds.size();
        double[] pmu = res.getMean();
        for (int i = 0; i < targets.length; ++i) {
            int cum = 0;
            IntArrayList cIds = condIds.get(i);
            for (int k = 0; k < res.condIds.size(); ++k) {
                ArrayList<IntArrayList> condIds2 = res.condIds.get(k);
                InterDistOracle[] os = between.get(k + dif)[i];
                for (int j = 0; j < os.length; ++j) {
                    cum += os[j].fillAsym(cIds, condIds2.get(j), fake, mu, pmu, B, cum);
                }
            }
        }

        for (int k = 0, cum = 0; k < res.condIds.size(); ++k) {
            ArrayList<IntArrayList> pCIds = res.condIds.get(k);
            InterDistOracle[][] oss = between.get(k + dif);
            for (int j = 0; j < oss.length; ++j) {
                IntArrayList cIds = pCIds.get(j);
                InterDistOracle[] os = oss[j];
                int off = 0;
                for (int i = 0; i < os.length; ++i) {
                    off = os[i].fillAsym(cIds, condIds.get(i), fake, pmu, mu, B, cum);
                }
                cum += off;
            }
        }

        Array2DRowRealMatrix a = new Array2DRowRealMatrix(A);
        Array2DRowRealMatrix b = new Array2DRowRealMatrix(B);
        Array2DRowRealMatrix c = (Array2DRowRealMatrix) b.transpose();
        Array2DRowRealMatrix tmp = c.multiply(res.invSigma);

        Array2DRowRealMatrix sigma = a.subtract(tmp.multiply(b));
        double[] scale = correct(sigma.getDataRef());

        MultivariateNormalDistribution dist = new MultivariateNormalDistribution(zero, sigma.getDataRef());

        double[][] smpls = dist.sample(res.samples.size());

        int pos = 0;
        for (double[] smpl : smpls) {
            if (scale != null) {
                restore(smpl, scale);
            }
            fixFake(fake, mu, smpl);
            double[] s = res.getSample(pos);
            subtract(s, pmu);
            add(smpl, tmp.operate(s));
            res.samples.get(pos)[level] = smpl;
            ++pos;
        }
        res.means.add(mu);
        res.invSigma = new Array2DRowRealMatrix(
                new LUDecomposition(concat(a, c, b, res.invSigma)).getSolver().getInverse().getData());

        dispatch(res, ret);
    }

    return ret;
}

From source file:org.apache.hadoop.hive.ql.abm.simulation.MCSimNode.java

private List<SimulationResult> defaultSimulate() {
    List<SimulationResult> ret = new ArrayList<SimulationResult>();

    boolean[] fake = new boolean[dimension];
    double[] mu = new double[dimension];
    double[][] A = new double[dimension][dimension];
    double[] zero = new double[dimension];

    ArrayList<IntArrayList> condIds = zeroCondIds;

    for (int i = 0; i < within1.length; ++i) {
        IntArrayList cIds = condIds.get(i);
        within1[i].fill(cIds, fake, mu, A);
        InterDistOracle[] w2s = within2[i];
        for (int j = i + 1; j < within2.length; ++j) {
            w2s[j].fillSym(cIds, condIds.get(j), fake, mu, A);
        }/*w ww. ja  v  a2  s.co  m*/
    }

    double[] scale = correct(A);

    MultivariateNormalDistribution dist = new MultivariateNormalDistribution(zero, A);
    double[][] smpls = dist.sample(NUM_SIMULATIONS);

    SimulationResult res = new SimulationResult();
    for (double[] smpl : smpls) {
        if (scale != null) {
            restore(smpl, scale);
        }
        fixFake(fake, mu, smpl);
        double[][] samples = new double[NUM_LEVEL][];
        samples[level] = smpl;
        res.samples.add(samples);
    }
    res.means.add(mu);
    res.invSigma = new Array2DRowRealMatrix(
            new LUDecomposition(new Array2DRowRealMatrix(A)).getSolver().getInverse().getData());

    dispatch(res, ret);

    return ret;
}