Esempio n. 1
0
    def setUp(self):
        # create a discrete network
        G = bayesnet.BNet('Water Sprinkler Bayesian Network')
        c, s, r, w = [
            G.add_v(bayesnet.BVertex(nm, True, 2)) for nm in 'c s r w'.split()
        ]
        for ep in [(c, r), (c, s), (r, w), (s, w)]:
            G.add_e(graph.DirEdge(len(G.e), *ep))
        G.InitDistributions()
        c.setDistributionParameters([0.5, 0.5])
        s.setDistributionParameters([0.5, 0.9, 0.5, 0.1])
        r.setDistributionParameters([0.8, 0.2, 0.2, 0.8])
        w.distribution[:, 0, 0] = [0.99, 0.01]
        w.distribution[:, 0, 1] = [0.1, 0.9]
        w.distribution[:, 1, 0] = [0.1, 0.9]
        w.distribution[:, 1, 1] = [0.0, 1.0]

        self.c = c
        self.s = s
        self.r = r
        self.w = w
        self.BNet = G

        # create a simple continuous network
        G2 = bayesnet.BNet('Gaussian Bayesian Network')
        a, b = [
            G2.add_v(bayesnet.BVertex(nm, False, 1)) for nm in 'a b'.split()
        ]
        for ep in [(a, b)]:
            G2.add_e(graph.DirEdge(len(G2.e), *ep))

        G2.InitDistributions()
        a.setDistributionParameters(mu=1.0, sigma=1.0)
        b.setDistributionParameters(mu=1.0, sigma=1.0, wi=2.0)

        self.a = a
        self.b = b
        self.G2 = G2
Esempio n. 2
0
 def setUp(self):
     # create a discrete network
     G = bayesnet.BNet('Water Sprinkler Bayesian Network')
     c, s, r, w = [G.add_v(bayesnet.BVertex(nm, True, 2)) for \
                   nm in 'c s r w'.split()]
     for ep in [(c, r), (c, s), (r, w), (s, w)]:
         G.add_e(graph.DirEdge(len(G.e), *ep))
     G.InitDistributions()
     c.setDistributionParameters([0.5, 0.5])
     s.setDistributionParameters([0.5, 0.9, 0.5, 0.1])
     r.setDistributionParameters([0.8, 0.2, 0.2, 0.8])
     w.distribution[:, 0, 0] = [0.99, 0.01]
     w.distribution[:, 0, 1] = [0.1, 0.9]
     w.distribution[:, 1, 0] = [0.1, 0.9]
     w.distribution[:, 1, 1] = [0.0, 1.0]
     self.c = c
     self.s = s
     self.r = r
     self.w = w
     self.BNet = G
Esempio n. 3
0
    def setUp(self):
        # create the network
        G = bayesnet.BNet('Asia Bayesian Network')

        visit, smoking, tuberculosis, bronchitis, lung, ou, Xray, dyspnoea = \
        [G.add_v(bayesnet.BVertex( nm, True, 2)) for nm in \
        'visit smoking tuberculosis bronchitis lung ou Xray dyspnoea'.split()]

        for ep in [(visit,tuberculosis), (tuberculosis, ou), (smoking,lung), \
                   (lung, ou), (ou, Xray), (smoking, bronchitis), \
                   (bronchitis, dyspnoea), (ou, dyspnoea)]:
            G.add_e(graph.DirEdge(len(G.e), *ep))
        G.InitDistributions()
        visit.setDistributionParameters([0.99, 0.01])
        tuberculosis.distribution[:, 0] = [0.99, 0.01]
        tuberculosis.distribution[:, 1] = [0.95, 0.05]
        smoking.setDistributionParameters([0.5, 0.5])
        lung.distribution[:, 0] = [0.99, 0.01]
        lung.distribution[:, 1] = [0.9, 0.1]
        ou.distribution[:, 0, 0] = [1, 0]
        ou.distribution[:, 0, 1] = [0, 1]
        ou.distribution[:, 1, 0] = [0, 1]
        ou.distribution[:, 1, 1] = [0, 1]
        Xray.distribution[:, 0] = [0.95, 0.05]
        Xray.distribution[:, 1] = [0.02, 0.98]
        bronchitis.distribution[:, 0] = [0.7, 0.3]
        bronchitis.distribution[:, 1] = [0.4, 0.6]
        dyspnoea.distribution[{'bronchitis': 0, 'ou': 0}] = [0.9, 0.1]
        dyspnoea.distribution[{'bronchitis': 1, 'ou': 0}] = [0.2, 0.8]
        dyspnoea.distribution[{'bronchitis': 0, 'ou': 1}] = [0.3, 0.7]
        dyspnoea.distribution[{'bronchitis': 1, 'ou': 1}] = [0.1, 0.9]
        self.visit = visit
        self.tuberculosis = tuberculosis
        self.smoking = smoking
        self.lung = lung
        self.ou = ou
        self.Xray = Xray
        self.bronchitis = bronchitis
        self.dyspnoea = dyspnoea
        self.BNet = G
Esempio n. 4
0
    def testSEM(self):
        return
        N = 700
        # sample the network N times, delete some data
        cases = self.BNet.Sample(
            N)  # cases = [{'c':0,'s':1,'r':0,'w':1},{...},...]
        for i in range(25):
            case = cases[3 * i]
            rand = random.sample(['c', 's', 'r', 'w'], 1)[0]
            case[rand] = '?'
        for i in range(3):
            case = cases[3 * i]
            rand = random.sample(['c', 's', 'r', 'w'], 1)[0]
            case[rand] = '?'
        G = bayesnet.BNet('Water Sprinkler Bayesian Network2')
        c, s, r, w = [G.add_v(bayesnet.BVertex(nm, True, 2)) for nm \
                      in 'c s r w'.split()]
        G.InitDistributions()

        # Test SEMLearning
        struct_engine = SEMLearningEngine(G)
        struct_engine.SEMLearningApprox(cases)
        struct_engine.SaveInFile('./output/testSEM05.txt', G, \
                                 struct_engine.BNet, struct_engine)
        struct_engine.EMLearning(cases, 10)
        struct_engine.SaveInFile('./output/testSEM205.txt', G, \
                                 struct_engine.BNet, struct_engine)
        print '1 OK!'

        G1 = bayesnet.BNet('Water Sprinkler Bayesian Network2')