def setUp(self):
     self.model = LinearGaussianBayesianNetwork([('x1', 'x2'),
                                                 ('x2', 'x3')])
     self.cpd1 = LinearGaussianCPD('x1', [1], 4)
     self.cpd2 = LinearGaussianCPD('x2', [-5, 0.5], 4, ['x1'])
     self.cpd3 = LinearGaussianCPD('x3', [4, -1], 3, ['x2'])
 def setUp(self):
     self.model = LinearGaussianBayesianNetwork([('x1', 'x2'),
                                                 ('x2', 'x3')])
     self.cpd1 = LinearGaussianCPD('x1', 1, 4)
     self.cpd2 = LinearGaussianCPD('x2', -5, 4, ['x1'], [0.5])
     self.cpd3 = LinearGaussianCPD('x3', 4, 3, ['x2'], [-1])
class TestLGBNMethods(unittest.TestCase):
    @unittest.skip("TODO")
    def setUp(self):
        self.model = LinearGaussianBayesianNetwork([('x1', 'x2'),
                                                    ('x2', 'x3')])
        self.cpd1 = LinearGaussianCPD('x1', [1], 4)
        self.cpd2 = LinearGaussianCPD('x2', [-5, 0.5], 4, ['x1'])
        self.cpd3 = LinearGaussianCPD('x3', [4, -1], 3, ['x2'])

    @unittest.skip("TODO")
    def test_add_cpds(self):
        self.model.add_cpds(self.cpd1)
        cpd = self.model.get_cpds('x1')
        self.assertEqual(cpd.variable, self.cpd1.variable)
        self.assertEqual(cpd.variance, self.cpd1.variance)
        self.assertEqual(cpd.beta_0, self.cpd1.beta_0)

        self.model.add_cpds(self.cpd2)
        cpd = self.model.get_cpds('x2')
        self.assertEqual(cpd.variable, self.cpd2.variable)
        self.assertEqual(cpd.variance, self.cpd2.variance)
        self.assertEqual(cpd.beta_0, self.cpd2.beta_0)
        self.assertEqual(cpd.evidence, self.cpd2.evidence)
        np_test.assert_array_equal(cpd.beta_vector, self.cpd2.beta_vector)

        self.model.add_cpds(self.cpd3)
        cpd = self.model.get_cpds('x3')
        self.assertEqual(cpd.variable, self.cpd3.variable)
        self.assertEqual(cpd.variance, self.cpd3.variance)
        self.assertEqual(cpd.beta_0, self.cpd3.beta_0)
        self.assertEqual(cpd.evidence, self.cpd3.evidence)
        np_test.assert_array_equal(cpd.beta_vector, self.cpd3.beta_vector)

        tab_cpd = TabularCPD(
            'grade',
            3, [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1], [0.1, 0.1, 0.1, 0.1, 0.1, 0.1],
                [0.8, 0.8, 0.8, 0.8, 0.8, 0.8]],
            evidence=['diff', 'intel'],
            evidence_card=[2, 3])
        self.assertRaises(ValueError, self.model.add_cpds, tab_cpd)
        self.assertRaises(ValueError, self.model.add_cpds, 1)
        self.assertRaises(ValueError, self.model.add_cpds, 1, tab_cpd)

    @unittest.skip("TODO")
    def test_to_joint_gaussian(self):
        self.model.add_cpds(self.cpd1, self.cpd2, self.cpd3)
        jgd = self.model.to_joint_gaussian()
        self.assertEqual(jgd.variables, ['x1', 'x2', 'x3'])
        np_test.assert_array_equal(jgd.mean, np.array([[1.0], [-4.5], [8.5]]))
        np_test.assert_array_equal(
            jgd.covariance,
            np.array([[4.0, 2.0, -2.0], [2.0, 5.0, -5.0], [-2.0, -5.0, 8.0]]))

    @unittest.skip("TODO")
    def test_check_model(self):
        self.model.add_cpds(self.cpd1, self.cpd2, self.cpd3)
        self.assertEqual(self.model.check_model(), True)

        self.model.add_edge('x1', 'x4')
        cpd4 = LinearGaussianCPD('x4', [4, -1], 3, ['x2'])
        self.model.add_cpds(cpd4)

        self.assertRaises(ValueError, self.model.check_model)

    @unittest.skip("TODO")
    def test_not_implemented_methods(self):
        self.assertRaises(ValueError, self.model.get_cardinality, 'x1')
        self.assertRaises(NotImplementedError, self.model.fit,
                          [[1, 2, 3], [1, 5, 6]])
        self.assertRaises(NotImplementedError, self.model.predict,
                          [[1, 2, 3], [1, 5, 6]])
        self.assertRaises(NotImplementedError, self.model.to_markov_model)
        self.assertRaises(NotImplementedError, self.model.is_imap,
                          [[1, 2, 3], [1, 5, 6]])
