コード例 #1
0
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_)
コード例 #2
0
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)
コード例 #3
0
ファイル: GaussianMixturesEM.py プロジェクト: sidaw/polymom
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 )
コード例 #4
0
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 )
コード例 #5
0
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)
コード例 #6
0
ファイル: MixtureModelSpectral.py プロジェクト: sidaw/polymom
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 )
コード例 #7
0
ファイル: GaussianMixturesEM.py プロジェクト: sidaw/polymom
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_ )