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

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

Introduction

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

Prototype

public double[] sample() 

Source Link

Usage

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

public static void main(final String[] args) throws FileNotFoundException {
    final File root = new File("test/KernelPrincipalComponentsAnalysis");
    root.mkdirs();// ww w . ja  va  2 s.c o  m
    final int seed = 42;
    final int N = 30;
    final RandomGenerator rng = new MersenneTwister(seed);
    final ArrayList<RealVector> data = new ArrayList<RealVector>();
    final ArrayList<RealVector> shuffled = new ArrayList<RealVector>();

    //      final double[][] covariance = new double[][] { {1.0, 0.0},
    //                                          {0.0, 1.0} };
    //      final MultivariateNormalDistribution p = new MultivariateNormalDistribution(
    //         rng, new double[] { 0.0, 0.0 }, covariance );
    //      final MultivariateNormalDistribution q = new MultivariateNormalDistribution(
    //         rng, new double[] { 10.0, 0.0 }, covariance );
    //
    //      for( int i = 0; i < N; ++i ) {
    //         data.add( new ArrayRealVector( p.sample() ) );
    //         data.add( new ArrayRealVector( q.sample() ) );
    //      }
    //      Fn.shuffle( rng, data );

    final double sigma = 0.01;
    final double[][] covariance = new double[][] { { sigma, 0.0 }, { 0.0, sigma } };
    final MultivariateNormalDistribution p = new MultivariateNormalDistribution(rng, new double[] { 0.0, 0.0 },
            covariance);

    for (final double r : new double[] { 1.0, 3.0, 5.0 }) {
        for (int i = 0; i < N; ++i) {
            final double theta = i * 2 * Math.PI / N;
            final double[] noise = p.sample();
            final RealVector v = new ArrayRealVector(
                    new double[] { r * Math.cos(theta) + noise[0], r * Math.sin(theta) + noise[1] });
            data.add(v);
            shuffled.add(v);
        }
    }
    Fn.shuffle(rng, shuffled);

    final Csv.Writer data_writer = new Csv.Writer(new PrintStream(new File(root, "data.csv")));
    for (final RealVector v : data) {
        for (int i = 0; i < v.getDimension(); ++i) {
            data_writer.cell(v.getEntry(i));
        }
        data_writer.newline();
    }
    data_writer.close();

    System.out.println("[Training]");
    final int Ncomponents = 2;
    final KernelPrincipalComponentsAnalysis<RealVector> kpca = new KernelPrincipalComponentsAnalysis<RealVector>(
            shuffled, new RadialBasisFunctionKernel(0.5), 1e-6);
    System.out.println("[Finished]");
    for (int i = 0; i < Ncomponents; ++i) {
        System.out.println(kpca.eigenvectors.get(i));
    }

    System.out.println("Transformed data:");
    final KernelPrincipalComponentsAnalysis.Transformer<RealVector> transformer = kpca
            .makeTransformer(Ncomponents);
    final Csv.Writer transformed_writer = new Csv.Writer(new PrintStream(new File(root, "transformed.csv")));
    for (final RealVector u : data) {
        final RealVector v = transformer.transform(u);
        System.out.println(v);
        for (int i = 0; i < v.getDimension(); ++i) {
            transformed_writer.cell(v.getEntry(i));
        }
        transformed_writer.newline();
    }
    transformed_writer.close();
}

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

public static Pair<ArrayList<double[]>, int[]> twoVerticalGaussian2D(final RandomGenerator rng,
        final int Nper_class) {
    final int Nclasses = 2;
    final ArrayList<double[]> X = new ArrayList<double[]>();
    final int[] Y = new int[Nclasses * Nper_class];

    final double[][] covariance = new double[][] { { 0.1 * 0.1, 0.0 }, { 0.0, 1 } };
    final MultivariateNormalDistribution p = new MultivariateNormalDistribution(rng, new double[] { 0.0, 0.0 },
            covariance);// ww w. j  a  v  a 2s .c om

    for (int c = 0; c < Nclasses; ++c) {
        for (int i = 0; i < Nper_class; ++i) {
            final double[] x = p.sample();
            x[0] += c;
            X.add(x);
            Y[c * Nper_class + i] = c;
        }
    }

    return Pair.makePair(X, Y);
}

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

/**
 * Samples from Multinomial Normal Distribution.
 * /*ww  w  . j  a  v a 2  s  . c  o 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

/**
 * Samples from Multinomial Normal Distribution.
 * /*from  ww w  .ja  v a2  s .c  o 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: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));
    }/*from w  ww. jav  a 2  s .  c  o  m*/

    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  w  w  w  .  j  av  a  2  s  .  co  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:org.deeplearning4j.examples.misc.lossfunctions.GaussianMixtureIterator.java

public DataSet nextThrows(int num) throws Exception {

    INDArray input = Nd4j.zeros(num, inputColumns());
    INDArray output = Nd4j.zeros(num, totalOutcomes());

    for (int i = 0; i < num; i++) {
        double x = mRNG.nextDouble() - 0.5;

        // The effect of this is two two-dimensional gaussians
        // mixed 50/50 with one another.
        // The first gaussian is fixed with a mean of (-0.5, -0.5).
        // The second gaussian has a mean that varies from -0.25 to 0.25.
        // The variance of both is 0.01 (std-deviation 0.1)

        boolean mid = mRNG.nextBoolean();
        double meanFactor = mid ? -0.5 : 0.5 * x;
        double sigma = mid ? 0.01 : 0.01;

        MultivariateNormalDistribution mnd = new MultivariateNormalDistribution(
                new double[] { 1 * meanFactor, 1 * meanFactor },
                new double[][] { { sigma, 0.0 }, { 0.0, sigma } });

        double[] samples = mnd.sample();

        input.putScalar(new int[] { i, 0 }, x * 10);
        output.putScalar(new int[] { i, 0 }, samples[0]);
        output.putScalar(new int[] { i, 1 }, samples[1]);
    }/*from   w ww.ja  v a2  s  .  c o  m*/

    return new DataSet(input, output);
}