示例#4
0
 model = LGB([('var1'),
              ('var2', 'var1'), ('var2', 'var27'),
              ('var3'),
              ('var4'),
              ('var5', 'var35'), ('var5', 'var37'),
              ('var6', 'var4'), ('var6', 'var33'),
              ('var7', 'var5'), ('var7', 'var19'), ('var7', 'var33'),
              ('var8', 'var22'),
              ('var9', 'var11'),
              ('var10', 'var4'), ('var10', 'var11'), ('var10', 'var19'), ('var10', 'var25'), ('var10', 'var32'),
              ('var11'),
              ('var12', 'var10'), ('var12', 'var15'), ('var12', 'var20'),
              ('var13', 'var5'),
              ('var14', 'var1'), ('var14', 'var3'), ('var14', 'var35'),
              ('var15'),
              ('var16', 'var15'),
              ('var17', 'var11'), ('var17', 'var23'),
              ('var18', 'var19'), ('var19', 'var25'),
              ('var19'),
              ('var20', 'var3'),
              ('var21', 'var3'), ('var21', 'var22'),
              ('var22', 'var20'),
              ('var23', 'var1'),
              ('var24', 'var25'),
              ('var25'),
              ('var26', 'var4'), ('var26', 'var20'), ('var26', 'var22'), ('var26', 'var27'),
              ('var27'),
              ('var28', 'var16'), ('var28', 'var20'), ('var28', 'var23'), ('var28', 'var29'),
              ('var29'),
              ('var30', 'var3'), ('var30', 'var18'), ('var30', 'var6'), ('var30', 'var29'),
              ('var31', 'var32'),
              ('var32', 'var29'),
              ('var33'),
              ('var34', 'var29'),
              ('var35', 'var31'),
              ('var36', 'var6'), ('var36', 'var37'),
              ('var37', 'var32'), ('var37', 'var35'),
              ('var38'),
              ('var39', 'var19'), ('var39', 'var36'), ('var39', 'var38')])
示例#5
0
# For P(Y| X1, X2, X3) = N(-2x1 + 3x2 + 7x3 + 0.2; 9.6)
from pgmpy.factors.continuous import LinearGaussianCPD
cpd = LinearGaussianCPD('Y',  [0.2, -2, 3, 7], 9.6, ['X1', 'X2', 'X3'])
print(cpd)


# A Gaussian Bayesian is defined as a network all of whose variables are continuous, and where all of the CPDs are linear Gaussians. These networks are of particular interest as these are an alternate form of representaion of the Joint Gaussian distribution.
# 
# These networks are implemented as the LinearGaussianBayesianNetwork class in the module, pgmpy.models.continuous. This class is a subclass of the BayesianModel class in pgmpy.models and will inherit most of the methods from it. It will have a special method known as to_joint_gaussian that will return an equivalent JointGuassianDistribution object for the model.

# In[26]:


from pgmpy.models import LinearGaussianBayesianNetwork

model = LinearGaussianBayesianNetwork([('x1', 'x2'), ('x2', 'x3')])
cpd1 = LinearGaussianCPD('x1', [1], 4)
cpd2 = LinearGaussianCPD('x2', [-5, 0.5], 4, ['x1'])
cpd3 = LinearGaussianCPD('x3', [4, -1], 3, ['x2'])
# This is a hack due to a bug in pgmpy (LinearGaussianCPD
# doesn't have `variables` attribute but `add_cpds` function
# wants to check that...)
cpd1.variables = [*cpd1.evidence, cpd1.variable]
cpd2.variables = [*cpd2.evidence, cpd2.variable]
cpd3.variables = [*cpd3.evidence, cpd3.variable]
model.add_cpds(cpd1, cpd2, cpd3)
jgd = model.to_joint_gaussian()
jgd.variables


# In[27]:
 def setUp(self):
     self.model = LinearGaussianBayesianNetwork([('x1', 'x2'), ('x2', 'x3')])
     self.cpd1 = LinearGaussianCPD('x1', [1], 4)
     self.cpd2 = LinearGaussianCPD('x2', [-5, 0.5], 4, ['x1'])
     self.cpd3 = LinearGaussianCPD('x3', [4, -1], 3, ['x2'])
