Example usage for org.apache.commons.math3.distribution.fitting MultivariateNormalMixtureExpectationMaximization estimate

List of usage examples for org.apache.commons.math3.distribution.fitting MultivariateNormalMixtureExpectationMaximization estimate

Introduction

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

Prototype

public static MixtureMultivariateNormalDistribution estimate(final double[][] data, final int numComponents)
        throws NotStrictlyPositiveException, DimensionMismatchException 

Source Link

Document

Helper method to create a multivariate normal mixture model which can be used to initialize #fit(MixtureMultivariateNormalDistribution) .

Usage

From source file:sly.speakrecognizer.test.math.MultivariateNormalMixtureExpectationMaximizationFitterTest.java

@Test(expected = NotStrictlyPositiveException.class)
public void testMaxIterationsPositive() {
    // Maximum iterations for fit must be positive integer
    double[][] data = getTestSamples();
    MultivariateNormalMixtureExpectationMaximization fitter = new MultivariateNormalMixtureExpectationMaximization(
            data);//from  w ww.java2 s  .co m

    MixtureMultivariateNormalDistribution initialMix = MultivariateNormalMixtureExpectationMaximization
            .estimate(data, 2);

    fitter.fit(initialMix, 0, 1E-5);
}

From source file:sly.speakrecognizer.test.math.MultivariateNormalMixtureExpectationMaximizationFitterTest.java

@Test(expected = NotStrictlyPositiveException.class)
public void testThresholdPositive() {
    // Maximum iterations for fit must be positive
    double[][] data = getTestSamples();
    MultivariateNormalMixtureExpectationMaximization fitter = new MultivariateNormalMixtureExpectationMaximization(
            data);//from  w ww  .j av a  2  s  . c o  m

    MixtureMultivariateNormalDistribution initialMix = MultivariateNormalMixtureExpectationMaximization
            .estimate(data, 2);

    fitter.fit(initialMix, 1000, 0);
}

From source file:sly.speakrecognizer.test.math.MultivariateNormalMixtureExpectationMaximizationFitterTest.java

@Test(expected = ConvergenceException.class)
public void testConvergenceException() {
    // ConvergenceException thrown if fit terminates before threshold met
    double[][] data = getTestSamples();
    MultivariateNormalMixtureExpectationMaximization fitter = new MultivariateNormalMixtureExpectationMaximization(
            data);//from  www .j  a  v a  2  s  .  c  om

    MixtureMultivariateNormalDistribution initialMix = MultivariateNormalMixtureExpectationMaximization
            .estimate(data, 2);

    // 5 iterations not enough to meet convergence threshold
    fitter.fit(initialMix, 5, 1E-5);
}

From source file:sly.speakrecognizer.test.math.MultivariateNormalMixtureExpectationMaximizationFitterTest.java

@Test
public void testInitialMixture() {
    // Testing initial mixture estimated from data
    double[] correctWeights = new double[] { 0.5, 0.5 };

    MultivariateNormalDistribution[] correctMVNs = new MultivariateNormalDistribution[2];

    correctMVNs[0] = new MultivariateNormalDistribution(
            new double[] { -0.0021722935000328823, 3.5432892936887908 }, new double[][] {
                    { 4.537422569229048, 3.5266152281729304 }, { 3.5266152281729304, 6.175448814169779 } });
    correctMVNs[1] = new MultivariateNormalDistribution(new double[] { 5.090902706507635, 8.68540656355283 },
            new double[][] { { 2.886778573963039, 1.5257474543463154 },
                    { 1.5257474543463154, 3.3794567673616918 } });

    final MixtureMultivariateNormalDistribution initialMix = MultivariateNormalMixtureExpectationMaximization
            .estimate(getTestSamples(), 2);

    int i = 0;//from   w ww . ja va2s  .co m
    for (Pair<Double, MultivariateNormalDistribution> component : initialMix.getComponents()) {
        Assert.assertEquals(correctWeights[i], component.getFirst(), Math.ulp(1d));

        assertMultivariateNormalDistribution(correctMVNs[i], component.getSecond(), 0);
        //===========================

        i++;
    }
}

