예제 #1
0
파일: test_Factor.py 프로젝트: cfm25/pgmpy
class TestJointProbabilityDistributionMethods(unittest.TestCase):
    def setUp(self):
        self.jpd = JPD(['x1', 'x2', 'x3'], [2, 3, 2], values=np.ones(12) / 12)
        self.jpd1 = JPD(['x1', 'x2', 'x3'], [2, 3, 2], values=np.ones(12) / 12)
        self.jpd2 = JPD(['x1','x2','x3'],[2,2,3],
                       [0.126,0.168,0.126,0.009,0.045,0.126,0.252,0.0224,0.0056,0.06,0.036,0.024])

    def test_jpd_marginal_distribution_list(self):
        self.jpd.marginal_distribution(['x1', 'x2'])
        np_test.assert_array_almost_equal(self.jpd.values, np.array([[0.16666667, 0.16666667, 0.16666667],
                                                                     [0.16666667, 0.16666667, 0.16666667]]))
        np_test.assert_array_equal(self.jpd.cardinality, np.array([2, 3]))
        dic = {'x1':2, 'x2':3}
        self.assertEqual(self.jpd.get_cardinality(['x1','x2']), dic)
        self.assertEqual(self.jpd.scope(), ['x1', 'x2'])
        np_test.assert_almost_equal(np.sum(self.jpd.values), 1)
        new_jpd = self.jpd1.marginal_distribution(['x1', 'x2'], inplace=False)
        self.assertTrue(self.jpd1 != self.jpd)
        self.assertTrue(new_jpd == self.jpd)

    def test_marginal_distribution_str(self):
        self.jpd.marginal_distribution('x1')
        np_test.assert_array_almost_equal(self.jpd.values, np.array([0.5, 0.5]))
        np_test.assert_array_equal(self.jpd.cardinality, np.array([2]))
        self.assertEqual(self.jpd.scope(), ['x1'])
        np_test.assert_almost_equal(np.sum(self.jpd.values), 1)
        new_jpd = self.jpd1.marginal_distribution('x1', inplace=False)
        self.assertTrue(self.jpd1 != self.jpd)
        self.assertTrue(self.jpd == new_jpd)

    def test_conditional_distribution_list(self):
        self.jpd = self.jpd1.copy()
        self.jpd.conditional_distribution([('x1', 1), ('x2', 0)])
        np_test.assert_array_almost_equal(self.jpd.values, np.array([0.5, 0.5]))
        np_test.assert_array_equal(self.jpd.cardinality, np.array([2]))
        self.assertEqual(self.jpd.scope(), ['x3'])
        np_test.assert_almost_equal(np.sum(self.jpd.values), 1)
        new_jpd = self.jpd1.conditional_distribution([('x1', 1), ('x2', 0)], inplace=False)
        self.assertTrue(self.jpd1 != self.jpd)
        self.assertTrue(self.jpd == new_jpd)

    def test_check_independence(self):
        self.assertTrue(self.jpd2.check_independence(['x1'], ['x2']))
        self.assertRaises(TypeError, self.jpd2.check_independence, 'x1', ['x2'])
        self.assertRaises(TypeError, self.jpd2.check_independence, ['x1'], 'x2')
        self.assertRaises(TypeError, self.jpd2.check_independence,['x1'], ['x2'], 'x3')
        self.assertFalse(self.jpd2.check_independence(['x1'], ['x2'], ('x3',), condition_random_variable=True))
        self.assertFalse(self.jpd2.check_independence(['x1'], ['x2'], [('x3', 0)]))
        self.assertTrue(self.jpd1.check_independence(['x1'], ['x2'], ('x3',), condition_random_variable=True))
        self.assertTrue(self.jpd1.check_independence(['x1'], ['x2'], [('x3', 1)]))

    def test_get_independencies(self):
        independencies = Independencies(['x1', 'x2'], ['x2', 'x3'], ['x3', 'x1'])
        independencies1 = Independencies(['x1', 'x2'])
        self.assertEqual(self.jpd1.get_independencies(), independencies)
        self.assertEqual(self.jpd2.get_independencies(), independencies1)
        self.assertEqual(self.jpd1.get_independencies([('x3', 0)]), independencies1)
        self.assertEqual(self.jpd2.get_independencies([('x3', 0)]), Independencies())

    def test_minimal_imap(self):
        bm = self.jpd1.minimal_imap(order=['x1','x2','x3'])
        self.assertEqual(sorted(bm.edges()), sorted([('x1', 'x3'), ('x2', 'x3')]))
        bm = self.jpd1.minimal_imap(order=['x2','x3','x1'])
        self.assertEqual(sorted(bm.edges()), sorted([('x2', 'x1'), ('x3', 'x1')]))
        bm = self.jpd2.minimal_imap(order=['x1','x2','x3'])
        self.assertEqual(bm.edges(), [])
        bm = self.jpd2.minimal_imap(order=['x1','x2'])
        self.assertEqual(bm.edges(), [])

    def test_repr(self):
        self.assertEqual(repr(self.jpd1),'<Joint Distribution representing P(x1:2, x2:3, x3:2) at {address}>'
                         .format(address=hex(id(self.jpd1))))

    def tearDown(self):
        del self.jpd
        del self.jpd1
        del self.jpd2
예제 #2
0
파일: test_Factor.py 프로젝트: cfm25/pgmpy
 def test_jpd_init(self):
     jpd = JPD(['x1', 'x2', 'x3'], [2, 3, 2], np.ones(12) / 12)
     np_test.assert_array_equal(jpd.cardinality, np.array([2, 3, 2]))
     np_test.assert_array_equal(jpd.values, np.ones(12).reshape(2, 3, 2) / 12)
     self.assertEqual(jpd.get_cardinality(['x1', 'x2', 'x3']), {'x1':2, 'x2':3, 'x3':2})