Exemple #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
Exemple #2
0
    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)
Exemple #3
0
 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)
Exemple #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)
Exemple #5
0
    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
Exemple #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)
Exemple #7
0
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
Exemple #8
0
    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)
Exemple #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)
Exemple #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)
Exemple #11
0
 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)])
Exemple #12
0
 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]]
     )
Exemple #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)
Exemple #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)
Exemple #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)
Exemple #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)
Exemple #17
0
 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
Exemple #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)])
Exemple #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")