/** * 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); } }
/** * @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; } }
/** * 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(); }
= new Covariance(binData).getCovarianceMatrix().getData(); final MultivariateNormalDistribution mvn = new MultivariateNormalDistribution(columnMeans, covMat);
/** * @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; } }
/** * @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; } }
@Override public Object doWork(Object first, Object second) throws IOException{ if(null == first){ throw new IOException(String.format(Locale.ROOT,"Invalid expression %s - null found for the first value",toExpression(constructingFactory))); } if(null == second){ throw new IOException(String.format(Locale.ROOT,"Invalid expression %s - null found for the second value",toExpression(constructingFactory))); } List<Number> means = (List<Number>)first; Matrix covar = (Matrix)second; double[] m = new double[means.size()]; for(int i=0; i< m.length; i++) { m[i] = means.get(i).doubleValue(); } return new MultivariateNormalDistribution(m, covar.getData()); } }
= new Covariance(binData).getCovarianceMatrix().getData(); final MultivariateNormalDistribution mvn = new MultivariateNormalDistribution(columnMeans, covMat);
= new Covariance(binData).getCovarianceMatrix().getData(); final MultivariateNormalDistribution mvn = new MultivariateNormalDistribution(columnMeans, covMat);
@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)); } }
MultivariateNormalDistribution distribution = new MultivariateNormalDistribution(means,covars);