List of usage examples for org.apache.commons.math3.distribution MultivariateNormalDistribution MultivariateNormalDistribution
public MultivariateNormalDistribution(final double[] means, final double[][] covariances) throws SingularMatrixException, DimensionMismatchException, NonPositiveDefiniteMatrixException
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; }