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]])
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')])
# 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]:
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]])
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"])