Пример #1
0
def test_mixture_em():
    model = MixtureModel(k = 2, d = 3, M = array([[0.7, 0.3],[0.2, 0.3],[0.1, 0.4]]), w = array([0.6,0.4]))
    k, d, M, w = model["k"], model["d"], model["M"], model["w"]
    N = 1e5

    xs = model.sample(N)

    lhood, _, (params, w_true) = MixtureModelEM(k, d).run(xs, params=(M, w))
    w_true, params = fix_parameters(M, params, w_true)

    lhood_, _, (params_, w_guess) = MixtureModelEM(k, d).run(xs)
    w_data, params_ = fix_parameters(M, params_, w_guess)

    print "true", M
    print "true lhood", model.llikelihood(xs)
    print "with em*", params
    print "em lhood*", lhood
    print "em lhood*", model.using(M = params, w = w_true).llikelihood(xs)
    print "error with em*", norm(M - params)/norm(M)
    print "with em", params_
    print "em lhood", lhood_
    print "em lhood", model.using(M = params_, w = w_guess).llikelihood(xs)
    print "error with em", norm(M - params_)/norm(M)

    assert norm(M - params)/norm(M) < 1e-1
    assert norm(M - params_)/norm(M) < 1e-1