From source file:sly.speakrecognizer.test.math.MultivariateNormalMixtureExpectationMaximizationFitterTest.java

@Test
public void testFit() {
    // Test that the loglikelihood, weights, and models are determined and
    // fitted correctly
    double[][] data = getTestSamples();
    double correctLogLikelihood = -4.292431006791994;
    double[] correctWeights = new double[] { 0.2962324189652912, 0.7037675810347089 };
    MultivariateNormalDistribution[] correctMVNs = new MultivariateNormalDistribution[2];
    correctMVNs[0] = new MultivariateNormalDistribution(
            new double[] { -1.4213112715121132, 1.6924690505757753 }, new double[][] {
                    { 1.739356907285747, -0.5867644251487614 }, { -0.5867644251487614, 1.0232932029324642 } });

    correctMVNs[1] = new MultivariateNormalDistribution(new double[] { 4.213612224374709, 7.975621325853645 },
            new double[][] { { 4.245384898007161, 2.5797798966382155 },
                    { 2.5797798966382155, 3.9200272522448367 } });
    //=========================================
    MultivariateNormalMixtureExpectationMaximization fitter = new MultivariateNormalMixtureExpectationMaximization(
            data);//ww  w.j  a v a 2s.c  om
    MixtureMultivariateNormalDistribution initialMix = MultivariateNormalMixtureExpectationMaximization
            .estimate(data, 2);
    fitter.fit(initialMix);
    MixtureMultivariateNormalDistribution fittedMix = fitter.getFittedModel();
    printMMND(fittedMix);
    List<Pair<Double, MultivariateNormalDistribution>> components = fittedMix.getComponents();

    Assert.assertEquals(correctLogLikelihood, fitter.getLogLikelihood(), Math.ulp(1d));

    int i = 0;
    for (Pair<Double, MultivariateNormalDistribution> component : components) {
        double weight = component.getFirst();
        MultivariateNormalDistribution mvn = component.getSecond();
        Assert.assertEquals(correctWeights[i], weight, Math.ulp(1d));
        assertMultivariateNormalDistribution(correctMVNs[i], mvn, 0);
        i++;
    }
}

From source file:sly.speakrecognizer.test.math.MultivariateNormalMixtureExpectationMaximizationFitterTest.java

@Test
public void testFitForDifferentSizesData() {
    System.out.println("TEST DLA ROZNYCH ROZMAROW DANYCH");
    double[][][] covariances = { new double[][] { new double[] { 1.74, -0.59 }, new double[] { -0.59, 1.02 }, },
            new double[][] { new double[] { 4.24, 2.58 }, new double[] { 2.58, 3.92 }, }, };
    double[][] means = { new double[] { -1.42, 1.69 }, new double[] { 4.21, 7.98 }, };

    double[] weights = new double[] { 0.296, 0.704 };
    MixtureMultivariateNormalDistribution mmnd = new MixtureMultivariateNormalDistribution(weights, means,
            covariances);// w  ww  . ja v  a2 s. c  o m

    int[] lengths = new int[] { 10, 50, 250, 1500, 10000, 100000 };
    double[] errors = new double[lengths.length];
    int counter = 0;
    for (int length : lengths) {
        System.out.println("Dla dugoci danych: " + length);
        double[][] data = getTestSamples(length, mmnd);
        MultivariateNormalMixtureExpectationMaximization fitter = new MultivariateNormalMixtureExpectationMaximization(
                data);
        MixtureMultivariateNormalDistribution initialMix = MultivariateNormalMixtureExpectationMaximization
                .estimate(data, 2);
        fitter.fit(initialMix);
        MixtureMultivariateNormalDistribution fittedMix = fitter.getFittedModel();
        printMMND(fittedMix);
        errors[counter++] = printErrorsMMND(mmnd, fittedMix);
    }
    System.out.println("Podsumowanie");
    for (int x = 0; x < lengths.length; x++) {
        System.out.println("Dla length = " + lengths[x] + " bd wynosi = " + errors[x]);
    }

}