/** * Samples from Multinomial Normal Distribution. * * @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(); }
/** * Calculates the PDF of Multinomial Normal Distribution for a particular x. * * @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); } }
/** {@inheritDoc} */ public double density(final double[] vals) throws DimensionMismatchException { final int dim = getDimension(); if (vals.length != dim) { throw new DimensionMismatchException(vals.length, dim); } return FastMath.pow(2 * FastMath.PI, -0.5 * dim) * FastMath.pow(covarianceMatrixDeterminant, -0.5) * getExponentTerm(vals); }
/** * @param weights Weights of each component. * @param means Mean vector for each component. * @param covariances Covariance matrix for each component. * @return the list of components. */ private static List<Pair<Double, MultivariateNormalDistribution>> createComponents(double[] weights, double[][] means, double[][][] covariances) { final List<Pair<Double, MultivariateNormalDistribution>> mvns = new ArrayList<Pair<Double, MultivariateNormalDistribution>>(weights.length); for (int i = 0; i < weights.length; i++) { final MultivariateNormalDistribution dist = new MultivariateNormalDistribution(means[i], covariances[i]); mvns.add(new Pair<Double, MultivariateNormalDistribution>(weights[i], dist)); } return mvns; } }
MultivariateNormalDistribution distribution = new MultivariateNormalDistribution(means,covars); double[] noises = distribution.sample(); for (int k=0;k<numClass;k++){ double dot = weights[k].dot(dataSet.getRow(i));
/** {@inheritDoc} */ @Override public double[] sample() { final int dim = getDimension(); final double[] normalVals = new double[dim]; for (int i = 0; i < dim; i++) { normalVals[i] = random.nextGaussian(); } final double[] vals = samplingMatrix.operate(normalVals); for (int i = 0; i < dim; i++) { vals[i] += means[i]; } return vals; }
MultivariateNormalDistribution mnd = new MultivariateNormalDistribution(means, covariances); double vals[] = mnd.sample();
/** * Computes the term used in the exponent (see definition of the distribution). * * @param values Values at which to compute density. * @return the multiplication factor of density calculations. */ private double getExponentTerm(final double[] values) { final double[] centered = new double[values.length]; for (int i = 0; i < centered.length; i++) { centered[i] = values[i] - getMeans()[i]; } final double[] preMultiplied = covarianceMatrixInverse.preMultiply(centered); double sum = 0; for (int i = 0; i < preMultiplied.length; i++) { sum += preMultiplied[i] * centered[i]; } return FastMath.exp(-0.5 * sum); } }
= new Covariance(binData).getCovarianceMatrix().getData(); final MultivariateNormalDistribution mvn = new MultivariateNormalDistribution(columnMeans, covMat);
/** * Gets the square root of each element on the diagonal of the covariance * matrix. * * @return the standard deviations. */ public double[] getStandardDeviations() { final int dim = getDimension(); final double[] std = new double[dim]; final double[][] s = covarianceMatrix.getData(); for (int i = 0; i < dim; i++) { std[i] = FastMath.sqrt(s[i][i]); } return std; }
double[][] samples = new double[size][]; for(int i=0; i<size; ++i) { samples[i] = multivariateNormalDistribution.sample(); } else { MultivariateNormalDistribution multivariateNormalDistribution = (MultivariateNormalDistribution)first; double[] sample = multivariateNormalDistribution.sample(); List<Number> sampleList = new ArrayList(sample.length); for(int i=0; i<sample.length; i++) {
/** * Computes the term used in the exponent (see definition of the distribution). * * @param values Values at which to compute density. * @return the multiplication factor of density calculations. */ private double getExponentTerm(final double[] values) { final double[] centered = new double[values.length]; for (int i = 0; i < centered.length; i++) { centered[i] = values[i] - getMeans()[i]; } final double[] preMultiplied = covarianceMatrixInverse.preMultiply(centered); double sum = 0; for (int i = 0; i < preMultiplied.length; i++) { sum += preMultiplied[i] * centered[i]; } return Math.exp(-0.5 * sum); } }
@Override public void consume(List<Datum> records) throws Exception { if (!hasConsumed) { n = records.get(0).metrics().getDimension(); mean = new ArrayRealVector(n); covV = new ArrayRealVector(n, 1d/n); covM = new DiagonalMatrix(covV.toArray()); mnd = new MultivariateNormalDistribution(mean.toArray(), covM.getData()); mnd.reseedRandomGenerator(randomSeed); randomProjectionMatrix = new BlockRealMatrix(mnd.sample(k)); hasConsumed = true; } for (Datum d: records){ metricVector = d.metrics(); transformedVector = randomProjectionMatrix.operate(metricVector); output.add(new Datum(d,transformedVector)); } }
/** * @param weights Weights of each component. * @param means Mean vector for each component. * @param covariances Covariance matrix for each component. * @return the list of components. */ private static List<Pair<Double, MultivariateNormalDistribution>> createComponents(double[] weights, double[][] means, double[][][] covariances) { final List<Pair<Double, MultivariateNormalDistribution>> mvns = new ArrayList<Pair<Double, MultivariateNormalDistribution>>(weights.length); for (int i = 0; i < weights.length; i++) { final MultivariateNormalDistribution dist = new MultivariateNormalDistribution(means[i], covariances[i]); mvns.add(new Pair<Double, MultivariateNormalDistribution>(weights[i], dist)); } return mvns; } }
/** {@inheritDoc} */ public double density(final double[] vals) throws DimensionMismatchException { final int dim = getDimension(); if (vals.length != dim) { throw new DimensionMismatchException(vals.length, dim); } return Math.pow(2 * Math.PI, -0.5 * dim) * Math.pow(covarianceMatrixDeterminant, -0.5) * getExponentTerm(vals); }
/** * Gets the square root of each element on the diagonal of the covariance * matrix. * * @return the standard deviations. */ public double[] getStandardDeviations() { final int dim = getDimension(); final double[] std = new double[dim]; final double[][] s = covarianceMatrix.getData(); for (int i = 0; i < dim; i++) { std[i] = Math.sqrt(s[i][i]); } return std; }
/** * Computes the term used in the exponent (see definition of the distribution). * * @param values Values at which to compute density. * @return the multiplication factor of density calculations. */ private double getExponentTerm(final double[] values) { final double[] centered = new double[values.length]; for (int i = 0; i < centered.length; i++) { centered[i] = values[i] - getMeans()[i]; } final double[] preMultiplied = covarianceMatrixInverse.preMultiply(centered); double sum = 0; for (int i = 0; i < preMultiplied.length; i++) { sum += preMultiplied[i] * centered[i]; } return FastMath.exp(-0.5 * sum); } }