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]])
示例#2
0
# 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
示例#3
0
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]])