class TestLGBNMethods(unittest.TestCase):
    @unittest.skip("TODO")
    def setUp(self):
        self.model = LinearGaussianBayesianNetwork([('x1', 'x2'), ('x2', 'x3')])
        self.cpd1 = LinearGaussianCPD('x1', [1], 4)
        self.cpd2 = LinearGaussianCPD('x2', [-5, 0.5], 4, ['x1'])
        self.cpd3 = LinearGaussianCPD('x3', [4, -1], 3, ['x2'])

    @unittest.skip("TODO")
    def test_add_cpds(self):
        self.model.add_cpds(self.cpd1)
        cpd = self.model.get_cpds('x1')
        self.assertEqual(cpd.variable, self.cpd1.variable)
        self.assertEqual(cpd.variance, self.cpd1.variance)
        self.assertEqual(cpd.beta_0, self.cpd1.beta_0)

        self.model.add_cpds(self.cpd2)
        cpd = self.model.get_cpds('x2')
        self.assertEqual(cpd.variable, self.cpd2.variable)
        self.assertEqual(cpd.variance, self.cpd2.variance)
        self.assertEqual(cpd.beta_0, self.cpd2.beta_0)
        self.assertEqual(cpd.evidence, self.cpd2.evidence)
        np_test.assert_array_equal(cpd.beta_vector, self.cpd2.beta_vector)

        self.model.add_cpds(self.cpd3)
        cpd = self.model.get_cpds('x3')
        self.assertEqual(cpd.variable, self.cpd3.variable)
        self.assertEqual(cpd.variance, self.cpd3.variance)
        self.assertEqual(cpd.beta_0, self.cpd3.beta_0)
        self.assertEqual(cpd.evidence, self.cpd3.evidence)
        np_test.assert_array_equal(cpd.beta_vector, self.cpd3.beta_vector)

        tab_cpd = TabularCPD('grade', 3, [[0.1, 0.1, 0.1, 0.1, 0.1, 0.1],
                                          [0.1, 0.1, 0.1, 0.1, 0.1, 0.1],
                                          [0.8, 0.8, 0.8, 0.8, 0.8, 0.8]],
                             evidence=['diff', 'intel'], evidence_card=[2, 3])
        self.assertRaises(ValueError, self.model.add_cpds, tab_cpd)
        self.assertRaises(ValueError, self.model.add_cpds, 1)
        self.assertRaises(ValueError, self.model.add_cpds, 1, tab_cpd)

    @unittest.skip("TODO")
    def test_to_joint_gaussian(self):
        self.model.add_cpds(self.cpd1, self.cpd2, self.cpd3)
        jgd = self.model.to_joint_gaussian()
        self.assertEqual(jgd.variables, ['x1', 'x2', 'x3'])
        np_test.assert_array_equal(jgd.mean, np.array([[1.0], [-4.5], [8.5]]))
        np_test.assert_array_equal(jgd.covariance, np.array([[4.0, 2.0, -2.0],
                                                             [2.0, 5.0, -5.0],
                                                             [-2.0, -5.0, 8.0]]))

    @unittest.skip("TODO")
    def test_check_model(self):
        self.model.add_cpds(self.cpd1, self.cpd2, self.cpd3)
        self.assertEqual(self.model.check_model(), True)

        self.model.add_edge('x1', 'x4')
        cpd4 = LinearGaussianCPD('x4', [4, -1], 3, ['x2'])
        self.model.add_cpds(cpd4)

        self.assertRaises(ValueError, self.model.check_model)

    @unittest.skip("TODO")
    def test_not_implemented_methods(self):
        self.assertRaises(ValueError, self.model.get_cardinality, 'x1')
        self.assertRaises(NotImplementedError, self.model.fit, [[1, 2, 3], [1, 5, 6]])
        self.assertRaises(NotImplementedError, self.model.predict, [[1, 2, 3], [1, 5, 6]])
        self.assertRaises(NotImplementedError, self.model.to_markov_model)
        self.assertRaises(NotImplementedError, self.model.is_imap, [[1, 2, 3], [1, 5, 6]])
示例#8
0
 def setUp(self):
     self.model = LinearGaussianBayesianNetwork([("x1", "x2"), ("x2", "x3")])
     self.cpd1 = LinearGaussianCPD("x1", [1], 4)
     self.cpd2 = LinearGaussianCPD("x2", [-5, 0.5], 4, ["x1"])
     self.cpd3 = LinearGaussianCPD("x3", [4, -1], 3, ["x2"])