예제 #1
0
def TestScoredNetworkHashing():
    # test due to a bug encountered earlier
    net = network.Network([data.Variable(x) for x in range(5)], "0,1;1,2;4,3")
    snet = result._ScoredNetwork(net.edges, -10)
    for i in xrange(1000):
        if hash(snet) != hash(deepcopy(snet)):
            assert False
예제 #2
0
파일: greedy.py 프로젝트: while519/pebl
    def __init__(self, data_=None, prior_=None, **options):
        """
        Create a learner that uses a greedy learning algorithm.

        The algorithm works as follows:

            1. start with a random network
            2. Make a small, local change and rescore network
            3. If new network scores better, accept it, otherwise reject.
            4. Steps 2-3 are repeated till the restarting_criteria is met, at
               which point we begin again with a new random network (step 1)
        
        Any config param for 'greedy' can be passed in via options.
        Use just the option part of the parameter name.

        For more information about greedy learning algorithms, consult:

            1. http://en.wikipedia.org/wiki/Greedy_algorithm
            2. D. Heckerman. A Tutorial on Learning with Bayesian Networks. 
               Microsoft Technical Report MSR-TR-95-06, 1995. p.35.
            
        """

        super(GreedyLearner, self).__init__(data_, prior_)
        self.options = options
        config.setparams(self, options)
        if not isinstance(self.seed, network.Network):
            self.seed = network.Network(self.data.variables, self.seed)
예제 #3
0
파일: test_prior.py 프로젝트: while519/pebl
 def setUp(self):
     self.net = network.Network(
         [data.DiscreteVariable(i,3) for i in xrange(5)], 
         "0,1;3,2;2,4;1,4"
     )
     self.p = prior.UniformPrior(len(self.net.nodes))
     self.p2 = prior.UniformPrior(len(self.net.nodes), weight=2.0)
예제 #4
0
 def test_score1(self):
     self.ne.alter_network(add=[(1, 0), (2, 0), (3, 0)])
     self.ne.alter_network(add=[(1, 2)])
     assert allclose(
         self.ne.score_network(
             network.Network(self.data.variables, "1,0;2,0;3,0")),
         -15.461087517)
예제 #5
0
파일: posterior.py 프로젝트: afcarl/pebl
    def __getitem__(self, key):
        """Retrieve a specific network (and score) from the posterior."""
        if isinstance(key, slice):
            return self.__getslice__(self, key.start, key.stop)

        net = network.Network(self.nodes, self.adjacency_matrices[key])
        net.score = self.scores[key]
        return net
예제 #6
0
    def setUp(self):
        nodes = [data.Variable(x) for x in range(5)] 
        nets = ("0,1", "1,0" , "1,2;2,3", "4,1;1,2", "4,2;4,3")
        scores = (-10.5, -11, -8.5, -12, -13)

        self.result1 = result.LearnerResult(size=0)
        self.result1.nodes = nodes
        self.result1.start_run()
        for n,s in zip(nets, scores):
            self.result1.add_network(network.Network(nodes, n), s)

        self.result2 = result.LearnerResult(size=0)
        self.result2.nodes = nodes
        self.result2.start_run()
        self.result2.add_network(network.Network(nodes, "1,2;2,3;3,4"), -6)
        self.result2.add_network(network.Network(nodes, "1,2;2,3;3,4;0,4;0,2"), -5.5)
        self.result2.add_network(network.Network(nodes, "0,1"), -10.5)
예제 #7
0
파일: test_prior.py 프로젝트: while519/pebl
def test_null_prior():
    net = network.Network(
        [data.DiscreteVariable(i,3) for i in xrange(5)], 
        "0,1;3,2;2,4;1,4"
    )
    p1 = prior.NullPrior()
    assert p1.loglikelihood(net) == 0.0
    net.edges.add((1,4))
    assert p1.loglikelihood(net) == 0.0
예제 #8
0
파일: posterior.py 프로젝트: afcarl/pebl
    def consensus_network(self, threshold=.3):
        """Return a consensus network with the given threshold."""

        features = self.consensus_matrix
        features[features >= threshold] = 1
        features[features < threshold] = 0
        features = features.astype(bool)

        return network.Network(self.nodes, features)
예제 #9
0
 def test_alter3(self):
     self.ne.alter_network(add=[(1, 0), (2, 0), (3, 0)])
     assert allclose(self.ne.alter_network(add=[(2, 3)]), -15.0556224089)
     assert allclose(
         evaluator.NetworkEvaluator(
             self.data,
             network.Network(self.data.variables,
                             "1,0;2,0;3,0;2,3")).score_network(),
         -15.0556224089)
