Exemplo n.º 1
0
def test_8():
    # "Sample from a VMHMM and then fit to it"
    n_states = 2
    vm = VonMisesHMM(n_states=n_states)
    means = np.array([[0, 0, 0], [np.pi, np.pi, np.pi]])
    kappas = np.array([[1, 2, 3], [2, 3, 4]])
    transmat = np.array([[0.9, 0.1], [0.1, 0.9]])
    vm.means_ = means
    vm.kappas_ = kappas
    vm.transmat_ = transmat
    x, s = vm.sample(1000)

    vm = VonMisesHMM(n_states=2)
    vm.fit([x])

    mappingcost = np.zeros((n_states, n_states))
    for i in range(n_states):
        for j in range(n_states):
            mappingcost[i, j] = np.sum(
                circwrap(vm.means_[i, :] - means[j, :]) ** 2)

    mapping = Munkres().compute(mappingcost)
    means_ = np.array([vm.means_[j, :] for i, j in mapping])
    kappas_ = np.array([vm.kappas_[j, :] for i, j in mapping])
    transmat_ = vm.transmat_

    print('means\n', means, '\nmeans_\n', means_)
    print('kappas\n', kappas, '\nkappas_\n', kappas_)
    print('transmat\n', transmat, '\ntransmat_\n', transmat_)

    #vm.score(x)

    assert np.all(np.abs(kappas - kappas_) < 0.5)
    assert np.all(circwrap(means - means_) < 0.25)