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]])
# 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]: jgd.mean # In[28]: jgd.covariance
print("beta37=" + str(beta)) cpd37 = LGCPD('var37', beta, variancevals[36], ['var5', 'var36']) '''CPD38''' beta = betaVectorCalculator(['var39'], df, df.var38) print("beta38=" + str(beta)) cpd38 = LGCPD('var38', beta, variancevals[37], ['var39']) '''CPD39''' cpd39 = LGCPD('var39', [0], variancevals[38]) cpd40 = LGCPD('v', [0], 1) cpd41 = LGCPD('a', [0, 0], 1, ['v']) model.add_cpds(cpd1, cpd2, cpd3, cpd4, cpd5, cpd6, cpd7, cpd8, cpd9, cpd10, cpd11, cpd12, cpd13, cpd14, cpd15, cpd16, cpd17, cpd18, cpd19, cpd20, cpd21, cpd22 , cpd23, cpd24, cpd25, cpd26, cpd27, cpd28, cpd29, cpd30, cpd31, cpd32, cpd33, cpd34, cpd35, cpd36, cpd37, cpd38, cpd39, cpd40, cpd41) print(model.get_cpds('var1')) print(model.get_cpds('var2')) print(model.get_cpds('var3')) print(model.get_cpds('var4')) print(model.get_cpds('var5')) print(model.get_cpds('var6')) print(model.get_cpds('var7')) print(model.get_cpds('var8')) print(model.get_cpds('var9')) print(model.get_cpds('var10')) print(model.get_cpds('var11')) print(model.get_cpds('var12'))
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]])