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)
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)