def main(fname, N, n, params): """Run GMM EM on the data in @fname""" gmm = GaussianMixtureModel.from_file(fname) k, d, M, S, w = gmm.k, gmm.d, gmm.means, gmm.sigmas, gmm.weights X = gmm.sample(N, n) # Set seed for the algorithm sc.random.seed(int(params.seed)) algo = GaussianMixtureEM(k, d) O = M, S, w def report(i, O_, lhood): M_, _, _ = O_ lhood, Z, O_ = algo.run(X, None, report) M_, S_, w_ = O_ M_ = closest_permuted_matrix(M.T, M_.T).T # Table print column_aerr(M, M_), column_rerr(M, M_)
def test_gaussian_em(): """Test the Gaussian EM on a small generated dataset""" fname = "gmm-3-10-0.7.npz" gmm = GaussianMixtureModel.generate(fname, 3, 3) k, d, M, S, w = gmm.k, gmm.d, gmm.means, gmm.sigmas, gmm.weights N, n = 1e6, 1e5 X = gmm.sample(N, n) algo = GaussianMixtureEM(k, d) def report(i, O_, lhood): M_, _, _ = O_ lhood, Z, O_ = algo.run(X, None, report) M_, S_, w_ = O_ M_ = closest_permuted_matrix(M, M_) w_ = closest_permuted_vector(w, w_) print w, w_ print norm(M - M_) / norm(M) print abs(S - S_).max() print norm(w - w_) assert (norm(M - M_) / norm(M) < 1e-1) assert (abs(S - S_) < 1).all() assert (norm(w - w_) < 1e-2)
def test_gaussian_em(): """Test the Gaussian EM on a small generated dataset""" fname = "gmm-3-10-0.7.npz" gmm = GaussianMixtureModel.generate( fname, 3, 3 ) k, d, M, S, w = gmm.k, gmm.d, gmm.means, gmm.sigmas, gmm.weights N, n = 1e6, 1e5 X = gmm.sample( N, n ) algo = GaussianMixtureEM(k, d) def report( i, O_, lhood ): M_, _, _ = O_ lhood, Z, O_ = algo.run( X, None, report ) M_, S_, w_ = O_ M_ = closest_permuted_matrix( M, M_ ) w_ = closest_permuted_vector( w, w_ ) print w, w_ print norm( M - M_ )/norm(M) print abs(S - S_).max() print norm( w - w_ ) assert( norm( M - M_ )/norm(M) < 1e-1 ) assert (abs(S - S_) < 1 ).all() assert( norm( w - w_ ) < 1e-2 )
def test_gaussian_mom(): """Test the Gaussian EM on a small generated dataset""" fname = "gmm-3-10-0.7.npz" gmm = GaussianMixtureModel.generate( fname, 2, 3 ) k, d, M, S, w = gmm.k, gmm.d, gmm.means, gmm.sigmas, gmm.weights N, n = 1e6, 1e6 X = gmm.sample( N, n ) M_ = find_means(X, k) print "M_", M_ M_ = closest_permuted_matrix( M, M_ ) print M, M_ print norm( M - M_ )/norm(M) assert( norm( M - M_ )/norm(M) < 1e-1 )
def test_gaussian_mom(): """Test the Gaussian EM on a small generated dataset""" fname = "gmm-3-10-0.7.npz" gmm = GaussianMixtureModel.generate(fname, 2, 3) k, d, M, S, w = gmm.k, gmm.d, gmm.means, gmm.sigmas, gmm.weights N, n = 1e6, 1e6 X = gmm.sample(N, n) M_ = find_means(X, k) print "M_", M_ M_ = closest_permuted_matrix(M, M_) print M, M_ print norm(M - M_) / norm(M) assert (norm(M - M_) / norm(M) < 1e-1)
def test_mom(): """Test the whether spectral can recover from simple mixture of 3 identical""" model = MixtureModel.generate(2, 2, dirichlet_scale = 0.9) k, d, M, w = model["k"], model["d"], model["M"], model["w"] N = 1e5 print "M", M xs = model.sample(N) print model.exact_moments(model.observed_monomials(3)) print model.empirical_moments(xs, model.observed_monomials(3)) M_ = find_means(xs, k) print "M_", M_ M_ = closest_permuted_matrix( M.T, M_.T ).T print "M", M print "M_", M_ print norm( M - M_ )/norm(M) assert( norm( M - M_ )/norm(M) < 1e-1 )
def main(fname, N, n, params): """Run GMM EM on the data in @fname""" gmm = GaussianMixtureModel.from_file( fname ) k, d, M, S, w = gmm.k, gmm.d, gmm.means, gmm.sigmas, gmm.weights X = gmm.sample( N, n ) # Set seed for the algorithm sc.random.seed( int( params.seed ) ) algo = GaussianMixtureEM( k, d ) O = M, S, w def report( i, O_, lhood ): M_, _, _ = O_ lhood, Z, O_ = algo.run( X, None, report ) M_, S_, w_ = O_ M_ = closest_permuted_matrix( M.T, M_.T ).T # Table print column_aerr( M, M_ ), column_rerr( M, M_ )