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

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

Introduction

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

Prototype

public MultivariateNormalMixtureExpectationMaximization(double[][] data)
        throws NotStrictlyPositiveException, DimensionMismatchException, NumberIsTooSmallException 

Source Link

Document

Creates an object to fit a multivariate normal mixture model to data.

Usage

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

@Test(expected = NotStrictlyPositiveException.class)
public void testNonEmptyData() {
    // Should not accept empty data
    new MultivariateNormalMixtureExpectationMaximization(new double[][] {});
}

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

@Test(expected = DimensionMismatchException.class)
public void testNonJaggedData() {
    // Reject data with nonconstant numbers of columns
    double[][] data = new double[][] { { 1, 2, 3 }, { 4, 5, 6, 7 }, };
    new MultivariateNormalMixtureExpectationMaximization(data);
}

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

@Test(expected = NumberIsTooSmallException.class)
public void testMultipleColumnsRequired() {
    // Data should have at least 2 columns
    double[][] data = new double[][] { { 1 }, { 2 } };
    new MultivariateNormalMixtureExpectationMaximization(data);
}

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  ww  w  .j  a  va 2s. c  om*/

    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 w  w . j  a v a  2 s  .c om*/

    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  ww  w . java2s .  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(expected = DimensionMismatchException.class)
public void testIncompatibleIntialMixture() {
    // Data has 3 columns
    double[][] data = new double[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
    double[] weights = new double[] { 0.5, 0.5 };

    // These distributions are compatible with 2-column data, not 3-column
    // data//from  w w w .jav a2  s.co  m
    MultivariateNormalDistribution[] mvns = new MultivariateNormalDistribution[2];

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

    // Create components and mixture
    List<Pair<Double, MultivariateNormalDistribution>> components = new ArrayList<Pair<Double, MultivariateNormalDistribution>>();
    components.add(new Pair<Double, MultivariateNormalDistribution>(weights[0], mvns[0]));
    components.add(new Pair<Double, MultivariateNormalDistribution>(weights[1], mvns[1]));

    MixtureMultivariateNormalDistribution badInitialMix = new MixtureMultivariateNormalDistribution(components);

    MultivariateNormalMixtureExpectationMaximization fitter = new MultivariateNormalMixtureExpectationMaximization(
            data);

    fitter.fit(badInitialMix);
}

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);//from www  .  ja v  a 2s  . c  o m
    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 w w  .  j  av a2  s. c  om

    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]);
    }

}