Ejemplo n.º 1
0
def test_cpd_sampling():
	d1 = DiscreteDistribution({"A": 0.1, "B": 0.9})
	d2 = ConditionalProbabilityTable(
		[["A", "A", 0.1], ["A", "B", 0.9], ["B", "A", 0.7], ["B", "B", 0.3]],
		[d1])

	# P(A) = 0.1*0.1 + 0.9*0.7 = 0.64
	# P(B) = 0.1*0.9 + 0.9*0.3 = 0.36
	true = [0.64, 0.36]
	est = numpy.bincount([0 if d2.sample() == "A" else 1 for i in range(1000)]) / 1000.0
	assert_almost_equal(est[0], true[0], 1)
	assert_almost_equal(est[1], true[1], 1)

	# when A is observed, it reduces to [0.1, 0.9]
	true1 = [0.1, 0.9]
	par_val = {}
	par_val[d1] = "A"
	est = numpy.bincount(
		[0 if d2.sample(parent_values=par_val) == "A" else 1 for i in range(1000)]
		) / 1000.0
	assert_almost_equal(est[0], true1[0], 1)
	assert_almost_equal(est[1], true1[1], 1)

	true2= [0.7, 0.3]
	par_val = {}
	par_val[d1] = "B"
	est = numpy.bincount(
		[0 if d2.sample(parent_values=par_val) == "A" else 1 for i in range(1000)]
		) / 1000.0
	assert_almost_equal(est[0], true2[0], 1)
	assert_almost_equal(est[1], true2[1], 1)
def test_cpd_sampling():
    d1 = DiscreteDistribution({"A": 0.1, "B": 0.9})
    d2 = ConditionalProbabilityTable(
        [["A", "A", 0.1], ["A", "B", 0.9], ["B", "A", 0.7], ["B", "B", 0.3]],
        [d1])

    # P(A) = 0.1*0.1 + 0.9*0.7 = 0.64
    # P(B) = 0.1*0.9 + 0.9*0.3 = 0.36
    true = [0.64, 0.36]
    est = numpy.bincount([0 if d2.sample() == "A" else 1
                          for i in range(1000)]) / 1000.0
    assert_almost_equal(est[0], true[0], 1)
    assert_almost_equal(est[1], true[1], 1)

    # when A is observed, it reduces to [0.1, 0.9]
    true1 = [0.1, 0.9]
    par_val = {}
    par_val[d1] = "A"
    est = numpy.bincount([
        0 if d2.sample(parent_values=par_val) == "A" else 1
        for i in range(1000)
    ]) / 1000.0
    assert_almost_equal(est[0], true1[0], 1)
    assert_almost_equal(est[1], true1[1], 1)

    true2 = [0.7, 0.3]
    par_val = {}
    par_val[d1] = "B"
    est = numpy.bincount([
        0 if d2.sample(parent_values=par_val) == "A" else 1
        for i in range(1000)
    ]) / 1000.0
    assert_almost_equal(est[0], true2[0], 1)
    assert_almost_equal(est[1], true2[1], 1)
Ejemplo n.º 3
0
def test_distributions_cpt_random_sample():
	d1 = DiscreteDistribution({"A": 0.1, "B": 0.9})
	d = ConditionalProbabilityTable(
		[["A", "A", 0.1], ["A", "B", 0.9], ["B", "A", 0.7], ["B", "B", 0.3]],
		[d1])

	x = numpy.array(['B', 'A', 'B', 'B', 'A', 'B', 'A', 'A', 'B', 'A', 'A', 
		'B', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A'])

	assert_array_equal(d.sample(n=20, random_state=5), x)
	assert_raises(AssertionError, assert_array_equal, d.sample(n=10), x)