예제 #10
0
 def setUp(self):
     nodes = [data.Variable(x) for x in range(5)] 
     self.result = result.LearnerResult(size=self.size)
     self.result.nodes = nodes
     
     self.result.start_run()
     nets = ("0,1", "1,0" , "1,2;2,3", "4,1;1,2", "4,2;4,3")
     scores = (-10.5, -11, -8.5, -12, -13)
     for n,s in zip(nets, scores):
         self.result.add_network(network.Network(nodes, n), s)
예제 #11
0
파일: test_prior.py 프로젝트: while519/pebl
 def setUp(self):
     self.net = network.Network(
         [data.DiscreteVariable(i,3) for i in xrange(5)], 
         "0,1;1,3;1,2"
     )
     energymat = N.array([[ 0.5,  0. ,  0.5,  0.5,  0.5],
                          [ 0.5,  0.5,  0.5,  0.5,  0. ],
                          [ 0.5,  0.5,  0.5,  0.5,  0.5],
                          [ 0.5,  0.5,  0.5,  0.5,  5. ],
                          [ 0.5,  0.5,  0.5,  0.5,  0.5]])
     self.p = prior.Prior(len(self.net.nodes), energymat, required_edges=[(1,2)])
예제 #12
0
파일: test_prior.py 프로젝트: while519/pebl
 def setUp(self):
     self.net = network.Network(
         [data.DiscreteVariable(i,3) for i in xrange(5)], 
         "0,1;3,2;2,4;1,4"
     )
     self.p = prior.Prior(
         len(self.net.nodes), 
         required_edges=[(1,4),(0,1)], 
         prohibited_edges=[(3,4)], 
         constraints=[lambda am: not am[0,4]]
     )
예제 #13
0
    def __init__(self, data_=None, prior_=None, networks=None):
        """Create a ListLearner learner.

        networks should be a list of networks (as network.Network instances). 

        """

        super(ListLearner, self).__init__(data_, prior_)
        self.networks = networks
        if not networks:
            variables = self.data.variables
            _net = lambda netstr: network.Network(variables, netstr)
            netstrings = config.get('listlearner.networks').splitlines()
            self.networks = (_net(s) for s in netstrings if s)
예제 #14
0
    def __init__(self, data_=None, prior_=None, **options):
        """Create a Simulated Aneaaling learner.

        For more information about Simulated Annealing algorithms, consult:

            1. http://en.wikipedia.org/wiki/Simulated_annealing
            2. D. Heckerman. A Tutorial on Learning with Bayesian Networks. 
               Microsoft Technical Report MSR-TR-95-06, 1995. p.35-36.

        Any config param for 'simanneal' can be passed in via options.
        Use just the option part of the parameter name.
        
        """

        super(SimulatedAnnealingLearner,self).__init__(data_, prior_)
        config.setparams(self, options)
        if not isinstance(self.seed, network.Network):
            self.seed = network.Network(self.data.variables, self.seed)
예제 #15
0
 def setUp(self):
     net1 = network.Network([data.Variable(x) for x in range(5)], "0,1")
     self.sn1 = result._ScoredNetwork(net1.edges, -11.15)
     net2 = network.Network([data.Variable(x) for x in range(5)], "1,0")
     self.sn2 = result._ScoredNetwork(net2.edges, -11.15)
예제 #16
0
 def setUp(self):
     self.net = network.Network(
         [data.DiscreteVariable(i, 3) for i in xrange(6)])
     for edge in [(0, 1), (0, 3), (1, 2)]:
         self.net.edges.add(edge)
예제 #17
0
파일: posterior.py 프로젝트: afcarl/pebl
 def __iter__(self):
     """Iterate over the networks in the posterior in sorted order."""
     for adjmat, score in zip(self.adjacency_matrices, self.scores):
         net = network.Network(self.nodes, adjmat)
         net.score = score
         yield net
예제 #18
0
 def setUp(self):
     self.net = network.Network(
         [data.DiscreteVariable(str(i), 3) for i in xrange(6)], [(0, 1),
                                                                 (4, 5),
                                                                 (2, 3)])
예제 #19
0
 def setUp(self):
     self.net = network.Network(
         [data.DiscreteVariable(str(i), 3) for i in xrange(6)],
         "0,1;4,5;2,3")