def test_check_covariances(): rng = np.random.RandomState(0) rand_data = RandomData(rng) n_components, n_features = rand_data.n_components, rand_data.n_features # Define the bad covariances for each covariance_type covariances_bad_shape = { 'full': rng.rand(n_components + 1, n_features, n_features), 'tied': rng.rand(n_features + 1, n_features + 1), 'diag': rng.rand(n_components + 1, n_features), 'spherical': rng.rand(n_components + 1)} # Define not positive-definite covariances covariances_not_pos = rng.rand(n_components, n_features, n_features) covariances_not_pos[0] = np.eye(n_features) covariances_not_pos[0, 0, 0] = -1. covariances_not_positive = { 'full': covariances_not_pos, 'tied': covariances_not_pos[0], 'diag': -1. * np.ones((n_components, n_features)), 'spherical': -1. * np.ones(n_components)} not_positive_errors = { 'full': 'symmetric, positive-definite', 'tied': 'symmetric, positive-definite', 'diag': 'positive', 'spherical': 'positive'} for cov_type in ['full', 'tied', 'diag', 'spherical']: X = rand_data.X[cov_type] g = GaussianMixture(n_components=n_components, covariance_type=cov_type) # Check covariance with bad shapes g.covariances_init = covariances_bad_shape[cov_type] assert_raise_message(ValueError, "The parameter '%s covariance' should have " "the shape of" % cov_type, g.fit, X) # Check not positive covariances g.covariances_init = covariances_not_positive[cov_type] assert_raise_message(ValueError, "'%s covariance' should be %s" % (cov_type, not_positive_errors[cov_type]), g.fit, X) # Check the correct init of covariances_init g.covariances_init = rand_data.covariances[cov_type] g.fit(X) assert_array_equal(rand_data.covariances[cov_type], g.covariances_init)