Ejemplo n.º 1
0
def test_mixture_distribution_weights():
    d = dit.Distribution(['A', 'B'], [0.5, 0.5])
    d2 = dit.Distribution(['A', 'B'], [1, 0])

    with pytest.raises(ditException):
        dit.mixture_distribution([d, d2], [1])
    with pytest.raises(ditException):
        dit.mixture_distribution2([d, d2], [1])
Ejemplo n.º 2
0
def test_mixture_distribution_weights():
    d = dit.Distribution(['A', 'B'], [0.5, 0.5])
    d2 = dit.Distribution(['A', 'B'], [1, 0])

    with pytest.raises(ditException):
        dit.mixture_distribution([d, d2], [1])
    with pytest.raises(ditException):
        dit.mixture_distribution2([d, d2], [1])
Ejemplo n.º 3
0
def test_mixture_distribution5():
    # Incompatible sample spaces.
    d1 = dit.Distribution(['A', 'B'], [0.5, 0.5])
    d2 = dit.Distribution(['B', 'C'], [0.5, 0.5])
    d3 = dit.mixture_distribution([d1, d2], [0.5, 0.5], merge=True)
    pmf = np.array([0.25, 0.5, 0.25])
    assert_true(np.allclose(pmf, d3.pmf))
Ejemplo n.º 4
0
def test_mixture_distribution():
    d = dit.Distribution(['A', 'B'], [0.5, 0.5])
    d2 = dit.Distribution(['A', 'B'], [1, 0])
    pmf = np.array([0.75, 0.25])

    d3 = dit.mixture_distribution([d, d2], [0.5, 0.5])
    npt.assert_allclose(pmf, d3.pmf)
Ejemplo n.º 5
0
    def pm_next_word_dists(self, lengths, base=None):
        """
        Calculate next word distributions of the specified lengths.

        The posterior mean transition probabilities and final state of each
        hidden Markov model are used to calculate the word probabilities.

        """
        if base is None:
            base = dit.ditParams['base']
        if base != 'linear':
            logs = True
        else:
            logs = False

        dists = defaultdict(list)
        for i, initial_node in enumerate(self.posterior.valid_initial_nodes):
            pm_machine = self.posterior.pm_machine(initial_node)
            final_node = self.posterior.final_node[initial_node]
            kwds = {'logs': logs, 'sort': 'dit', 'ndist': final_node}
            d = pm_machine.probabilities(lengths, **kwds)
            for L, dist in zip(lengths, d):
                if logs and base != 2:
                    dist = dist.set_base(base)
                dists[L].append(dist)

        weights = dit.copypmf(self.inode_posterior, base, 'sparse')
        avg_dists = []
        for L in lengths:
            avg_dists.append( dit.mixture_distribution(dists[L], weights) )

        return avg_dists
Ejemplo n.º 6
0
def test_mixture_distribution5():
    # Incompatible sample spaces.
    d1 = dit.Distribution(['A', 'B'], [0.5, 0.5])
    d2 = dit.Distribution(['B', 'C'], [0.5, 0.5])
    d3 = dit.mixture_distribution([d1, d2], [0.5, 0.5], merge=True)
    pmf = np.array([0.25, 0.5, 0.25])
    assert_true(np.allclose(pmf, d3.pmf))
Ejemplo n.º 7
0
def test_mixture_distribution():
    d = dit.Distribution(['A', 'B'], [0.5, 0.5])
    d2 = dit.Distribution(['A', 'B'], [1, 0])
    pmf = np.array([0.75, 0.25])

    d3 = dit.mixture_distribution([d, d2], [0.5, 0.5])
    npt.assert_allclose(pmf, d3.pmf)
Ejemplo n.º 8
0
def test_mixture_distribution_log():
    d = dit.Distribution(['A', 'B'], [0.5, 0.5])
    d2 = dit.Distribution(['A', 'B'], [1, 0])
    d.set_base(2)
    d2.set_base(2)
    weights = np.log2(np.array([0.5, 0.5]))
    pmf = np.log2(np.array([0.75, 0.25]))

    d3 = dit.mixture_distribution([d, d2], weights)
    npt.assert_allclose(pmf, d3.pmf)
Ejemplo n.º 9
0
def test_mixture_distribution_log():
    d = dit.Distribution(['A', 'B'], [0.5, 0.5])
    d2 = dit.Distribution(['A', 'B'], [1, 0])
    d.set_base(2)
    d2.set_base(2)
    weights = np.log2(np.array([0.5, 0.5]))
    pmf = np.log2(np.array([0.75, 0.25]))

    d3 = dit.mixture_distribution([d, d2], weights)
    npt.assert_allclose(pmf, d3.pmf)
Ejemplo n.º 10
0
def test_mixture_distribution4():
    # Sample spaces are compatible.
    # But pmfs have a different lengths and orders.
    d = dit.Distribution(['A', 'B'], [0.5, 0.5])
    d2 = dit.Distribution(['B', 'A'], [1, 0], sort=False, trim=False, sparse=True)
    d2.make_sparse(trim=True)
    pmf = np.array([0.25, 0.75])

    d3 = dit.mixture_distribution([d, d2], [0.5, 0.5])
    assert_true(np.allclose(pmf, d3.pmf))
    assert_raises(ValueError, dit.mixture_distribution2, [d, d2], [0.5, 0.5])
Ejemplo n.º 11
0
def test_mixture_distribution3():
    # Sample spaces are compatible.
    # But pmfs have a different order.
    d = dit.Distribution(['A', 'B'], [0.5, 0.5])
    d2 = dit.Distribution(['B', 'A'], [1, 0], sort=False, trim=False, sparse=False)
    pmf = np.array([0.25, 0.75])

    d3 = dit.mixture_distribution([d, d2], [0.5, 0.5])
    assert_true(np.allclose(pmf, d3.pmf))
    d3 = dit.mixture_distribution2([d, d2], [0.5, 0.5])
    assert_false(np.allclose(pmf, d3.pmf))
Ejemplo n.º 12
0
def test_mixture_distribution3():
    # Sample spaces are compatible.
    # But pmfs have a different order.
    d = dit.Distribution(['A', 'B'], [0.5, 0.5])
    d2 = dit.Distribution(['B', 'A'], [1, 0], sort=False, trim=False, sparse=False)
    pmf = np.array([0.25, 0.75])

    d3 = dit.mixture_distribution([d, d2], [0.5, 0.5])
    assert np.allclose(pmf, d3.pmf)
    d3 = dit.mixture_distribution2([d, d2], [0.5, 0.5])
    assert not np.allclose(pmf, d3.pmf)
Ejemplo n.º 13
0
def test_mixture_distribution4():
    # Sample spaces are compatible.
    # But pmfs have a different lengths and orders.
    d = dit.Distribution(['A', 'B'], [0.5, 0.5])
    d2 = dit.Distribution(['B', 'A'], [1, 0], sort=False, trim=False, sparse=True)
    d2.make_sparse(trim=True)
    pmf = np.array([0.25, 0.75])

    d3 = dit.mixture_distribution([d, d2], [0.5, 0.5])
    assert np.allclose(pmf, d3.pmf)
    with pytest.raises(ValueError):
        dit.mixture_distribution2([d, d2], [0.5, 0.5])